Raspberry Pi上的移动值班员(h.264)

使用Raspberry pi进行FPV控制和监视沿H.264向量的帧中的运动的主题并不新鲜。 该开发并非假装是原始的,并且花了相对较少的时间(有时从7月开始在周末)。

但是也许我的经验(和资料来源)对任何人都有用。

在邻居说有人正在钻研门锁之后,出现了需要在公寓中进行视频监视的想法。

首先要引起注意的是使用相机v1.3在Raspberry pi 0上安装了著名的运动程序。 原则上,它可以解决问题。 如果您对通过邮件发送的通知感到满意,并且fps = 4-5。

但这似乎并不有趣。 手边是一个平台,带有旧实验的车轮和线束,以及旧笔记本电脑的18650电池。

结果是移动视频监控和运动检测的有趣组合。
因为我有租用的VPS,所以从外部(NAT后面的家庭网络)访问没有问题。 如果您不滥用行驶和大灯,电池寿命约为4天。

您可以骑在公寓周围,远程控制摄像头和平台,然后将其置于移动检测模式下的任何所需位置。



硬体


所有硬件可以分为两部分,第一部分不依赖于第二部分,可以单独使用:

视频监控模块


  • 树莓派零
  • USB WiFi加密狗
  • 树莓派相机v1.3
  • 2个步进电机28BYJ-48 + ULN2003驱动程序

通过覆盆子的SPI管理移动平台


  • 4S 16x18650锂离子+ 4S 30A锂离子18650(BMS)板+具有电流和电压稳定功能的DC-DC充电
  • dc-dc降压转换器(15v-> 5v)。
  • stm32f103c8t6板
  • 4个齿轮马达+ L298N板
  • 12v LED灯(前灯)+ IRF3205上的控件(+ smd pnp和npn)

Raspbian映像已配置为只读模式。 在这种配置下,覆盆子很容易承受意外的断电,因为它们根本不使用SD卡进行记录。

软体类


该软件包含3个独立的组件。

Android应用程式(已在LG6 Oreo和旧的Samsung S5 Lollipop上测试)


FPV模式

  • 以指定的分辨率和比特率显示来自摄像机的H.264视频流
  • 相机和平台控件
  • 记录流中的视频和照片。

Android服务模式

  • 主机轮询(以指定频率)
  • 按事件将“运动”的事件照片加载到帧中。

python上的Raspberry Pi主机(picamera + spidev + RPi.GPIO)


FPV模式

  • 广播H.264流(使用Android应用程序指定的参数)
  • 接收步进电机的控制命令及其管理。
  • 通过SPI广播控制命令(如果启用了模式)

跟踪模式在框架中的移动。

  • 框架中的运动检测(根据Android应用程序指定的参数)
  • 接收请求“以及框架中是否有移动”,并根据请求上传照片
  • 将主机中的移动照片发送给主机(无论应用程序如何)。

stm32f103上最简单的固件

  • 接收SPI命令
  • 控制车轮和PWM电机的旋转方向。
  • 大灯控制。

运动追踪


事实证明,在h.264向量上进行跟踪非常麻烦,而且容易出现误报。 网络上很少有针对H.264的运动检测实现。 我都试过了。

最原始的选择是对长度超过某个阈值的向量计数。 而且,如果任何矢量都大于阈值,则表示该帧中存在运动。

las 此选项仅适用于说明原理。 误报过多。 特别是在颜色和纹理均匀的表面上。

所有其他选项要么给出过多的误报,要么根本不满足性能标准:“应在帧时间内处理”。

结果,我选择了我的选项。 尽管它实际上不会产生误报,但它需要连续移动几帧。 但是,这种方法比每天几次由于照明的变化或通常由于相机的“决策”导致画面中无法理解的“运动”引起的误报更好。 MV H.264的可靠检测算法主题通常是一个单独且复杂的主题。 算法需要大量时间进行实际调试,并且我对运行时有严格的限制。

运动矢量示例(快照实用程序模式):





在事件“框内移动”时,将生成通知。



原则上,就我的目的而言,事实证明可以确定,当人物(> 15%的帧)移动至少2秒钟时会触发。 由于灵敏度的提高,我根本看不到误报。

运动控制。


平台管理“由拖拉机”。 即 PWM控制和左右旋转方向。 双手拇指下方的控制元素(条带)。 事实证明,这对我来说是最自然的。



摄像机控制-触摸两个条带可发出旋转特定角度的命令(距离条带中心越远-角度越大)。 电机的连续控制令人不舒服(再次受我主观)。



落后FPV


视频延迟相对较小(<1秒)。

要在0.6秒内以3-4 km / h的最大速度控制轮式平台以实现100%PWM滞后-这是很正常的,几乎没有注意到。

但是,在我看来,例如,直升机的滞后时间甚至是0.3秒。

测试表明,与相同的H.264流通过rapivid的输出相比,在python中实现翻译带来了大约50-70ms的延迟。 对我来说,这70毫秒并不重要。 但是,如果有人想压缩最大值,那么他必须考虑到这一点。

通过“本地WiFi”(电话作为接入点)工作时,延迟为350..600ms。 但不超过0.6秒,并且在此范围内稳定。 虽然在空旷地区50-70米-这只是玩转。 而且距离更远,手机的WiFi无法正常工作。
值得注意的是,这是在公寓大楼非常“ RF嘈杂”的环境中,该地区有许多WiFi网络。



我对通过ssh端口从覆盆子转发到VPS的配置“ WiFi路由器->双绞线提供程序-> VPS-> MTC 4G”的结果感到惊讶。
事实证明,典型的延迟甚至比通过本地WiFi(!)还要好。
即使在旅途中或在大型滞后大型超市附近,也只有300毫秒。

但是,有时(非常罕见且不可预测),延迟会达到几秒钟。 重新上下文有帮助。 这些可能是4G / MTS /供应商链中的某些功能等。



一切正常后,人们希望将声音通道双向连接。 从技术上讲,这是可能的,甚至不是很困难。 但是我不想摆弄烙铁。

如果不是“额外”的Rasberry pi,那么使用旧手机作为主机进行视频监控和平台管理会更容易。 与旧手机相比,覆盆子的唯一优势是重量更轻。 而且,功耗可能更低(无法比较)。

所有来源

Source: https://habr.com/ru/post/zh-CN424191/


All Articles