本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页
最热资讯


亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」
本方案是一种室外摄像头,可计算通过的流量并记录其速度和方向。
介绍
嗨 - 我住在路边。这是一条乡村小路,但在我看来,随着通勤交通的增加,它每年都变得越来越繁忙,而且大部分交通都超过了限速。但我无法证明。所以我决定建立自己的交通摄像头并进行自己的监控。
我的房子在一个村庄的边缘,所以位于 30 英里/小时的速度限制内......只是。在道路上约 50 米处,限速增加到 60 英里/小时。如果接近的车辆以超过 30 英里/小时的速度行驶,则有限速路标和另一个在明亮的 LED 灯中闪烁 30 的标志,但是虽然许多人遵守限速,但很多人不这样做,许多人只是忽略了它。准确判断超车速度并不总是那么容易,但我估计大多数人都将我家前面的道路用作加速或减速区域。但我又无法证明。
地方当局通常通过在马路对面铺设两条橡胶条来进行交通和速度调查。它们充满空气,路边的传感器检测轮胎压缩空气空间时气压的变化。相距已知距离的两条带可让您计算出速度。
这不是我的选择。我打算建造一些半永久性的东西来监控交通数月,我不想冒险给道路使用者带来任何滋扰或危险。所以我的要求是建立一个可靠的、长期的方法来测量我家门前的交通量和速度。
另一个要求是确定可能证明有趣的行进方向。拍摄过往车辆的照片是一种奖励,但不是必需的。
简而言之,我最终使用 Raspberry Pi 和相机构建了一个解决方案。我找到了Greg 的网站,该网站解决了类似的挑战,他的代码构成了这个项目的基础。我根据自己的情况修改了它并让它运行。一年后,我现在可以看到每天的交通波动,有多少司机遵守限速,并计算每天有多少车辆通过。最近,它证实了由于冠状病毒的爆发导致的流量大幅下降,以及尽管封锁仍然存在,但流量逐渐增加。
自从我完成项目以来,我已经写了一年多,这并不理想;我应该在构建项目时编写它。我现在知道得更好了,但封锁让我有时间把它写下来。但是,我确实在构建过程中保留了一些笔记,现在我的目标是将这些笔记和照片转换为更易于阅读的内容,以帮助其他人构建类似的项目。
该项目的性质非常技术性,对我来说有点令人生畏,但不要让这让你失望。虽然我接触过 Pis 和 Arduinos,但我不会认为自己是大师。这是我使用 Pi 的第一个合适的项目。我过去写过代码,但不会认为自己是现代软件开发人员,因为我的编码技能没有跟上。编码没有什么特别困难的,尽管可能很难完全理解为什么即使有评论我也在做某些事情。所以我在这个网站上添加了一个部分来解释每个部分的目的。
大部分时间都花在理解现有的代码库上,然后根据我的目的对其进行修改,这证明了最有趣的部分。如您所见,我在此过程中遇到了一些具有挑战性的问题需要解决。您将需要针对您的特定情况更改代码中的某些设置。
背景调查
所以基本的需求是建立某种摄像头,可以计算交通流量并计算出经过的车辆的速度和方向。
更复杂的是,我房子的前面与路边不平行,道路大约是。10米开外。我的房子和道路之间还有一条人行道(人行道)和一块草地,所以会有一些行人在车辆和相机之间经过,但我们在这里不是很忙……也许是奇怪的遛狗者/跑步者,尤其是在美好的日子.
我很快专注于使用基于计算机的视觉进行车辆识别的相机解决方案。
所以格雷格住在北纬 40 度左右的俄亥俄州,我的印象是他主要关心的是几个人的速度,但他并不关心交通量,也不想在晚上记录数据。我住在苏格兰北纬 56 度左右,冬天下午 4 点左右天黑了,那是通勤高峰时间之前。没有路灯,所以如果我要获得任何可靠的长期数据,我需要一个可以在黑暗中工作的解决方案。我最初的想法是使用红外相机解决这个问题,实际上我购买了 Pi IR 相机,尽管我认为我可以只使用普通的 Pi 相机,正如我将解释的那样。这不是热感应红外传感器,因此您需要一个红外光源来照亮您的拍摄对象。
挑战是用 10 米外的红外灯照亮这条路。我已经有一个内置 2 个红外灯的 IP 安全摄像头,所以我测试了 Pi 的红外摄像头,看它是否可以从 IP 摄像头提供的红外灯在黑暗中“看到”。结果太暗而无法使用。这可能是因为 Pi 摄像机设置的红外波段与我的 IP 摄像机提供的红外波段不同,但效果不佳。我考虑过购买大型 IR 泛光照明器,但它们并不十分微妙,使用相当大的功率并且会增加所需的布线、更多的费用和另一件出错的事情。当时我并不确定该解决方案是否可行,因此我不想为无法重复使用的东西承担费用。
然后我意识到无论如何我真的不需要在黑暗中看到。在这个国家,当您在夜间开车时,必须打开车灯,这是一个很方便的法律要求。现代汽车往往会稍微侧向漏光,以便为驾驶员提供更广阔的视野。如果我能检测到前大灯的运动,那会起作用吗?
Greg 的代码使用了优秀的 OpenCV 软件。算法寻找运动的斑点,白天会在整个车辆周围放一个盒子。但是在夜间它看不到大部分车辆,只能看到汽车前后的灯,因此每辆车显示两个框。我只想跟踪其中一个。如果您知道现在是夜间,那么您可以调整 OpenCV 参数以检测较小的前灯并仍然计算出车速。你怎么知道天黑了?好吧,您有一台可以测量整体光照水平的相机,因此您可以根据该光照水平调整检测设置。
还有两辆车同时从镜头前经过的问题。这种情况确实会发生,但并不经常发生,当它发生时,程序可能会超时等待汽车通过,或者您可以获得负速度并忽略它。这将导致交通量报告不足,但总比报告过多车辆和危及数据可信度要好。
我很早就意识到我必须把相机放在外面。将摄像机安装在室内会导致窗户反射,从而导致错误检测。请记住,我的房子与道路不平行,相机必须与道路平行安装才能进行数学运算。因此,室内摄像机会受到反射的严重影响。这给了我两个额外的问题需要解决:1)如何为 Pi 提供电源和数据;2)当相机朝南时,如何保护 Pi 免受苏格兰冬天的雨、雪、风和夏日的酷热。
为了解决第一个问题,我直接选择了以太网供电 (PoE)。我已经有一个 Netgear PoE 以太网交换机,所以这是显而易见的解决方案,并且可以使用支持 PoE 的 Raspberry Pi 帽子。这意味着我只需要将一根以太网电缆从交换机连接到 Pi,就可以对数据和电源进行分类。
我决定把它贴在我家门前的栅栏柱上。我可以轻松地将以太网电缆连接到它,它为防震图像提供了一个坚固的支架。
至于防风雨,我找到了一家名为 naturebytes.org 的公司,该公司为 Pi 制作了一个案例。它针对野生动物项目,是向孩子们介绍整个 Pi 事物并对大自然产生兴趣的好方法。它看起来是理想的解决方案,并且已经证明可以胜任这项工作,尽管我用粗糙的木制围栏对其进行了补充,以保持最恶劣的天气并为相机提供额外的遮阳。该外壳可以单独购买,也可以作为套件的一部分购买,包括 Pi、相机和其他部件,例如我不需要的电池和 PIR 传感器。说明可以下载,写的很好。即便如此,我也必须进行一些修改,我将在下一节中解释这些修改。
老实说,我不相信 Pi 能存活那么久。我把电子产品放在外面一个不密封的盒子里,并试图在潮湿的冬天保持干燥,在夏天保持凉爽。然而,当我写这篇文章时,我已经 16 个月了,没有任何错误。由于房屋断电,导致程序无法自动重启,但这是一个软件问题。硬件工作顺利。对 Raspberry Pi、PoE 帽子和 NatureBytes 外壳的质量赞不绝口。
集会
该案例需要进行一些修改。Naturebytes 项目设计为由内部电池组供电并保持良好密封。显然,这对短期来说是可以的,但不符合我的要求。
我担心设备在夏天过热。在一些测试中,当有大量通过的流量时,我会监测内部温度,并且内部温度变得非常高——这是一个忙碌的小 CPU,正在执行所有计算机视觉智能操作。添加一些夏天的阳光,如果没有额外的冷却,Pi 会关闭以停止它自己做饭。
表壳背面有一个孔,橡胶垫圈朝向表壳顶部。这提供了一种让内部空间通风的好方法——毕竟热量会上升。我在洞上放了一些纱布,以减少可能爬进去的虫子的数量,然后在纱布上放了一个 5 伏的小风扇。稍后当我解释它是如何控制的时,会详细介绍风扇。
外壳带有一个内部安装卡,相机和 Pi 安装在该卡上。相机在它的前面,而 Pi 在另一个。Naturebytes 说明显示安装的 Pi 顶部面向机箱正面,但我想最大限度地增加 PoE 帽和 Pi CPU 周围的气流,所以我将其翻转过来,使 Pi 的顶部面向机箱的背面你在照片中看到的情况。
下一个问题是提供的用于将 Pi 连接到安装板的螺丝不够长,无法增加 PoE 帽子的额外高度。因此,我将提供的 15 毫米垫片缩短到 5 到 8 毫米之间,这样可以在 pi 相机螺母上提供足够的间隔,但允许固定 PoE 和 Pi 的螺钉工作。非常小心,相机螺母不要使 Pi 背面的任何电路短路!
由于我使用了风扇孔的电缆入口,我不得不为 LAN 电缆钻一个新孔。通过使其与原始尺寸相同,我可以重复使用外壳随附的索环,以帮助减少任何水分/虫子进入。
由于风扇设置为将热空气吹出机箱,因此我需要某个地方让空气进入机箱;我在箱子底部钻了四个小孔。如果有任何水进入,这些也将用作排水孔。我再次用纱布覆盖这些孔以尽量减少错误进入。纱布是用胶水粘在一起的。
摄像机安装在现有的立柱上,立柱的正面与我家的正面平行,因此与道路不平行。我在机箱底部添加了一个从旧户外灯遗留下来的枢轴安装座,以便我可以调整相机的角度,使其垂直面对道路。
箱子是亮绿色的,虽然在野生动物的情况下可能没问题,但在我家的前面看起来确实很明显。此外,我想改进外壳的防风雨和遮阳功能。所以我用一个前面有一个洞的木箱把箱子围起来,这样相机就不会被遮挡了。盒子没有帮助通风的底座,直接固定在柱子上而不是盒子上;因此盒子和外壳是独立安装的,这意味着来自鸟类、松鼠或好奇的孩子的振动甚至大雨都不会模糊相机图像。
最后,我在盒子顶部钉了一些防潮层,以防止雨水渗入盒子区域,并将其涂成白色以反射夏日阳光的热量。
后来我发现相机的自动曝光受到天空亮度的严重影响。这导致经过的车辆的图像非常暗。该解决方案与许多风景摄影师使用的解决方案相同。他们使用非常昂贵的分级过滤器;我用了一块鸭胶带。
设置树莓派
在运行一行代码之前,您需要在 Pi 上安装 Raspbian。Greg 在 Jessie 上记录了他的构建 - 我使用了 Stretch(版本 9),当前的最新版本是 Buster,如果您运行的是 Pi 4,则需要它。Greg 使用的是 Raspberry Pi 2。我使用的是 Raspberry Pi 3 型号 B+,它具有更快的处理器。网上有很多地方涉及安装 Raspbian,所以我不会再创建另一个。
OpenCV
当我构建 PI 时,我使用 OpenCV3 进行 Stretch 并遵循 Adrian Rosebrock 提供的出色说明。如果您想进入计算机视觉领域,这绝对是一个不错的起点。我专注于让我的测速相机工作,所以不会深入研究计算机视觉的细节——我只是想要一些有用的东西。OpenCV 的安装和编译确实进行了多次尝试,但经过一些坚持,我让它工作了。现在有一个 OpenCV 4,安装过程更简单。
所以总而言之,我在 Pi3 B+ 上使用 Python 3.5.3 和 OpenCV3.4.5 和 Raspbian Stretch。
计划概述
正如我之前提到的,最好查看 Greg 的网页,他详细解释了他的代码。我会为我做同样的事情,并专注于我对 Greg 的原始代码进行更改的地方。
但首先我认为在深入了解细节之前先概述一下程序的工作原理是个好主意。
基本原理是程序将检测在定义的框架内移动的对象。我们不会检测整个图像的移动,而只会检测我们知道交通将通过的定义区域。我们希望这个区域在车辆的运动方向上尽可能长,即一个广阔的区域。高度不那么重要,但您要确保它能够照亮车辆的灯光。例如,通过限制检测运动的区域,我们可以让 Pi 免于做不必要的工作,并减少空中鸟类错误检测的机会。如果它检测到多个对象,则它选择最大的一个。在下图中,您可以看到两个绿色竖条,它们分别标记了监控区域的左右范围。
使用 Pi 摄像头的视野角(Pi 摄像头 2 为 62.2 度)以及道路与摄像头之间的距离以及一些三角函数,可以计算出道路与道路之间的距离处的每像素英尺数。相机。
当车辆在图像上移动时,OpenCV 会生成一系列帧,其中包含围绕它“看到”移动的对象的一组边界框。
该代码计算出最大的框,并假设这是要跟踪的车辆。我们得到每个盒子左侧的 x 坐标。对于从右向左行驶的车辆,x 坐标位于车辆前方;对于从左到右行驶的车辆,x 坐标是边界框的后部,通常与车辆的后部重合,但如果车辆刚刚进入监控区域,则 x 坐标不是该区域,因为车辆的后部仍在该区域外. 通过计算以像素为单位的框坐标中的运动,我们可以确定车辆在每一帧之间行驶的距离。该程序还记录了每一帧之间的时间,因此我们可以计算出车辆的速度。
我修改了计算以允许两条车道的交通,每条车道与相机的距离都有自己的距离。
当 Greg 编写他的程序时,他发现 Pi 2 正在努力捕捉足够的帧来确定速度。他通过在车辆经过时关闭相机图像显示的刷新来减少 Pi 处理器的负载,从而解决了这个问题。这具有奇怪的效果,即汽车从一侧进入图像,消失,然后在离开图像之前重新出现。有时,当他们开得非常快时,您甚至看不到车辆进出,尽管图像和数据仍被记录下来。这在具有更快处理器的 Pi3 上可能不是必需的,但我没有改变它,因为它似乎是一种避免 Pi 过热的好方法,还提高了捕获更多帧的机会并导致更准确的速度. 无法看到移动车辆的图像是' 大问题;该单元大部分时间都没有受到人工监控,只是记录数据。
Greg 的程序保存了每辆车的图像以及屏幕上显示的速度,您也可以将数据保存到 CSV 文件中。我的道路每天大约有 2500 辆车通过。那是很多图像文件占用存储空间。所以我定义了一个速度限制,超过这个速度就会记录图像。我也有经过的行人,因此有一个最低速度,低于该速度不会记录数据。有时,如果两辆车同时在摄像头前交叉,程序会感到困惑。这通常会导致缓冲区中出现负速度或未检测到任何内容。因此,车辆必须完成转换或程序重置是有时间限制的。
在夜间测量速度的技巧是跟踪车辆的前灯。由于这些物体比您白天要跟踪的物体小,因此您必须修改“最小面积”参数。这控制 OpenCV 将围绕对象放置的最小框的大小。白天,您希望它足够大,以避免捡到鸟等。但在晚上(假设您没有路灯),没有其他可见的东西,因此您可以将最小区域降低到前灯大小。
另一个要试验的参数是“阈值”。这是 OpenCV 用来通过像素亮度差异检测对象的数字。因此,低阈值将检测到更多对象,而高阈值将检测到更少对象。对于夜晚,我们只想检测与黑色具有非常高对比度的汽车前灯的强光,因此我们想设置一个高阈值级别。理想情况下,我们想要一个检测前白光而不是红色尾灯的值,但我发现车灯和天气条件的变化太大而无法实现这一点。
当车辆接近摄像头时,它会首先检测到前灯,然后在它经过时尾灯进入视野。对于任何帧,如果在前灯离开监控区域之前尾灯看起来比后退的前灯大,程序将切换到跟踪尾灯而不是前灯。当这种情况发生时,该帧的速度计算变为负数;就好像汽车在几分之一秒内突然停下并倒车。因此,如果我们得到一系列正常速度值,然后是负值,我们可以非常确定它是尾灯。当这种情况发生时,程序停止跟踪,忽略最后一个负速度并记录到该点已记录的任何内容。这并不总是发生;这取决于前后灯的相对亮度,
Greg 的代码在监控区域的两端都有细长的像素带 - 在上图中标记为缓冲区。当在这些条带中检测到移动框的正面(图中红色显示)时,程序停止跟踪并执行保存图像和记录数据的步骤。
当天黑时,相机必须增加传感器为每张图像曝光的时间长度。这是为了捕捉足够的光线来制作图像。尽管 Pi 相机没有物理快门,但它实际上是一个电子快门,只能打开传感器一段时间。在光线不足的情况下,曝光时间会变长,这导致车辆经过时捕获的帧更少。在黑暗中,车灯周围的移动盒子有可能穿过帧之间的缓冲区;尤其是在车辆快速移动的情况下。因此,数据永远不会保存,我们会丢失这辆车的任何记录。
解决方法是增加监控区域两端的条带宽度。但是,我们想要从窄到宽一步到多少,我们什么时候这样做?
我采取的方法是每分钟读取一次光度计读数,然后将该读数映射到缓冲区宽度(我在程序中称之为“调整后的保存缓冲区”)、阈值和最小面积的值。在对各种算法和值进行大量测试后,我最终使用了保存缓冲区的倒数函数曲线、最小面积的平方根曲线和阈值的简单步进值。
我决定计算每帧记录的所有速度的平均值,而不是只计算最后一帧的速度。但是,我看到了交通从左向右移动的一致问题。第一次速读总是比随后的读数高得多。这显然影响了正在计算的平均速度。我花了很长时间才找出原因。
当车辆从左侧进入监控区域时,前面的车辆首先进入,但整个车辆通常不会完全进入监控区域;因此,边界框将不会围绕车辆的整个长度。该程序计算每帧 x 坐标的变化为:
但问题是“initial_x”中的值是第一帧边界框的左手角。这不是车辆的前部,而是车辆前部和后部之间的某个点。所以我改变了如下:
initial_w 是第一帧边界框的宽度,通常比车辆的全长短。此更改解决了问题。
用法
将 Picamera 指向道路。确保它垂直于交通方向。
在运行 carspeed.py 之前,将常量 L2R_DISTANCE 和 R2L_DISTANCE 修改为从 Pi 相机镜头前部到从左到右车道和从右到左车道中间的距离。
将 MIN_SPEED_IMAGE 修改为以 mph 为单位的最小速度以捕获图像。我通常将这个设置得相当高,因为我不想用我永远不会看到的汽车图像填满 Pi 的存储空间。
将 MIN_SPEED_SAVE 修改为以 mph 为单位的最小速度以捕获 CSV 文件中的数据并传递给 MQTT 代理。我通常将其设置为大约 10 英里/小时,这样我就不会记录行人。
修改 MAX_SPEED_SAVE 为记录的最大速度。有时,当两辆车交叉时,它会导致疯狂的速度数字。
您可能还需要根据相机传感器的方向调整 vflip 和 hflip 以匹配相机的方向。
从终端运行: python3 carspeed.py -ulx 64 -uly 321 -lrx 960 -lry 444 。Greg 的代码要求用户绘制矩形监控区域,但我绕过了这一点,而是更喜欢传入监控区域的坐标。这种方法的优点是每次运行程序时都会生成相同的一致监视区域。这也意味着程序可以在没有人工干预的情况下通过脚本启动,如果您希望它自动启动,例如断电后,这很方便。
当汽车通过监控区域时,图像将按照图像中的速度写入磁盘,并记录时间、平均速度、方向、帧数和速度标准偏差。
编码
从导入必要的包开始:
CV2 是 OpenCV 库。我正在使用 MQTT 将数据传递到另一个 Pi,但您不需要这样做。numpy 用于均值和标准差计算,argparse 用于解析传入的参数。
接下来,直接从 Greg 的代码中复制了一些方法和函数:
接下来添加了一些新功能:
接下来的几个函数都是夜间跟踪所必需的:
一些有用的常量。您将需要更改 L2R_DISTANCE 和 R2L_DISTANCE。如果您正在监控单个车道,它们可能是相同的值。
THRESHOLD 和 MIN_AREA 是初始值或默认值。
枚举值使程序更易于阅读。前三个监控跟踪进程 WAITING、TRACKING、SAVING 的当前状态。接下来的两个定义了图像上的移动方向。分配的值并不重要。TOO_CLOSE 定义了两辆跟随车辆之间的最短时间(以秒为单位)。如果我们在 0.4 秒内检测到另一辆车,我们将忽略它。MIN_SAVE_BUFFER 定义缓冲区的最小像素宽度,其中检测到最后一帧并启动数据保存。如果您发现正在跟踪车辆但帧经常落在保存缓冲区的任一侧,则可以增加此值。
现在捕获定义受监控区域的传入参数。
接下来确定帧宽度和每像素英尺并在屏幕上显示
接下来我们需要初始化一堆变量
并初始化相机。
我们希望看到程序正在处理,因此创建了一个窗口并将其移动到显示器的左上角。
稍后,我会将捕获的数据传递给另一个运行 MQTT 服务器的 Pi。这确保数据不仅仅存储在本地客户端上。服务器名称和密码显然已从附加代码中删除。
如果需要,创建 CSV 文件并放入一些列标题
根据输入参数计算被监控区域的尺寸,并全部打印到命令窗口。
最后,我们到了程序的核心。使用 capture_continuous,程序会重复抓取一帧并对其进行操作。使用 Capture_continuous 以便 Pi 相机在一次捕获一帧时不进行所需的初始化过程。图像被裁剪到监控区域。使用 pyimagesearch 站点上讨论的逻辑,图像被转换为灰度和模糊。第一次通过时,程序将图像保存为 base_image。然后使用 Base_image 与当前图像进行比较并查看发生了什么变化。此时,捕获图像和 base_image 之间的任何差异都由阈值图像中的白色斑点表示。
请注意,对于第一次迭代,我们会获得曝光读数并相应地设置最小面积、阈值和保存区域缓冲区。
接下来,程序使用 findContours 在阈值图像中查找最大的白色斑点。我们忽略小的白色斑点,因为它们可能是随机发生的,也可能代表穿过受监控区域的树叶或其他小物体。抓取图像和寻找运动的过程会一直持续到检测到运动为止。
第一次检测到运动时,状态从 WAITING 变为 TRACKING,并记录运动区域的初始值。我想在捕获所有帧后计算平均速度,因此我将计算出的速度存储在数组中。
我也在计算帧数。我们捕获的帧越多,我们对计算出的速度就越有信心,但如果我们只有一帧,那么我们就无法计算平均值。
car_gap 是当前被跟踪车辆与最后一辆车之间的时间差。我计算出两辆车之间的最小时间间隔,前车的尾灯和后车的前灯被顺序检测并在 30 英里/小时、40 英里/小时和 50 英里/小时的速度下被视为单独的车辆;对于我的相机设置,它达到了 0.76s、0.56s 和 0.44s。我推断 0.4 秒的差距 (TOO_CLOSE) 应该是错误读数(例如检测到尾灯)。
如果摄像机受到撞击或监控区域的照明发生剧烈变化,摄像机会认为存在运动,但通常不会检测到保存区缓冲区中的运动。因此,如果在设定的时间段后没有保存任何内容,它会重置。Greg 使用了 15 秒的值,但我已经走了 3 秒,因为我的交通行驶得更快而且更忙,我不想错过下一辆车,因为我正在数到 15。三秒也有助于消除行人和慢速骑行者的数据。
在 TRACKING 状态下,处理第二个和后续带有运动的图像以查看运动区域的变化程度。位置变化的计算取决于运动方向。从右到左,包围运动区域的框的 x 值代表汽车通过监控区域时的前方。但是对于从左到右的运动,在整辆车进入监控区域之前,x 值不会改变。随着越来越多的汽车进入监控区域,边界框变得越来越宽,直到边界框最终包围了汽车的后部。因此,汽车的前部是 x+w,其中 w 是包围运动区域的边界框的宽度。
一旦我们获得了汽车前部的当前位置,我们就可以计算从初始 x 位置的像素绝对变化。当前帧和初始帧之间的时间间隔提供已经过去的秒数。根据时间和距离,计算速度。
如果计算出的速度是负数,那么我们假设有问题(例如,我们捡到了一个尾灯),放弃当前帧并强制它保存我们目前得到的帧。
这个过程一直持续到运动区域的边界框到达监控区域的另一端。然后我们计算速度数组的均值和标准差,只要我们有两个以上的值。
那时,日期、时间被写入图像,速度显示在图像的中心,图像被写入磁盘。
如果速度高于所需限制但低于最大限制,我们将存储数据。状态更改为 SAVING。当汽车离开监控区域时,程序将继续观察运动,但由于状态不是 WAITING 或 TRACKING,因此运动将被忽略。
下一个“else”语句用于未检测到运动时。通常这很好,因为我们之前已经保存并记录了上一次迭代的所有数据。但是,如果当前状态仍为 TRACKING,则车辆未通过 SAVING 状态,并且必须未在保存缓冲区中捕获任何帧。我偶尔会在光线不足的情况下非常快的车辆看到这种情况,因为运气不好确定没有帧落在保存缓冲区内。在这种情况下,只要我们有一个或多个数据项,我仍然可以捕获从以前的迭代中计算出的数据。
无论我们是否错过了一辆车,我们都会重置状态并等待下一辆车。
仅当未检测到运动时才更新图像窗口。如果状态为 WAITING,则将日期、时间和状态添加到当前图像中。base_image 会稍微调整以考虑监控区域的光照变化。这些变化是由云层经过、阴影角度的变化、树叶吹动等引起的。此外,每 60 秒我们获取一个新的曝光读数,并相应地调整 MIN 区域、阈值和保存区域缓冲区。
检查键盘是否按下了“q”,表明程序应终止。
风扇
我不确定它会进入那个绿色的小塑料盒子里有多热。我在 Pi 的 CPU 上放了一个额外的散热器,但顶部有 PoE 帽子,这样会限制空气流动。我在底座上钻了一些额外的孔来让空气流入,而流出是由风扇控制的。
结果
每次检测到车辆并测量速度时,数据都会写入本地 CSV 文件。它还将其发送到运行在另一个 Pi 上的 MQTT 服务器。通过其他各种步骤,我最终将数据保存在网络共享上,我可以在其中在 Excel 中打开它。我一直在使用 ThingSpeak Web 服务进行统计分析,但发现数据丢失了。所以我恢复使用备份在云中的本地文件。
我不是统计专家,但我通常可以设法在 Excel 中完成我需要的操作。管理数千行数据有点麻烦,但使用相当厚实的桌面似乎可以应付。举例来说,我让相机从 2019 年 3 月到 2020 年 3 月运行,最终得到两个文件,总共包含超过 840,000 行。
2019年
仅查看 2019 年的数据,平均每天检测到 2, 557 辆汽车,6 月 20 日最多检测到 3, 855 辆。最繁忙的一天通常是周二,最安静的通常是周日。
下图显示了每周平均每天的车辆数量(由每周的车辆总数除以该周的天数计算)。两次下降是由于系统故障导致我断电但程序没有重新启动。有一个非常渐进的趋势线,显示流量略有下降,但幅度不大,这可能是由于中断。
但最初的问题是关于超速,尤其是在高峰时间。我将记录的速度分为四个类别,并计算出每个速度类别有多少车辆
英里/小时%
11 - 30 39
31 - 40 51
41 - 50 9
超过 51 1
因此,61% 的车辆超过 30 英里每小时的速度限制,平均每天有 275 辆车超过 30 英里每小时的限制至少 10 英里每小时。
但这是高峰时段的事情吗?我将速度划分为一小时的时间段,然后创建了一些图表。下图显示了每个小时时段中速度为 40 至 50 英里/小时和超过 50 英里/小时的平均车辆数量。所以高峰超速发生在早上 7 点到早上 8 点之间,第二个高峰出现在下午 5 点到 6 点之间。所以是的,大多数超速发生在高峰时间。
如果我是一名配备了昂贵得多的测速摄像头的警官,那么我估计在一个工作日早上的早上 7 点到早上 9 点之间的几个小时里,大约有 46 辆车的速度超过了限速 10 英里/小时。
2020年
所以那是 2019 年,一个“正常”的年份。2020 年呢,按照大多数人的标准,这已经很不正常了。我是在 5 月写这篇文章的,在苏格兰,我们仍然处于封锁状态,但交通量已经明显减少,尽管最近我注意到交通流量有所增加。它发生了多少变化,人们是否放慢了脚步?
在 2020 年的第 10 周到第 13 周之间,我看到车辆数量下降了 69%。此后每周增加约 5%,现在约为正常交易量的 50%。
全年至今,车辆的平均数量为 1, 751 辆,最大数量在 1 月 14 日降至 3, 079 辆。不知道为什么那个约会很忙。
在第 13 周,每天的平均车辆数量从通常的 2, 500 辆下降到 810 辆的低点,并且自那以后每周都在持续攀升,现在在第 21 周达到 1, 184 辆。所以略低于正常水平的 50%。
锁定期间一周中最繁忙的日子略有变化。虽然到目前为止,周二仍然是全年最繁忙的一天,但如果我只看封锁周,那么周三和周五现在是最忙的。
他们是放慢了速度还是加快了速度?车辆减少了,但道路上的车辆仍在与以前相同的时间超速,但我没有看到超速的增加不成比例。
结论和后续步骤
所以我的第一个问题关于每年增加的流量的答案还没有得到证实,需要几年的记录才能证明。尽管冠状病毒已经填满了今年的数据,但我认为这是一个公平的声明,即 C 级次要乡村道路的车流量很大。在正常条件下,它的视野是典型乡村道路通常预期的 2.5 倍。交通部发布了英国的道路交通估计 - 请参阅下面的链接。在第 20 页上,它显示农村小路平均每天有 1,000 辆车。2019 年,我的道路平均每天有 2,500 人次。
虽然 2020 年的冠状病毒爆发对交通量产生了重大影响,但尚不清楚一旦爆发结束(可能需要很长时间),我们是否会看到恢复正常交通量。即便如此,人们会恢复正常的通勤方式还是许多人会在家工作?无论如何,人们仍然可以去那里工作吗?太多的未知数。
肯定会导致交通量增加的一件事是在我的道路尽头开通一座新桥。由于结构故障,这座桥在几年前不得不关闭。它穿过通往爱丁堡的双车道主干道。因此,目前来自爱丁堡(西行)的交通不受影响,但想要进入爱丁堡(东行)的汽车必须经过长时间的改道。我认为这解释了为什么我们在早上看到一个狭窄的交通高峰(大部分交通进入爱丁堡)而在晚上同样的交通回家时看到一个更广泛的高峰。人们在早上使用替代路线,但不会在回家的路上。
因此,一旦桥梁重新开放,我预计早上高峰时段的音量会增加,绿色条的高度与黄色条大致相同。这将意味着每周从大约 17,000 个增加到估计的 20,000 个。这座桥原定于几周前开放,但因冠状病毒爆发而推迟。
超速怎么办?超过 60% 的交通都在超速行驶。10% 超过速度限制 10 英里/小时或更多。图表清楚地表明问题在高峰时段最为严重。
爱丁堡市议会打算将 30 英里/小时区域后的道路限速降至 40 英里/小时;目前限速为 60 英里/小时。所以也许我家前面的加速和制动会减少。尽管我怀疑在 30 英里/小时区域内以 50 英里/小时的速度行驶的人不会被 40 英里/小时的标志所困扰。
我会继续记录和监控数据。
如果您对此项目有任何想法、意见或问题,请在下方留言。
原文链接丨以上内容来源网络,如涉及侵权可联系删除。
细思极恐!看看你家的摄像头是如何被他人控制的
2017-06-26
iPhone X用户吐槽:镜头覆盖玻璃自行破裂
2018-05-25
外媒爆料华为P20 Pro搭载40MP相机,是有真材实料还是“纸老虎”?
2018-03-21
CES 2016:能像手环一样戴在手上的摄像头
2016-01-06
小魅全景VR摄像头插入手机即可360°查看全世界,只需299元
2017-08-02
[项目实录]树莓派智能门铃Part1
2019-08-10
配置和试用全新的Raspberry Pi HQ相机,很棒!
2020-05-09
OnePlus 8 Pro拆解:旗舰规格升级?
2020-05-07
[项目演示]工程师的七夕礼物-阳台远程浇花神器
2019-08-07
讨论