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)

輸出:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM