OpenCV 与野生王国

  • 2024 年 11 月 7 日,阅读需 6 分钟,介绍部署热像仪和自制运动检测来抓小偷等。

  • 年初在 Ebay 购买 FLIR Boson 后,决定用其做有用之事,如指向天空看有趣事物,后开始制作简单运动检测工具,需满足:场景变化时触发、只记录有运动的帧、给图像加时间戳、可选记录实时视频,OpenCV 可实现,开始用 Python 写原型后被颜色图吸引。
  • 发现记录原始帧会导致视频播放速度异常,经多次调用ffmpeg纠正后,确定是 Python 导致掉帧,这会导致播放速度异常,因为编码器期望每秒N帧,而脚本实际供应< N帧,视频播放快于实时。
  • 简单运动检测就是量化“场景中是否有东西变化”并用计算机能理解的方式描述,通过存储帧数组、求平均值、用当前帧减去平均值来实现,变化部分在结果图像中显示为非零像素,若有“热”像素则知道有不同并可据此决定做什么,左边是原始视频,右边是相减后的图像,可清晰看到手。
  • 基本运动检测功能实现后,将 Python 原型移植到 C++,添加了一些改进:Boson 以可配置速率应用平场校正,会在帧的右上角出现亮绿色方块,忽略该区域的运动以防止误报;对图像进行去噪,调用简单的膨胀函数扩展像素以形成连续的斑点;一次只跟踪 3 个物体;在检测到的斑点中心周围放置固定大小的边界框。
  • 有一只名为 Rory 的户外猫“住在”车棚,车棚有个带食物和床的壁橱,食物会神秘消失,考虑用旧 IP 安全摄像头,最终部署热像仪和运动跟踪工具。

    • 10:13 PM:相机放在壁橱顶部的架子上,看到一只小虫子整晚都在动。
    • 12:28 AM:附近有几只猫,其中一只在吃食物,意料之中。
    • 1:02 AM:视频中出现另一个可能是负鼠或小浣熊的动物。
    • 1:15 AM:第三个参赛者是一只浣熊,对食物消失很失望。
    • 4:18 AM:Rory 晚上回来发现食物再次被偷。
  • 结论和下一步:已完全放弃干食物,Rory 现在每天两次湿食物,早上加一点干食物让她可以吃而不用担心夜间入侵者,已计划为她建造一个支持 NFC 的猫门或在项圈上安装磁铁和霍尔效应传感器来解决这个问题。
阅读 10
0 条评论