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)
输出: