人臉檢測是計算機視覺中的一個重要的部分,下面就通過Python來實現一個簡易的人臉識別的程序。
基本思想:
通過Python,採用識別人臉,然後標記出來,實現人臉檢測的結果。
方法是調用opencv訓練好的分類器和自帶的檢測函數檢測人臉。
主要流程:
- 加載分類器。我這裏用的是haarcascade_frontalface_default.xml。GitHub上的地址爲https://github.com/opencv/opencv/blob/master/data/haarcascades
- 調用detectMultiScale()函數檢測,調整函數的參數可以使檢測結果更加精確。
- 把檢測到的人臉等用矩形(或者圓形等其他圖形)畫出來。
示例代碼:
import cv2
import matplotlib.pyplot as plt
def show(image):
plt.imshow(image)
plt.axis('off')
plt.show()
def imread(image):
image = cv2.imread(image)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
return image
def facedetect(image):
image = imread(image)
# 級聯分類器
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
rects = detector.detectMultiScale(image, scaleFactor=1.1, minNeighbors=2, minSize=(10, 10),
flags=cv2.CASCADE_SCALE_IMAGE)
for (x, y, w, h) in rects:
# 畫矩形框
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
show(image)
facedetect("Solvay.jpg")
這裏面最主要的一個函數就是detectMultiScale()。文檔中的解釋如下:
- image表示的是要檢測的輸入圖像
- objects表示檢測到的人臉目標序列
- scaleFactor表示每次圖像尺寸減小的比例
- minNeighbors表示每一個目標至少要被檢測到3次纔算是真的目標(因爲周圍的像素和不同的窗口大小都可以檢測到人臉),
- minSize爲目標的最小尺寸
- minSize爲目標的最大尺寸
原始圖像爲
運行代碼後的結果如下:
覺得有用不妨點個贊哦~