一、文章概述

注意:本文只是人臉檢測,人臉識別的實現請參見本人另一篇部落格:基於OpenCV+TensorFlow+Keras實現人臉識別

本文將要講述的是Python環境下如何用OpenCV檢測人臉,本文的主要內容分為:

1、檢測圖片中的人臉

2、實時檢測影片中出現的人臉

3、用運裝置的攝像頭實時檢測人臉

二:準備工作

提前做的準備:

安裝好Python3

下載安裝OpenCV庫,方法是pip install opencv-python -i

https://

mirrors。aliyun。com/pypi

/simple/

——trusted-host=

http://

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 = 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()#作用是能正常關閉繪圖視窗

(2)結果展示

基於Python的OpenCV人臉檢測!簡直不要太簡單!

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()#作用是能正常關閉繪圖視窗

(2)結果展示

基於Python的OpenCV人臉檢測!簡直不要太簡單!

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()#作用是能正常關閉繪圖視窗

此文轉載,著作權歸作者所有,如有侵權聯絡小編刪除!

原文地址:

https://

blog。csdn。net/m0_451617

66/article/details