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