python中opencv庫的使用之目標檢測(二)


 1 #course15.py
 2 import numpy as np
 3 import cv2
 4 
 5 # multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades
 6 
 7 #https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
 8 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 9 #https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_eye.xml
10 eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
11 
12 eyeglasses_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')
13 
14 smile_cascade = cv2.CascadeClassifier('haarcascade_smile.xml')
15 
16 cap = cv2.VideoCapture(0)
17 
18 while(cap.isOpened()):
19     ret, img = cap.read()
20     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
21     faces = face_cascade.detectMultiScale(gray, 1.3, 5)
22     smile = smile_cascade.detectMultiScale(gray)
23     for (sm_x,sm_y,sm_w,sm_h) in smile:
24         cv2.rectangle(gray,(sm_x,sm_y),(sm_x+sm_w,sm_y+sm_h),(0,0,255),2)
25         
26     for (x,y,w,h) in faces:
27         cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
28         roi_gray = gray[y:y+h, x:x+w]
29         roi_color = img[y:y+h, x:x+w]
30         eyes = eye_cascade.detectMultiScale(roi_gray)
31         for (ex,ey,ew,eh) in eyes:
32             cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
33             
34             font = cv2.FONT_HERSHEY_SIMPLEX
35             cv2.putText(img,'Eye',(ex+x,ey+y), font, 0.5, (11,255,255), 1, cv2.LINE_AA)
36         #eyeglasses = eyeglasses_cascade.detectMultiScale(roi_gray)
37         #for (e_gx,e_gy,e_gw,e_gh) in eyeglasses:
38         #    cv2.rectangle(roi_color,(e_gx,e_gy),(e_gx+e_gw,e_gy+e_gh),(0,0,255),2)
39             #roi_gray = gray[ey:ey+eh, ex:ex+ew]#
40             #roi_color = img[ey:ey+eh, ex:ex+ew]#
41 
42     cv2.imshow('img',img)
43     k = cv2.waitKey(30) & 0xff
44     #print(k)
45     if k == 27:
46         break
47 
48 cap.release()
49 cv2.destroyAllWindows()
50 print(smile)

搭建的運行平台見本系列的(一),

以上代碼運用的是Haar級聯分類器的原理,下面是Haar級聯分類器原理的簡單介紹:

Haar分類器是利用圖像中目標的類Haar特征來對目標進行檢測的,而利用積分圖的方法可以加快類Haar特征的值的求解過程。
一個最基本的類Haar特征就是一個最簡陋的弱分類器,而弱分類器優化后稱為優化后的弱分類器。
將多個優化后的弱分類器組合起來便形成了強分類器。(至於如何將若干個優化后的弱分類器組合起來稱為強分類器,用的是Adaboost算法,數學原理看了之后不是很懂,作為一個數學系的學生很慚愧。)
但是單個的強分類器應用在實際的檢測中效果並不好,
於是又有人提出了將若干個強分類器層疊或者稱之為級聯在一起,
這樣就得到了級聯分類器。

檢測效果:(能夠利用攝像頭捕捉形成視頻,對視頻中動態的對人臉、人眼進行檢測,以下是視頻截圖)

 


免責聲明!

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



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