我和我的家人最近搬进了大学城中心的一所新房子。我们喜欢它,但是我们的新位置也把我们放在一条繁忙的住宅区街道旁边。太多的时候,路人会撕开远远超过张贴25英里每小时的限制。它激发了我的潜能脾气暴躁的一面.
作为一个以数据为导向的人,我想知道有多少人在超速行驶,我不会花几百美元在雷达系统上。因此,我把一个网络摄像头、一些简单的视频处理和异常检测拼凑在一起,制作了一个跟踪车辆速度的系统。下面的图表从较高的层次展示了这个过程,但是我也将深入讨论一些细节。
我之前尝试过将视频和beplay2网页登陆BigML的异常检测(各种各样的隔离林)作为一种运动检测方法。通过拼接视频并为每个瓷砖构建一个异常检测器,我制作了一个可以忽略常见运动的运动检测器。例如,在这个视频中,每个瓷砖检测器不会触发摆动风扇,但它们会触发邪恶的熊猫入侵者(从我女儿那里借来)。
为此,我提取了每个图块的特征,例如平均的红、绿和蓝像素值(呼出)OpenIMAJ让这变得简单)。这给了我一个特定的数据集,每一行代表一个视频帧,像这样:
红色的意思是 | 绿色平均 | 蓝色的意思是 | 灰色的意思是 | 灰色StdDev | |
---|---|---|---|---|---|
0.489 | 0.471 | 0.369 | 0.443 | 0.073 | |
0.475 | 0.461 | 0.356 | 0.431 | 0.078 | |
0.500 | 0.484 | 0.381 | 0.455 | 0.088 | |
0.506 | 0.489 | 0.391 | 0.462 | 0.089 | |
0.514 | 0.496 | 0.389 | 0.466 | 0.095 | |
0.486 | 0.466 | 0.362 | 0.438 | 0.078 | |
0.471 | 0.459 | 0.354 | 0.428 | 0.073 | |
0.492 | 0.475 | 0.374 | 0.447 | 0.109 | |
0.475 | 0.462 | 0.358 | 0.432 | 0.078 | |
0.531 | 0.517 | 0.443 | 0.497 | 0.089 | |
0.494 | 0.483 | 0.379 | 0.452 | 0.075 |
以行/列形式收集数据后,使用beplay2网页登陆BigML语言绑定.我用Clojure做我的爱好项目,所以beplay2网页登陆BigML Clojure绑定让我仅使用以下代码片段将上述数据转换为异常检测函数:
(ns探测器 | |
(:需要(beplay2网页登陆bigml.api(核心:asapi] | |
[来源:as来源] | |
[数据集:as数据集] | |
[异常检测器]:as异常检测器] | |
[异常评分]:asanomaly-score]) | |
(clojure.data[csv:ascsv)))) | |
(德芬数据- >探测器(数据) | |
(->(来源/创建(数据) | |
(api/获取最终版本) | |
(数据集/创建) | |
(api/获取最终版本) | |
(异常检测器/创建:森林面积64) | |
(api/获取最终版本) | |
(异常评分/检测器))) | |
;;一个小例子… | |
(def我的探测器 | |
(->(吃的声音"https://goo.gl/79KsJ4") | |
(csv/读取csv) | |
(数据- >探测器))) | |
(普林顿(我的探测器[0.50.450.40.440.01))) | |
;; 0.3936344773676654 |
上面的小示例加载上一个gist中的数据,构建一个异常检测器作为Clojure函数,并使用该函数为新分数打分。BigML异常检测器的分数始终在0到1之间。分数越高,分数越大。通常大于0.6的分数是有趣的。绿色突出显示的ti熊猫示例中的les表示得分高于0.65。beplay2网页登陆
所以我采用了这种贴片+探测器的方法,并将其应用到汽车经过我家的视频中。我的直觉是,虽然跟踪汽车可能很棘手,但学习常规背景应该很容易。那我只需要追踪那些代表汽车的异常点。
而不是平铺整个视频,我只平铺了两行。每一排占据了一条车道。我追踪了异常点并计算了他们扫过视频所花的时间。这些时间让我估计一下车速。
通过跟踪异常团块,该系统对个别瓦片探测器偶然失败的情况更加稳健。此外,正如预期的那样,探测器帮助忽略了常见的运动,比如前景中摇曳的小树。
这样的方法远非完美。它可能会被变道、自行车或高大的卡车(它们可以注册为两辆车或遮挡其他汽车)混淆。
尽管如此,考虑到它的简单性,我还是惊喜地发现它做得很好。偶尔对探测器进行再训练,它还能处理阴影和变化的光照条件。在某些情况下,它追踪车辆,即使我很难找到他们。信不信由你,这张照片里有一辆车:
因此,我用一个网络摄像头安装了一个可通行的车辆计数器/速度检测器。为了完成这个项目,我收集了一个典型的周六下午的车辆速度。结果让我大吃一惊。
我认为超速驾驶比实际情况要普遍得多。事实上,重要的超速驾驶(我认为是30+英里/小时)只占总数的3%左右。所以我已经尽了最大努力发脾气.没有这些数据,我只是又一个确认偏见的受害者。
对于clojure友好和好奇的人,请随意查看GitHub上的项目.