Opencv进行人脸检测(第三版改进)
文章目錄
- 1.先前Opencv人臉檢測(cè)
- 2.python下的級(jí)聯(lián)分類器
- 3.首先了解Opencv中Haar 特征的Cascade級(jí)聯(lián)分類器
- 4.Adaboost算法
- 5.使用圖片簡(jiǎn)單測(cè)試一下
- 6.使用Opencv中自帶的級(jí)聯(lián)分類器進(jìn)行人臉實(shí)時(shí)檢測(cè)
- 7.使用Opencv中自帶的級(jí)聯(lián)分類器進(jìn)行人臉微笑檢測(cè)
- 8.使用Opencv中自帶的級(jí)聯(lián)分類器進(jìn)行人臉微笑實(shí)時(shí)檢測(cè)
1.先前Opencv人臉檢測(cè)
https://mydreamambitious.blog.csdn.net/article/details/123535760
2.python下的級(jí)聯(lián)分類器
https://mydreamambitious.blog.csdn.net/article/details/121458773
3.首先了解Opencv中Haar 特征的Cascade級(jí)聯(lián)分類器
使用基于 Haar 特征的級(jí)聯(lián)分類器進(jìn)行對(duì)象檢測(cè)是 Paul Viola 和 Michael Jones 在其 2001 年的論文“Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一種有效的對(duì)象檢測(cè)方法。它是一種基于機(jī)器學(xué)習(xí)的方法,其中級(jí)聯(lián)函數(shù)是從大量正負(fù)圖像中訓(xùn)練出來(lái)的。然后它用于檢測(cè)其他圖像中的對(duì)象。
最初,該算法需要大量的正圖像(人臉圖像)和負(fù)圖像(沒(méi)有人臉的圖像)來(lái)訓(xùn)練分類器。然后我們需要從中提取特征。為此,使用了下圖中顯示的 Haar 特征。它們就像我們的卷積核。每個(gè)特征都是通過(guò)從黑色矩形下的像素總和中減去白色矩形下的像素總和而獲得的單個(gè)值
4.Adaboost算法
Adaboost是一種迭代算法,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后把這些弱分類器集合起來(lái),構(gòu)成一個(gè)更強(qiáng)的最終分類器(強(qiáng)分類器)。Adaboost算法本身是通過(guò)改變數(shù)據(jù)分布來(lái)實(shí)現(xiàn)的,它根據(jù)每次訓(xùn)練集之中每個(gè)樣本的分類是否正確,以及上次的總體分類的準(zhǔn)確率,來(lái)確定每個(gè)樣本的權(quán)值。將修改過(guò)權(quán)值的新數(shù)據(jù)集送給下層分類器進(jìn)行訓(xùn)練,最后將每次得到的分類器最后融合起來(lái),作為最后的決策分類器。
5.使用圖片簡(jiǎn)單測(cè)試一下
#Opencv人臉檢測(cè) import os import cv2#導(dǎo)入人臉檢測(cè)級(jí)聯(lián)分類器,.xml包含訓(xùn)練出來(lái)的人臉特征 detect_face=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')#導(dǎo)入圖片 #filename:需要打開(kāi)圖片的路徑,可以是絕對(duì)路徑或者相對(duì)路徑,路徑中不能出現(xiàn)中文。 #flag:圖像的通道和色彩信息(默認(rèn)值為1)。 frame=cv2.imread('images/face1.jpg',flags=1)# 使用detect_face進(jìn)行人臉檢測(cè),返回包含的內(nèi)容是人臉位置的坐標(biāo),scaleFactor人臉框的放大比例,minNeighbors表示檢測(cè)的最小次數(shù) detect = detect_face.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=15)#遍歷圖中的人臉畫(huà)框 for (x0,y0,w,h) in detect:#對(duì)人臉進(jìn)行畫(huà)框frame=cv2.rectangle(frame,pt1=(x0,y0),pt2=(x0+w,y0+h),color=(255,0,0),thickness=2)#圖片,添加的文字,左上角坐標(biāo),字體,字體大小,顏色,字體粗細(xì)cv2.putText(frame,text='person',org=(x0+w//4,y0-10),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=1.2,color=(0,255,0),thickness=2) cv2.imshow('face',frame) cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')6.使用Opencv中自帶的級(jí)聯(lián)分類器進(jìn)行人臉實(shí)時(shí)檢測(cè)
#Opencv人臉檢測(cè) import os import cv2#導(dǎo)入人臉檢測(cè)級(jí)聯(lián)分類器 detect_face=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')#打開(kāi)攝像頭 cap=cv2.VideoCapture(0)while cap.isOpened():OK,frame=cap.read()# 使用detect_face進(jìn)行人臉檢測(cè),返回包含的內(nèi)容是人臉位置的坐標(biāo),scaleFactor人臉框的放大比例,minNeighbors表示檢測(cè)的最小次數(shù)detect = detect_face.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=15)#遍歷圖中的人臉畫(huà)框for (x0,y0,w,h) in detect:#對(duì)人臉進(jìn)行畫(huà)框frame=cv2.rectangle(frame,pt1=(x0,y0),pt2=(x0+w,y0+h),color=(255,0,0),thickness=2)#圖片,添加的文字,左上角坐標(biāo),字體,字體大小,顏色,字體粗細(xì)cv2.putText(frame,text='person',org=(x0+w//4,y0-10),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=1.2,color=(0,255,0),thickness=2)if cv2.waitKey(1)&0xFF==27:breakcv2.imshow('face',frame) cap.release() cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')7.使用Opencv中自帶的級(jí)聯(lián)分類器進(jìn)行人臉微笑檢測(cè)
#Opencv人臉檢測(cè) import os import cv2#導(dǎo)入人臉檢測(cè)級(jí)聯(lián)分類器 detect_face=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')#導(dǎo)入人臉檢測(cè)級(jí)聯(lián)分類器 detect_smile=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_smile.xml')#導(dǎo)入圖片 #filename:需要打開(kāi)圖片的路徑,可以是絕對(duì)路徑或者相對(duì)路徑,路徑中不能出現(xiàn)中文。 #flag:圖像的通道和色彩信息(默認(rèn)值為1)。 frame=cv2.imread('images/smile.jpg',flags=1) #使用detect_face進(jìn)行人臉檢測(cè),返回包含的內(nèi)容是人臉位置的坐標(biāo),scaleFactor人臉框的放大比例,minNeighbors表示檢測(cè)的最小次數(shù) detect = detect_face.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=15)#遍歷圖中的人臉畫(huà)框 for (x0,y0,w,h) in detect:#對(duì)人臉進(jìn)行畫(huà)框frame=cv2.rectangle(frame,pt1=(x0,y0),pt2=(x0+w,y0+h),color=(255,0,0),thickness=2)#首先將人的檢測(cè)出來(lái)之后檢測(cè)人的微笑情況frame_smile=frame[x0:x0+w,y0:y0+h]# 對(duì)人的進(jìn)行檢測(cè)smile=detect_smile.detectMultiScale(frame_smile,scaleFactor=1.2,minNeighbors=15)for (sx, sy, sw, sh) in smile:# 圖片,添加的文字,左上角坐標(biāo),字體,字體大小,顏色,字體粗細(xì)cv2.putText(frame, text='smile', org=(x0 + w // 4, y0 - 10), fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=1.2,color=(0, 255, 0), thickness=2)cv2.imshow('face',frame) cv2.waitKey(0) cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')8.使用Opencv中自帶的級(jí)聯(lián)分類器進(jìn)行人臉微笑實(shí)時(shí)檢測(cè)
#Opencv人臉檢測(cè) import os import cv2#導(dǎo)入人臉檢測(cè)級(jí)聯(lián)分類器 detect_face=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')#導(dǎo)入人臉檢測(cè)級(jí)聯(lián)分類器 detect_smile=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_smile.xml')#打開(kāi)攝像頭 cap=cv2.VideoCapture(0)while cap.isOpened():OK,frame=cap.read()# 使用detect_face進(jìn)行人臉檢測(cè),返回包含的內(nèi)容是人臉位置的坐標(biāo),scaleFactor人臉框的放大比例,minNeighbors表示檢測(cè)的最小次數(shù)detect = detect_face.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=15)#遍歷圖中的人臉畫(huà)框for (x0,y0,w,h) in detect:#對(duì)人臉進(jìn)行畫(huà)框frame=cv2.rectangle(frame,pt1=(x0,y0),pt2=(x0+w,y0+h),color=(255,0,0),thickness=2)#圖片,添加的文字,左上角坐標(biāo),字體,字體大小,顏色,字體粗細(xì)cv2.putText(frame,text='person',org=(x0+w//4,y0-40),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=1.2,color=(0,255,0),thickness=2)#首先將人的檢測(cè)出來(lái)之后檢測(cè)人的微笑情況frame_smile=frame[x0:x0+w,y0:y0+h]# 對(duì)人的進(jìn)行檢測(cè)smile=detect_smile.detectMultiScale(frame_smile,scaleFactor=1.2,minNeighbors=15)for (sx, sy, sw, sh) in smile:# 圖片,添加的文字,左上角坐標(biāo),字體,字體大小,顏色,字體粗細(xì)cv2.putText(frame, text='smile', org=(x0 + w // 4, y0 - 10), fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=1.2,color=(0, 255, 0), thickness=2)if cv2.waitKey(1)&0xFF==27:breakcv2.imshow('face',frame) cap.release() cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')總結(jié)
以上是生活随笔為你收集整理的Opencv进行人脸检测(第三版改进)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 移动硬盘安装ubuntu16.04
- 下一篇: 深度学习常用模型总结(思维导图形式)