OpenCV-Python 人臉眼睛嘴識別

月光男神發表於2018-11-13
 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))    將讀取的圖片換成識別出的眼睛大小

  

相關文章