OpenCV人臉檢測
OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。——百度百科
opencv的功能很強大。在人臉識別方面,它包含了很多分類器,可以識別眼睛、嘴巴、正臉等等,其中在正臉識別上有4個haar特徵訓練的級聯分類器。
(1)haarcascade_frontalface_alt.xml
(2)haarcascade_frontalface_alt2.xml
(3)haarcascade_frontalface_alt_tree.xml
(4)haarcascade_frontalface_default.xml
這四個在不同程度上都有誤檢,大家根據自己的數據集都可以用來測試測試看看那個準確率更高。有人檢測說default準確率最高。我都測試過,對於有些圖片也不一定。下面網盤我分享了(1)和(4)兩個。
代碼實現:
import cv2
# 圖片名
filename =r'C:\Users\lenovo\Desktop\0.jpg'
def detect(filename):
# cv2級聯分類器CascadeClassifier,xml文件爲訓練數據
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
# 讀取圖片
img = cv2.imread(filename)
# img = cv2.resize(img, (64,64))
# 轉灰度圖
# gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 進行人臉檢測
# scaleFactor--表示在前後兩次相繼的掃描中,搜索窗口的比例係數。默認爲1.1即每次搜索窗口依次擴大10%;
# minNeighbors--表示構成檢測目標的相鄰矩形的最小個數(默認爲3個)。
# 如果組成檢測目標的小矩形的個數和小於 min_neighbors - 1 都會被排除。
# 如果min_neighbors 爲 0, 則函數不做任何操作就返回所有的被檢候選矩形框,
# 這種設定值一般用在用戶自定義對檢測結果的組合程序上;
faces = face_cascade.detectMultiScale(img, 1.1, 3)
print(faces)
# 繪製人臉矩形框
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 命名顯示窗口
cv2.namedWindow('people')
# 顯示圖片
cv2.imshow('people',img)
# 保存圖片
# cv2.imwrite('./1.jpg', img2)
# 設置顯示時間,0表示一直顯示
cv2.waitKey(0)
detect(filename)
下面測試一張圖片
使用alt的結果:
default的結果:
兩個級聯器:
鏈接:https://pan.baidu.com/s/1KcdIckj9vfs1sMka87EJRg
提取碼:ju3e
全部代碼my github