攝像頭中的人臉檢測(cè),也是人臉識(shí)別的一部分, 攝像頭播放的畫面本質(zhì)上是按幀將圖片拼湊起來的, 所以我們今天來用Python去識(shí)別并替換人臉。
想要進(jìn)行人臉識(shí)別, 我們需要OpenCV, 還是先來說一下安裝的問題
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
一.資料的準(zhǔn)備
1 人臉特征數(shù)據(jù)文件的準(zhǔn)備
安裝完成之后, 我們想要進(jìn)行人臉識(shí)別的話, 還需要一些表示人臉的特征數(shù)據(jù), 這些數(shù)據(jù)文件是存放在Python環(huán)境的安裝包下的 ----> Lib ----> site packages ----> cv2 -----> data的文件夾中,如果忘記了Python環(huán)境的安裝位置, 可以在命令提示符工具/終端上 輸入指令where python,在data文件夾中存放的都是xml文件, 這些就是對(duì)應(yīng)的特征數(shù)據(jù)文件, 將 haarcascade_frontalface_alt.xml 導(dǎo)入到你的編輯工具中,與當(dāng)前編輯的文件在同一個(gè)目錄下
2.替換圖片的準(zhǔn)備
我使用的是下面這張旺財(cái)臉 o(╥﹏╥)o
二.代碼的實(shí)現(xiàn)
材料都準(zhǔn)備完畢了, 我們就開始寫代碼吧
- import cv2
- if __name__ == '__main__'
- # 根據(jù)人臉特征的數(shù)據(jù) 獲取人臉檢測(cè)器
- face_detector = cv2.CascadeClassifier('.haarcascade_frontalface_alt.xml')
- # 獲取攝像頭行為
- cap = cv2.VideoCapture(0)
- while True
- # 從攝像頭中按幀返回圖片
- flag,frame = cap.read()
- if not flag # 沒有圖片時(shí)flag為False
- break
- # 將獲取的圖片置灰 檢測(cè)效率高一些
- face_zones = face_detector
- .detectMultiScale(cv2.cvtColor(frame,
- code=cv2.COLOR_BGR2GRAY))
- # 獲取檢測(cè)到的人臉區(qū)域
- for x,y,w,h in face_zones
- # 讀取覆蓋圖片
- wc = cv2.imread('.head.png')
- wc = cv2.resize(wc,dsize = (w,h)) # 將該圖片的大小重置為人臉的大小
- frame[yy+h,xx+w] = wc # 將人臉顯示區(qū)域 替換成覆蓋的圖片
- cv2.imshow('wangcai',frame) # 顯示圖片
- key = cv2.waitKey(10)
- if key == ord('q') # 輸入q退出讀取
- break
- cv2.destroyAllWindows()
- cap.release()
最終結(jié)果如下圖