opencv实现人脸,人眼,微笑检测

Posted ivyharding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv实现人脸,人眼,微笑检测相关的知识,希望对你有一定的参考价值。

1.首先实现人脸检测

 1 import cv2
 2 
 3 img = cv2.imread("people.jpg",1)  #读入图像
 4 #导入人脸级联分类器引擎,“.xml”文件里包含了训练出来的人脸特征
 5 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+haarcascade_frontalface_default.xml)
 6 #用人脸级联分类器引擎进行人脸识别,返回的faces为人脸的坐标列表
 7 #scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; 
 8 #minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
10 #如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
11 #这种设定值一般用在用户自定义对检测结果的组合程序上;
12 faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=3)
13 
14 # 对每一张脸,进行如下操作
15 for (x,y,w,h) in faces:
16     #画人脸框,bgr ,width
17     img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
18 #在“output”窗口中展示效果图
19 cv2.imshow("output",img)
20 # 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
21 cv2.waitKey(0)
22 cv2.destroyAllWindows()
23 cv2.imwrite("output1.jpg",img)

 输入:

技术图片

输出:

 

技术图片

2.对单张图片进行人脸和人眼检测

 1 import cv2
 2 
 3 img = cv2.imread("img4.jpg",1)  #读入图像
 4 
 5 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+haarcascade_frontalface_default.xml)
 6 eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+haarcascade_eye.xml)
 7 
 8 faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=3)
 9 
10 # 对每一张脸,进行如下操作
11 for (x,y,w,h) in faces:
12     #画人脸框,bgr ,width
13     img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
14     #在框选出人脸的区域进行人眼的检测,节省计算资源,
15     faces_area = img[y:y+h,x:x+w]
16     #scaleFactor默认1.1,minNeighbors默认3
17     eyes = eye_engine.detectMultiScale(faces_area,1.0132,1)
18     for (ex,ey,ew,eh) in eyes:
19         #画出人眼的框
20         cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)
21 #在“output”窗口中展示效果图
22 cv2.imshow("output",img)
23 # 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
24 cv2.waitKey(0)
25 cv2.destroyAllWindows()
26 cv2.imwrite("output_1.jpg",img)

输入一样

输出:

 

技术图片

3.加入微笑识别

 1 import cv2
 2 
 3 img = cv2.imread("img4.jpg",1)  #读入图像
 4 
 5 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+haarcascade_frontalface_default.xml)
 6 eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+haarcascade_eye.xml)
 7 smile_engine = cv2.CascadeClassifier(cv2.data.haarcascades+haarcascade_smile.xml)
 8 
 9 faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=5)
10 
11 # 对每一张脸,进行如下操作
12 for (x,y,w,h) in faces:
13     #画人脸框,bgr ,width
14     img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
15     #在框选出人脸的区域进行人眼的检测,节省计算资源,
16     faces_area = img[y:y+h,x:x+w]
17     
18     # 人眼检测
19     #scaleFactor默认1.1,minNeighbors默认3
20     eyes = eye_engine.detectMultiScale(faces_area,1.3,6)
21     for (ex,ey,ew,eh) in eyes:
22         #画出人眼的框
23         cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)
24     
25     # 微笑检测
26     smiles = smile_engine.detectMultiScale(faces_area,1.3,2)
27     for (ex,ey,ew,eh) in smiles:
28         cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,0,255),1)
29         cv2.putText(img,Smile,(x,y-3),1,1.5,(0,0,255),2,cv2.LINE_8)
30         
31 #在“output”窗口中展示效果图
32 cv2.imshow("output",img)
33 # 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
34 cv2.waitKey(0)
35 cv2.destroyAllWindows()
36 cv2.imwrite("output4_2.jpg",img)

输出:

 

 技术图片

 

以上是关于opencv实现人脸,人眼,微笑检测的主要内容,如果未能解决你的问题,请参考以下文章

opencv 是怎么实现人脸检测的

使用OpenCVKeras和TensorFlow进行微笑检测

基于QT和OpenCV的人脸检测识别系统

Python 3 利用 Dlib 19.7 和 sklearn机器学习模型 实现人脸微笑检测

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

SVM算法应用综合练习--人脸微笑识别