本文章用的是Python庫裡的OpenCv。
import cv2 # 匯入OpenCv庫
cv2.imread(filename) # 讀取影象
object = cv2.CascadeClassifier() # 括號裡面填Haar級聯分類器
"""
CascadeClassifier,是Opencv中做人臉檢測的時候的一個級聯分類器。並且既可以使用Haar,也可以使用LBP特徵。Haar特徵是一種反映影象的灰度變化的,畫素分模組求差值的一種特徵。
"""
object.detectMultiScale(image, scaleFactor, minNeighbors)
"""
detectMultiScale是CascadeClassifier的子類;
image:待分析的影象。
scaleFactor:掃描影象時縮放的比例。
minNeighbors:保留多少檢測結果,該值越大誤差越小。
etc...
"""
cv2.waitKey(delay) # 等待使用者按下鍵盤後等待delay毫秒
cv2.destroyAllWindows() # 銷燬所有視窗
人臉檢測,把影象分成一個個小塊,對每一個小塊判斷是否是人臉,假如一張圖被分成了5000塊,則速度非常慢。
為了提高效率,OpenCV 提供 cascades 來避免這種情況。提供了一系列的xml檔案
cascades :翻譯 :小瀑布 級聯
cascade 對於每個資料塊,它都進行一個簡單快速的檢測。若過,會再進行一個更仔細的檢測。該演演算法有 30 到 50 個這樣的階段,或者說 cascade。只有通過全部階段,cascade才會判斷檢測到人臉。這樣做的好處是:大多數小塊都會在前幾步就產生否定反饋,節約時間。
資源連結,該資源不僅僅包括人臉xml,還有其他眼睛等。賺取點積分吧。
OpenCV臉部辨識xml檔案.zip或者從官網Sources裡找資源,data資料夾中有是特徵檔案,我們一般選用haarcascade_frontalface_default.xml
資料來源於網路,侵刪。
import cv2
img = cv2.imread("/Users/duanhao/Desktop/photo/liukun.jpg")
# 載入識別人臉的級聯分析器
faceCascade = cv2.CascadeClassifier("/Applications/anaconda/anaconda3/lib/python3.9/site-packages/cv2/data/haarcascade_frontalface_default.xml")
faces = faceCascade.detectMultiScale(img, 1.15, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)
cv2.imshow("image", img)
cv2.waitKey()
cv2.destroyAllWindows()
準備階段:我們可以讀取視訊,也可以讀取人臉,這裡我準備了一張含有人臉的照片;
如果要讀取視訊需要用:VideoCapture類方法。
素材:一張墨鏡