利用Python實現人臉識別檢測

人臉檢測是計算機視覺中的一個重要的部分,下面就通過Python來實現一個簡易的人臉識別的程序。

基本思想:

通過Python,採用識別人臉,然後標記出來,實現人臉檢測的結果。

方法是調用opencv訓練好的分類器和自帶的檢測函數檢測人臉。

主要流程:

  1. 加載分類器。我這裏用的是haarcascade_frontalface_default.xml。GitHub上的地址爲https://github.com/opencv/opencv/blob/master/data/haarcascades
  2. 調用detectMultiScale()函數檢測,調整函數的參數可以使檢測結果更加精確。
  3. 把檢測到的人臉等用矩形(或者圓形等其他圖形)畫出來。

示例代碼:

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()。文檔中的解釋如下:https://upload-images.jianshu.io/upload_images/5201633-7267daa22248abc5?imageMogr2/auto-orient/

  1. image表示的是要檢測的輸入圖像
  2. objects表示檢測到的人臉目標序列
  3. scaleFactor表示每次圖像尺寸減小的比例
  4. minNeighbors表示每一個目標至少要被檢測到3次纔算是真的目標(因爲周圍的像素和不同的窗口大小都可以檢測到人臉),
  5. minSize爲目標的最小尺寸
  6. minSize爲目標的最大尺寸

原始圖像爲 

運行代碼後的結果如下:

 

覺得有用不妨點個贊哦~ 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章