一、基于OpenCV的haar分類器實(shí)現(xiàn)笑臉檢測
1、Haar分類器介紹
??Haar分類器是一種基于機(jī)器學(xué)習(xí)的目標(biāo)檢測算法,它使用Haar特征描述圖像中的目標(biāo)。Haar特征是基于圖像亮度的局部差異計(jì)算得出的,可以用來描述目標(biāo)的邊緣、角落和線條等特征。
使用Haar分類器進(jìn)行目標(biāo)檢測的步驟大致如下:
??收集訓(xùn)練數(shù)據(jù):需要大量包含目標(biāo)的正樣本圖像和不包含目標(biāo)的負(fù)樣本圖像。
??提取Haar特征:使用OpenCV等圖像處理工具提取每個(gè)樣本圖像的Haar特征,并將其保存為向量形式。
??訓(xùn)練分類器:使用機(jī)器學(xué)習(xí)算法(如Adaboost)訓(xùn)練Haar分類器,使其能夠準(zhǔn)確地區(qū)分包含目標(biāo)的圖像和不包含目標(biāo)的圖像。opencv訓(xùn)練自己的xml分類器以及如何獲取opencv_createsamples.exe和opencv_traincascade.exe_Lizaozao96的博客-CSDN博客
??目標(biāo)檢測:使用訓(xùn)練好的Haar分類器對新的圖像進(jìn)行檢測。首先在圖像中使用滑動(dòng)窗口將圖像劃分為小塊,在每個(gè)小塊上使用分類器進(jìn)行分類,如果檢測到包含目標(biāo)的區(qū)域,則將其輸出為檢測結(jié)果。
我們可以調(diào)用OpenCV訓(xùn)練好的分類器和自帶的檢測函數(shù)檢測人臉、人眼等。
2、haar分類器的靜態(tài)使用(處理圖片)
首先只需要安裝cv2的庫就能玩啦~
pip install opencv-python
在以下代碼中,我們首先加載了一個(gè)已經(jīng)訓(xùn)練好的Haar分類器(這里使用的是檢測人臉的分類器),然后將待檢測的圖像轉(zhuǎn)換為灰度圖像,并使用detectMultiScale方法對圖像進(jìn)行目標(biāo)檢測。如果檢測到目標(biāo),則在目標(biāo)所在位置繪制一個(gè)矩形框,并顯示檢測結(jié)果。
?
import cv2
# 加載分類器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 加載圖像
img = cv2.imread('lena.jpg')
# 將圖像轉(zhuǎn)換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用分類器進(jìn)行人臉檢測
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 在檢測到的人臉上繪制矩形框
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
# 顯示檢測結(jié)果
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
運(yùn)行結(jié)果如下:
以上就為對lena"長老"的圖片簡單操作。調(diào)用了 haarcascade_frontalface_default.xml模型文件實(shí)現(xiàn)了人臉框檢測。
3、haar分類器的動(dòng)態(tài)使用(對攝像頭視頻進(jìn)行處理)
首先我們需要準(zhǔn)備三個(gè)文件,分別是 'haarcascade_frontalface_default.xml、 haarcascade_eye.xml和 haarcascade_smile.xml分別用來識(shí)別人臉、眼睛和笑容。
可以使用上述代碼的加載分類器方式,也可以將cv2包里面的模型文件拿出來供我們復(fù)用,這里我使用的是虛擬環(huán)境,haar的一系列模型文件都在 venv\Lib\site-packages\cv2\data目錄下。
接下來我用直接傳入模型文件的方式來使用這三個(gè)方法(畫出臉框、眼眶和嘴框),并結(jié)合電腦攝像頭,代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-582596.html
import cv2
haar_front_face_xml = 'haarcascade_frontalface_default.xml'
haar_eye_xml = 'haarcascade_eye.xml'
smileharr = 'haarcascade_smile.xml'
# 視頻中的人臉檢測
def DynamicDetect():
'''
打開攝像頭,讀取幀,檢測幀中的人臉,掃描檢測到的人臉中的眼睛,對?臉繪制藍(lán)藍(lán)色的矩形框,對人眼和笑繪制綠?的矩形框
'''
# 創(chuàng)建3個(gè)級聯(lián)分類器 加載3個(gè) .xml 分類器?件
face_cascade = cv2.CascadeClassifier(haar_front_face_xml)
eye_cascade = cv2.CascadeClassifier(haar_eye_xml)
smile_cascade = cv2.CascadeClassifier(smileharr)
# 打開攝像頭
camera = cv2.VideoCapture(0)
cv2.namedWindow('Dynamic')
while True:
# 讀取1幀圖像
ret, frame = camera.read()
# 判斷圖片讀取成功?
if ret:
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 人臉檢測
faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
for (x, y, w, h) in faces:
# 在原圖像上繪制矩形
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
roi_gray = gray_img[y:y + h, x:x + w]
# 眼睛和笑臉檢測
eyes = eye_cascade.detectMultiScale(roi_gray, 1.03, 5, 0, (40, 40))
smile = smile_cascade.detectMultiScale(roi_gray, 1.03, 5, 0, (40, 40))
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(frame, (ex + x, ey + y), (x + ex + ew, y + ey + eh), (0, 255, 0), 2)
for (sx, sy, sw, sh) in smile:
cv2.rectangle(frame, (sx + x, sy + y), (x + sx + sw, y + sy + sh), (0, 255, 0), 2)
cv2.imshow('Dynamic', frame)
# 如果按下q鍵則退出
if cv2.waitKey(100) & 0xff == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
DynamicDetect()
————————————————
?https://blog.csdn.net/tianhai12/article/details/130534551文章來源地址http://www.zghlxwxcb.cn/news/detail-582596.html
到了這里,關(guān)于python opencv 級聯(lián)Haar多目標(biāo)檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!