继解决完yolo的安装问题之后,进一步丰富应用功能。这次和树莓派联合,做一个跟踪摄像头,具备自动跟踪,手动跟踪,微信推送等功能。最初想把yolo部署到树莓派上,做一些自动跟踪的功能,后来发现树莓派用yolo的模型推理速度还是太慢了。
目前系统的总体功能已经完成,摄像头部署到单位,用办公电脑做推理,udp推送控制指令到树莓派控制舵机旋转摄像头进行跟踪。
系统拓扑
1、yolov7人体检测
部署好yolo之后,运行detect.py就可以实现物体检测,原版本可以同时检测几十种物体,本系统只设计为检测人体要将参数里面的classes 改为0;同时由于系统长期运行,把存档相关功能关闭。
该部分主要功能是获取检测框的中心位置,存储在det变量中
摄像头只跟踪置信度最高的一个物体的中心坐标。获取到坐标后,制定个简单的控制协议发送到树莓派。
增加的特色功能:
- 下班时间和周末如果检测到人体,会微信推送报警信息,利用了pushplus的api
- 利用了keyboard库,监测键盘输入特殊命令字符,程序可以在自动跟踪和手动控制转向方式之间切换。
- 为降低电脑的资源占用,检测间隔会动态变化
工作电脑上装了远程桌面。
2、树莓派控制步进电机
步进电机是一种根据顺序输入的脉冲控制旋转的电机,可以精确控制旋转角度和速度,使用的地方非常多。这里使用的是28byj48,相关的文档非常多,此处不在赘述。核心的原理就是控制脉冲的次数和间隔,就能够控制点击旋转的角度和速度。
树莓派收到传来的人体框的中心坐标后,计算与画面中心像素的水平距离,考虑摄像头的拍摄角度,可以折算出旋转角度,即可控制电机旋转。但如果按照这个角度旋转会转过,为了更精准的控制可以考虑使用pid算法。
如果是手动控制模式,上位机会发送固定角度,控制旋转。
增加长时间无人,摄像头复位功能,需要记录初始位置,以及每一次相对旋转角度,定时复位。
3、工作效果
观察到人体后,电机旋转