**

基于树莓派的人脸追踪云台实现

**
今天由于要给学弟学妹们讲解一下TM4C123G,然后讲完了就让他们自己去练习一下,然后发现…emmmmm,好像我没什么事干了,所以就借机写一个分享算了…
关于这个云台的产生呢…嗯说来话长,就不说了…
嗯,还是说一下吧,就是在一个晴朗的日子里,脑袋犯抽了,突然想在我的一个人脸识别上加上一个云台,然后就做出来了,虽然最后没有加上去-----没用,嗯,这就很忧伤了…哭唧唧(´;︵;`)
。最后想着,做也做了,干脆写出来分享一下吧…

1,准备物资

1).树莓派3B 1块

2).廉价舵机 2个

3).若干连接件以及杜邦线之类的物品

2,开发环境

1)个人建议是在windows上面编写代码,在树莓派上实现

2)树莓派系统——ubuntu mate 16.04

3)关于如何在树莓派上安装Opencv,dlib,mtcnn等库,可以看看我其他的博客,ubuntu mate opencv+contrib编译以及基于树莓派的远程监控+人脸检测 4)对于dlib,mtcnn怎么在树莓派上编译的博客还没写出来,懒…

3,人脸追踪

1).要实现人脸追踪,首先肯定要检测到人脸,人脸检测的实现方法有很多,在这里就不一一赘述了,有兴趣的可以自行百度

2).检测到人脸,就要实现追踪了,什么是追踪呢?举个栗子——比如说你想追一个女孩子,那么最原始不要脸的做法就是,死皮赖脸的跟着她,让她时时刻刻的出现在你的面前,那么,这个人脸追踪云台就更加不要脸,它就是让一个人的人脸时时刻刻出现在它的画面的正中心

3).怎么实现呢?很简单,就像你追女孩子一样,她往东走,你就不能往西走,她往北走,你就不能往南走,她让你抓鸡,你不能去逮狗,对,没错,就是这样。但是摄像头是正对你的脸的,所以你的脸往左偏,它就需要往右打舵,这是一个对称关系。

4).本来我想画一张图来描述摄像头捕获的图像的坐标系与目标坐标系的转换关系的,但是…emmmm,,想了想,懒,好麻烦,所以没了

4,正文

好吧,前面巴拉巴拉了一段废话,还是给大家来点实际的东西吧,小二,上代码…

emmm上代码之前还是先来个树莓派3B的引脚图把

基于树莓派的OpenCV人脸识别_人脸追踪


好了,正式上传代码

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17, GPIO.OUT)#舵机信号脚
pwm.start(8)#占空比0~100之间
pwm = GPIO.PWM(17, 330)#servo-->舵机信号线引脚号;330-->pwm频率
'''
关于舵机频率,还是要看你用的什么舵机,根据自己的舵机来设置频率
'''
'''
舵机打舵函数,输入打舵角度,延时时间
'''
def setServoAngle(angle, delayTime):
    global pwm
    dutyCycle = angle/2.7067 +16.
    pwm.ChangeDutyCycle(dutyCycle)#占空比0~100之间
    time.sleep(float(delayTime))
while True:
    setServoAngle(16, 0.5)
    time.sleep(.3)
    setServoAngle(60, 0.5)
    time.sleep(.3)
GPIO.cleanup()
pwm.stop()

关于延时时间做一个解释:怎么说呢,比如说,你想控制舵机从0度转到180度,那么,它需要一个时间来执行,就比如说我叫你向前走一百米,你也需要时间来走一百米一样,舵机的打舵需要时间的,一般来说,打舵时间需要的越少,打舵精度越高,那么舵机越好,再说说打舵精度,又说我叫你走一百米,你如果不带尺子一下一下的丈量的话,那么你是不可能精准的走一百米的。同理舵机打舵精度。
嗯,上面就是舵机测试demo了,哦豁,写到这里,我又要去忽悠学弟学妹们了,所以剩下的代码只能改天上传了,
欲知后事如何,且听下回见解…皮一下