有关于人脸识别的基础知识,请先复习:
在上面的文档中,我们介绍了如何基于一张本地的图片,进行人脸识别,接下来我们看看,如何通过创意之星的摄像头,检测人脸并进行跟随。
本实验的参考代码位于up_cyzx_demo文件夹内的cyzx_face_detect.py文件中。
这个实验还是基于我们的四轮小车,本实验想要实现的功能为:小车通过摄像头检测到人脸后,自动跟随人脸的移动。
核心代码如下:
首先,初始化了一个人脸识别器:
#加载一个人脸检测模型
modelPath = sys.path[0] + "/cascades/haarcascade_frontalface_default.xml"
self.face_cascade = cv2.CascadeClassifier(modelPath)
然后通过下面的代码,我们可以实现人脸的检测:
#转化为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#人脸检测函数
faces = self.face_cascade.detectMultiScale(gray, 1.3, 5)
centers = []
for (x, y, w, h) in faces:
result = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
if (len(faces) == 1):
(x, y, w, h) = faces[0]
target_x = x + w / 2
#计算中心相对于图像中心的像素距离
offset_x = target_x - frame.shape[1] / 2
if(offset_x >= 40):
self.movement.turn_right(256)
elif(offset_x <= -40):
self.movement.turn_left(256)
else:
self.movement.stop()
else:
self.movement.stop()
可以看到,在上面的代码中,我们首先将图像转化为灰度图,然后通过人脸检测器检测人脸,如果检测到了人脸,我们就会在人脸的周围画一个矩形框,然后计算人脸的中心点相对于图像中心的偏移量,根据这个偏移量,我们就可以控制小车的运动,使其跟随人脸的移动。
识别结果:
除此之外,也可以搭建一个云台小车,通过云台的舵机控制,实现人脸的跟踪。
云台小车的搭建方法请根据随机资料参考云台小车搭建手册,控制云台朝向的舵机ID记得设置为5。
云台人脸跟踪的代码位于up_cyzx_demo文件夹内的cyzx_face_tracker.py文件中。