PythonPi基于人脸检测的行车控制-概述

Posted by 小一在此 on January 20, 2017

基于人脸检测的行车控制功能要求是通过摄像头检测出人脸,然后自动控制小车的行走将该检测出的人脸(只选择最大的脸)以指定大小定位在视频中部。

实现该功能的目的,就是阐释反馈控制的基本原理,并说明PythonPi平台反馈控制系统的设计与实现。

  • 要实现这一功能,就是检测人脸在画面中的位置和大小,以此来产生小车的行走控制信号:前进、后退、速度和方向角度

  • 人脸检测的结果是给出一个框出脸部所在范围的矩形,其左右位置代表了和摄像头的偏移,其大小代表了和摄像头的距离

  • 由于小车摄像头固定,所以在小车运动过程中,会形成正面、侧面的变化,所以我们对于距离的判断应以竖向的脸长为判断基准

  • 摄像头拍摄画面是根据小孔成像原理,物距=像距×物高/像高,在像距固定(即摄像头镜头和CCD的距离不变,树莓派所使用的CSI摄像头就是定焦镜头)时,人脸距离小车的位置和矩形框高反比,也就是说,我们只需要关心矩形框的高就可以了

  • 这一功能主要是控制小车的运行轨迹,所以小车的行进速度不产生主要的影响

  • 小车无法独立的进行左右移动,必须在前进或后退的过程中通过方向角的调整来实现左右的移动

  • 小车没有方向轮,而是通过两个车轮的差速来实现转向,这一差速是由方向角的大小决定的

困难

主要来自两个方面,一是小车:

  • 小车的摄像头和小车的轴向是否垂直不知道,误差多少也没有策略,只能目测调整一下

  • 小车的两个车轮是由我们手工装配到步进电机的轴上,并未校准,所以正前方90度并不能确保小车就是直线前进

  • 小车的车轮未用紧固件进行固定,随时可能会偏动,尤其在低速情况下甚至会卡住车轮,导致车轮转速出现错误

第二个困难则来自PythonPi平台目前所采取的人脸检测工具javacv(OpenCV的java封装版)的性能非常低,目前只能达到1.5秒识别一次,如果小车的车速过高,很容易就驶出树莓派摄像头的视野范围。

不过,因为这些困难,也就可以更好的体会如何用PythonPi平台来设计一个可以良好工作的反馈控制系统。

====================================================================================================

关注我的公众号及时获取推送的最新文章

公众号