1 # 識別眼睛、嘴巴、人臉 2 image = cv2.imread('./yong.jpg') 3 4 gray = cv2.cvtColor(image,code=cv2.COLOR_BGR2BGRA) 5 # 加載算法 6 face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') 7 eye_detector = cv2.CascadeClassifier('./haarcascade_eye.xml') 8 mouth_detector = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml') 9 10 face_zone = face_detector.detectMultiScale(gray,1.3,3,minSize=(80,80)) 11 print(face_zone) 12 for x,y,w,h in face_zone: 13 cv2.rectangle(image, pt1=(x,y),pt2=(x+w,y+h), color=[0,0,255],thickness=2) 14 15 # 人臉切分 16 h_up = int(face_zone[0,-1]*0.6) 17 x,y,w,h = face_zone.reshape(-1) 18 # 頭部 19 head = gray[y:y+h,x:x+w] 20 head_up = head[0:h_up] 21 head_down = head[h_up:] 22 # 檢測眼睛 23 eye_zone = eye_detector.detectMultiScale(head_up,1.3,3,minSize=(10,10)) 24 for ex,ey,ew,eh in eye_zone: 25 cv2.rectangle(image, pt1=(ex + x,ey+y), pt2=(ex+ew+x,ey+eh+y),color=[0,255,0],thickness=1) 26 27 # 檢查嘴 28 mouth_zone = mouth_detector.detectMultiScale(head_down,1.3,3,minSize=(10,10)) 29 for mx,my,mw,mh in mouth_zone: 30 cv2.rectangle(image, pt1=(mx + x,my+y+h_up), pt2=(mx+mw+x,my+mh+y+h_up),color=[255,0,0],thickness=1) 31 32 33 cv2.imshow('liyong', image) 34 cv2.waitKey(0) 35 cv2.destroyAllWindows()
代碼第一行: 導入圖片
第二行: 灰度化處理
第六--九行: 讀取特征數據,並使用分類器對特征數據進行處理
第十--十三行: 進行人臉識別
第十五--二十一行: 進行人臉切分,在上部分識別眼睛;人臉下部分識別嘴的預處理
第二十三--二十五行: 識別眼睛
第二十八--三十行: 識別嘴
將人臉眼睛替換成自定義眼睛:
只需要將上面的第24到25行修改成
eye = cv2.imread('./eye.jpg') for ex,ey,ew,eh in eye_zone: # cv2.rectangle(image, pt1=(ex + x,ey+y), pt2=(ex+ew+x,ey+eh+y),color=[0,255,0],thickness=1) # 眼睛縮放 eye2 = cv2.resize(eye,dsize=(ew,eh)) # 替換 image[y+ey: y+ey+eh,ex+x:ex+x+ew] = eye2
eye2 = cv2.resize(eye,dsize=(ew,eh)) 將讀取的圖片換成識別出的眼睛大小