有关于人脸识别的基础知识,请先复习:
在上面的文档中,我们介绍了如何基于一张本地的图片,进行人脸识别,接下来我们看看,如何通过智元素背包的摄像头,检测人脸并进行跟随。
本实验的参考代码位于up_zhiyuansu_demo文件夹内的zhiyuansu_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 >= 20):
self.movement.move_right(20)
elif(offset_x <= -20):
self.movement.move_left(20)
else:
self.movement.hold()
return result
可以看到,在上面的代码中,我们首先将图像转化为灰度图,然后通过人脸检测器检测人脸,如果检测到了人脸,我们就会在人脸的周围画一个矩形框,然后计算人脸的中心点相对于图像中心的偏移量,根据这个偏移量,我们就可以控制智元素的运动,使其跟随人脸的移动。
识别结果: