1. 程式人生 > >Python學習經典案例:人臉檢測

Python學習經典案例:人臉檢測

== append ges from 圖像 解鎖 draw cascade imp

技術分享圖片

前言

隨著科技的發展,人臉識別技術在許多領域得到的非常廣泛的應用,手機支付、銀行身份驗證、手機人臉解鎖等等。

識別

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

代碼實現:

# -*-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
公眾號:pythonjks
""" 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")

識別效果圖:

技術分享圖片

多人識別效果:

技術分享圖片

經過測試,最終選用了 haarcascade_frontalface_alt.xml 做人臉識別,識別率最高。

人臉檢測分類器對比:

技術分享圖片

Python學習經典案例:人臉檢測