Python學習案例之人臉檢測識別

前言

隨着科技的發展,人臉識別技術在許多領域獲得的很是普遍的應用,手機支付、銀行身份驗證、手機人臉解鎖等等。python

識別

廢話少說,這裏咱們使用 opencv 中自帶了 haar人臉特徵分類器,利用訓練好的 haar 特徵的 xml 文件,在圖片上檢測出人臉的座標,利用這個座標,咱們能夠將人臉區域剪切保存,也能夠在原圖上將人臉框出。git

代碼實現:github

# -*-coding:utf8-*-#
import os
import cv2
from PIL import Image, ImageDraw
from datetime import datetime

"""
分類器 https://github.com/opencv/opencv/tree/master/data/haarcascades
安裝模塊:pip install Pillow   pip install opencv-python
博客:https://blog.52itstyle.vip/archives/3771/
"""


def detectFaces(image_name):
    img = cv2.imread(image_name)
    face_cascade = cv2.CascadeClassifier(os.getcwd()+"\\haarcascade\\haarcascade_frontalface_alt.xml")
    if img.ndim == 3:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    else:
        gray = img  # if語句:若是img維度爲3,說明不是灰度圖,先轉化爲灰度圖gray,若是不爲3,也就是2,原圖就是灰度圖

    faces = face_cascade.detectMultiScale(gray, 1.2, 5)  # 1.3和5是特徵的最小、最大檢測窗口,它改變檢測結果也會改變
    result = []
    for (x, y, width, height) in faces:
        result.append((x, y, x + width, y + height))
    return result


# 保存人臉圖
def saveFaces(image_name):
    faces = detectFaces(image_name)
    if faces:
        # 將人臉保存在save_dir目錄下。
        # Image模塊:Image.open獲取圖像句柄,crop剪切圖像(剪切的區域就是detectFaces返回的座標),save保存。
        save_dir = image_name.split('.')[0] + "_faces"
        os.mkdir(save_dir)
        count = 0
        for (x1, y1, x2, y2) in faces:
            file_name = os.path.join(save_dir, str(count) + ".jpg")
            Image.open(image_name).crop((x1, y1, x2, y2)).save(file_name)
            count += 1


if __name__ == '__main__':
    time1 = datetime.now()
    result = detectFaces(os.getcwd()+"\\images\\gaoyuanyuan.jpg")
    time2 = datetime.now()
    print("耗時:" + str(time2 - time1))
    if len(result) > 0:
        print("有人存在!!---》人數爲:" + str(len(result)))
    else:
        print('視頻圖像中無人!!')

    drawFaces(os.getcwd()+"\\images\\", "hanxue.jpg")
    saveFaces(os.getcwd()+"\\images\\gaoyuanyuan.jpg")

識別效果圖:app

多人識別效果:機器學習

通過測試,最終選用了 haarcascade_frontalface_alt.xml 作人臉識別,識別率最高。學習

人臉檢測分類器對比:測試

級聯分類器的類型 XML文件名
人臉檢測器(默認) haarcascade_frontalface_default.xml
人臉檢測器(快速的Haar) haarcascade_frontalface_alt2.xml
人臉檢測器(Tree) haarcascade_frontalface_alt_tree.xml
人臉檢測器(Haar_1) haarcascade_frontalface_alt.xml

小結

開源的人臉檢測分類器對於標準的人臉識別足夠了,要想精確識別好比,側臉、模糊、光照、遮擋的人臉,只能經過深度機器學習進一步優化識別精度和速度。優化

源碼

https://gitee.com/52itstyle/Python/tree/master/Day09code

相關文章
相關標籤/搜索