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