Python下應用opencv 實現(xiàn)人臉檢測功能
使用OpenCV's Haar cascades作為人臉檢測,因為他做好了庫,我們只管使用。
代碼簡單,除去注釋,總共有效代碼只有10多行。
所謂庫就是一個檢測人臉的xml 文件,可以網(wǎng)上查找,下面是一個地址:
https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
如何構造這個庫,學習完本文后可以參考:
http://note.sonots.com/SciSoftware/haartraining.html
https://www.instructables.com/id/Create-OpenCV-Image-Classifiers-Using-Python/
知道構造庫,就可以檢測各種你想要檢測的東西了。
人臉檢測不是人臉識別,但是人臉識別的前提。
運行效果如下:

前提:
這個原始代碼來自 https://www.pyimagesearch.com/2016/11/21/raspbian-opencv-pre-configured-and-pre-installed/ 的一個教學講稿。
你需要下載haarcascade_frontalface_default.xml 以及準備你要檢測的文件,我這里是family.jpg,放在python 文件detect_faces.py 所在目錄(工作目錄)的子目錄images下。haarcascade_frontalface_default.xml是放在工作目錄。
如果加上攝像頭連接程序,也可實時檢測,另文介紹。
代碼1介紹
導入庫,并做命令行參數(shù)處理。你在命令行可以輸入如下:
python detect_faces.py --image image/family.jpg --detector haarcascade_frontalface_default.xml
我在程序中都有缺省參數(shù)處理,你如果集成測試或命令行不輸參數(shù)的話,就要修改好你的缺省值。
這樣命令行就是python detect_faces.py ,同時也可以輸入命令行輸入?yún)?shù)。
# USAGE 使用方法是:
# python detect_faces.py --image images/family.jpg \
# --detector haarcascade_frontalface_default.xml
# import the necessary packages 輸入包
# import imutils
import argparse
import cv2
# construct the argument parser and parse the arguments //構造命令行參數(shù)分析
# 為了集成測試,或者命令行輸入的簡單,這里都有缺省參數(shù)
#image 是 images/family.jpg
#detector 是 haarcascade_frontalface_default.xml
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", default='images/family.jpg',
help="path to the input image")
ap.add_argument("-d", "--detector", default='haarcascade_frontalface_default.xml',
help="path to Haar cacscade face detector")
args = vars(ap.parse_args())
導入圖形文件,并灰度處理
# load our image and convert it to grayscale 導入圖形文件,并灰度化
image = cv2.imread(args["image"])
#image =imutils.resize(image,width=800)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
導入檢測文件,檢測圖中人臉,顯示檢測到的人臉數(shù)
# load the face detector and detect faces in the image
# 導入臉部檢測文件
detector = cv2.CascadeClassifier(args["detector"])
#檢測圖形中的臉部
rects = detector.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9,
minSize=(40, 40), flags=cv2.CASCADE_SCALE_IMAGE)
#顯示檢測到的人臉數(shù)目
print("[INFO] detected {} faces".format(len(rects)))
循環(huán),繪圖每個檢測到的人臉框,并圖形顯示
# load the face detector and detect faces in the image
# 導入臉部檢測
detector = cv2.CascadeClassifier(args["detector"])
#檢測圖形中的臉部
rects = detector.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9,
minSize=(40, 40), flags=cv2.CASCADE_SCALE_IMAGE)
#顯示檢測到的人臉數(shù)目
print("[INFO] detected {} faces".format(len(rects)))
最后串接所有代碼如下:
# USAGE 使用方法是:
# python detect_faces.py --image images/family.jpg \
# --detector haarcascade_frontalface_default.xml
# import the necessary packages 輸入包
# import imutils 如果需要成比例縮放圖形才需要,這里不需要
import argparse
import cv2
# construct the argument parser and parse the arguments //構造命令行參數(shù)分析
# 為了集成測試,或者命令行輸入的簡單,這里都有缺省參數(shù)
#image 是 images/family.jpg
#detector 是 haarcascade_frontalface_default.xml
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", default='images/family.jpg',
help="path to the input image")
ap.add_argument("-d", "--detector", default='haarcascade_frontalface_default.xml',
help="path to Haar cacscade face detector")
args = vars(ap.parse_args())
# load our image and convert it to grayscale 導入圖形文件,并灰度化
image = cv2.imread(args["image"])
#image =imutils.resize(image,width=800)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# load the face detector and detect faces in the image
# 導入臉部檢測文件
detector = cv2.CascadeClassifier(args["detector"])
#檢測圖形中的臉部
rects = detector.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9,
minSize=(40, 40), flags=cv2.CASCADE_SCALE_IMAGE)
#顯示檢測到的人臉數(shù)目
print("[INFO] detected {} faces".format(len(rects)))
# loop over the bounding boxes and draw a rectangle around each face
# 循環(huán)rects,繪圖每個檢測到的人臉框
for (x, y, w, h) in rects:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# show the detected faces
cv2.imshow("Faces", image)
cv2.waitKey(0)
總結
以上所述是小編給大家介紹的Python下應用opencv 實現(xiàn)人臉檢測功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
相關文章
python tensorflow學習之識別單張圖片的實現(xiàn)的示例
本篇文章主要介紹了python tensorflow學習之識別單張圖片的實現(xiàn)的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
圖文詳解Python中如何簡單地解決Microsoft?Visual?C++?14.0報錯
有的時候安裝python依賴包的時候,報錯信息"Microsoft?visual?c++?14.0?is?required"的解決辦法,下面這篇文章主要給大家介紹了關于Python中如何簡單地解決Microsoft?Visual?C++?14.0報錯的相關資料,需要的朋友可以參考下2023-02-02
python中導入 train_test_split提示錯誤的解決
這篇文章主要介紹了python中導入 train_test_split提示錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06

