这前的四篇算是基础篇,这篇算是应用篇,这个暑假给自己立的小目标之一就是用树莓派做下人脸检测和识别,就是想看看效果咋样,可惜没有录屏,然后就简单的拍了几张人眼识别和微笑识别的照片,感觉这后期做的有点糙啊,有些惭愧,以后做事还是要做全面的。
废话不多说,下面是代码,这里面还是要感谢下子豪兄的博客。
这个是人脸检测+人眼检测+微笑检测的代码
#调用摄像头进行实时人脸+人眼识别
import cv2
face_cascade = cv2.CascadeClassifier('/home/pi/Downloads/opencv-3.4.0/data/haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('/home/pi/Downloads/opencv-3.4.0/data/haarcascades/haarcascade_eye.xml')
smile_cascade = cv2.CascadeClassifier('/home/pi/Downloads/opencv-3.4.0/data/haarcascades/haarcascade_smile.xml')
#调用摄像头
cap = cv2.VideoCapture(0)
while(True):
#获取摄像头拍摄到的画面
ret, frame = cap.read()
faces = face_cascade.detectMultiScale(frame, 1.3, 5)
img = frame
for (x, y, w, h) in faces:
#画出人脸框, 蓝色,画笔宽度微
img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
#框选出人脸区域, 在人脸区域而不是全图中进行人眼检测, 节省计算资源
face_area = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(face_area)
#用人眼级联分类器引擎在人眼识别, 返回的eyes为眼睛坐标列表
for (ex, ey, ew, eh) in eyes:
#画出人眼框, 绿色, 画笔宽度为1
cv2.rectangle(face_area, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 1)
#smile detect
#用微笑级联分类器引擎在人脸区域进行人眼识别,返回的eyes为眼睛坐标列表
smiles = smile_cascade.detectMultiScale(face_area, scaleFactor = 1.16, minNeighbors= 65, minSize = (25, 25),flags = cv2.CASCADE_SCALE_IMAGE)
for (ex, ey, ew, eh) in smiles:
#画出微笑框, 红色(BGR), 画笔宽度为1
cv2.rectangle(face_area, (ex, ey), (ex+ew, ey+eh), (0, 0, 255), 1)
cv2.putText(img, 'Smile', (x, y-7), 3, 1.2, (0,0,255), 2, cv2.LINE_AA)
#实时展示效果图
cv2.imshow('frame2', img)
if cv2.waitKey(5) & 0xFF == ord('q'):
break
#最后,关闭所有窗口
cap.release()
cv2.destroyAllWindows()

本文介绍如何使用树莓派进行人脸检测、人眼检测和微笑检测。作者分享了暑假期间的项目成果,并提供了相关代码,感谢他人博客的帮助。遗憾的是,未进行录屏,仅留存了几张识别照片,对项目的粗糙感到惭愧。
609

被折叠的 条评论
为什么被折叠?



