一、文章概述
本文將要講述的是Python環境下如何用OpenCV檢測人臉,本文的主要內容分為:
1、檢測圖片中的人臉
2、實時檢測視頻中出現的人臉
3、用運設備的攝像頭實時檢測人臉
二:準備作業
提前做的準備:
- 安裝好Python3
- 下載安裝OpenCV庫,方法是pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com/pypi/simple
- 下載特征資料HAAR和LBP,這兩種資料都能實作對人臉特征的提取,HAAR大多是小數計算所以運算速度較慢,LBP大多是整數計算運行速度較快,如圖所示,本次實體用紅框中的文本,其他的文本,比如第一個haarcascade_eye.xml是眼睛識別的文本,我們下次再用,
注意:點擊下載HAAR和LBP的特征資料--------資料集下載
三、開始講述
1、圖片人臉檢測
(1)代碼和說明
import cv2 as cv
import numpy as np
def face_detect_demo():#人臉檢測函式
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)#把圖片變成灰度圖片,因為人臉的特征需要在灰度影像中查找
#以下分別是HAAR和LBP特征資料,任意選擇一種即可,注意:路徑中的‘/’和‘\’是有要求的
# 通過級聯檢測器 cv.CascadeClassifier,加載特征資料
# face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
face_detector = cv.CascadeClassifier(
"D:/pyproject/cv_renlianjiance/lbpcascades/lbpcascade_frontalcatface.xml")
#在尺度空間對圖片進行人臉檢測,第一個引數是哪個圖片,第二個引數是向上或向下的尺度變化,是原來尺度的1.02倍,第三個引數是在相鄰的幾個人臉檢測矩形框內出現就認定成人臉,這里是在相鄰的5個人臉檢測框內出現,如果圖片比較模糊的話建議降低一點
faces = face_detector.detectMultiScale(gray, 1.02, 5)
for x, y, w, h in faces:#繪制結果圖
#rectangle引數說明,要繪制的目標影像,矩形的第一個頂點,矩形對角線上的另一個頂點,線條的顏色,線條的寬度
cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv.imshow("result", src)#輸出結果圖
src = https://www.cnblogs.com/wxys/archive/2020/10/06/cv.imread("D:/pyproject/cv_renlianjiance/cvrenxiangpic/1.jpg")#圖片是JPG和png都可以
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)#創建繪圖視窗
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
face_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常關倍訓圖視窗
123456789101112131415161718192021222324
(2)結果展示
2、視頻中的人臉檢測
(1)代碼和說明
import cv2 as cv
import numpy as np
def face_detect_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/lbpcascades/lbpcascade_frontalcatface.xml")
faces = face_detector.detectMultiScale(gray, 1.02, 5)
for x, y, w, h in faces:
cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv.imshow("result", image)
capture = cv.VideoCapture("D:/pyproject/cv_renlianjiance/video/1.mp4")
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
while (True):
#按幀讀取視頻,ret,frame是獲cap.read()方法的兩個回傳值,其中ret是布林值,如果讀取幀是正確的則回傳True,如果檔案讀取到結尾,它的回傳值就為False,frame就是每一幀的影像,是個三維矩陣,
ret, frame = capture.read()
# cv.flip函式表示影像翻轉,沿y軸翻轉, 0: 沿x軸翻轉, <0: x、y軸同時翻轉
frame = cv.flip(frame, 1)
face_detect_demo(frame)
#waitKey()方法本身表示等待鍵盤輸入,引數是1,表示延時1ms切換到下一幀影像,對于視頻而言;
c = cv.waitKey(10)
if c == 27:#當鍵盤按下‘ESC’退出程式
break
#cv.waitKey(0)引數為0,如cv2.waitKey(0)只顯示當前幀影像,相當于視頻暫停,;
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常關倍訓圖視窗
1234567891011121314151617181920212223242526272829
(2)結果展示
3、利用設備上的攝像頭進行人臉檢測,其實和2中的代碼一樣,只是打開攝像頭,而不是讀取視頻檔案
代碼和說明
import cv2 as cv
import numpy as np
def face_detect_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/lbpcascades/lbpcascade_frontalcatface.xml")
faces = face_detector.detectMultiScale(gray, 1.02, 5)
for x, y, w, h in faces:
cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv.imshow("result", image)
capture = cv.VideoCapture(0)#其中的0表示電腦中的第一個相機
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
while (True):
#按幀讀取視頻,ret,frame是獲cap.read()方法的兩個回傳值,其中ret是布林值,如果讀取幀是正確的則回傳True,如果檔案讀取到結尾,它的回傳值就為False,frame就是每一幀的影像,是個三維矩陣,
ret, frame = capture.read()
# cv.flip函式表示影像翻轉,沿y軸翻轉, 0: 沿x軸翻轉, <0: x、y軸同時翻轉
frame = cv.flip(frame, 1)
face_detect_demo(frame)
#waitKey()方法本身表示等待鍵盤輸入,引數是1,表示延時1ms切換到下一幀影像,對于視頻而言;
c = cv.waitKey(10)
if c == 27:#當鍵盤按下‘ESC’退出程式
break
#cv.waitKey(0)引數為0,如cv2.waitKey(0)只顯示當前幀影像,相當于視頻暫停,;
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常關倍訓圖視窗
1234567891011121314151617181920212223242526272829
以上就是本文所有內容,希望能幫到大家!!!
需要源代碼或者想了解更多內容點擊這里下載
此文轉載文,著作權歸作者所有,如有侵權聯系小編洗掉!
原文地址:https://blog.csdn.net/m0_45161766/article/details/107545960
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159495.html
標籤:其他
