Python學(xué)習筆記之圖片人臉檢測識別實例教程
前言
隨著科技的發(fā)展,人臉識別技術(shù)在許多領(lǐng)域得到的非常廣泛的應(yīng)用,手機支付、銀行身份驗證、手機人臉解鎖等等。
識別
廢話少說,這里我們使用 opencv 中自帶了 haar人臉特征分類器,利用訓(xùn)練好的 haar 特征的 xml 文件,在圖片上檢測出人臉的坐標,利用這個坐標,我們可以將人臉區(qū)域剪切保存,也可以在原圖上將人臉框出。
代碼實現(xiàn):
# -*-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,說明不是灰度圖,先轉(zhuǎn)化為灰度圖gray,如果不為3,也就是2,原圖就是灰度圖
faces = face_cascade.detectMultiScale(gray, 1.2, 5) # 1.3和5是特征的最小、最大檢測窗口,它改變檢測結(jié)果也會改變
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剪切圖像(剪切的區(qū)域就是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("有人存在??!---》人數(shù)為:" + str(len(result)))
else:
print('視頻圖像中無人??!')
drawFaces(os.getcwd()+"\\images\\", "hanxue.jpg")
saveFaces(os.getcwd()+\\images\\gaoyuanyuan.jpg)
識別效果圖:

多人識別效果:

經(jīng)過測試,最終選用了 haarcascade_frontalface_alt.xml 做人臉識別,識別率最高。
人臉檢測分類器對比:
| 級聯(lián)分類器的類型 | XML文件名 |
|---|---|
| 人臉檢測器(默認) | haarcascade_frontalface_default.xml |
| 人臉檢測器(快速的Haar) | haarcascade_frontalface_alt2.xml |
| 人臉檢測器(Tree) | haarcascade_frontalface_alt_tree.xml |
| 人臉檢測器(Haar_1) | haarcascade_frontalface_alt.xml |
小結(jié)
開源的人臉檢測分類器對于標準的人臉識別足夠了,要想精確識別比如,側(cè)臉、模糊、光照、遮擋的人臉,只能通過深度機器學(xué)習進一步優(yōu)化識別精度和速度。
源碼
https://gitee.com/52itstyle/Python/tree/master/Day09(本地下載)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Python+pandas編寫命令行腳本操作excel的tips詳情
這篇文章主要介紹了Python+pandas編寫命令行腳本操作excel的tips詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-07-07
python文件讀寫并使用mysql批量插入示例分享(python操作mysql)
這篇文章主要介紹了python文件讀寫并使用mysql批量插入示例,可以學(xué)習到python操作mysql數(shù)據(jù)庫的方法,需要的朋友可以參考下2014-02-02
Python調(diào)用百度AI實現(xiàn)人像分割詳解
本文主要介紹了如何通過Python調(diào)用百度AI從而實現(xiàn)人像的分割與合成,文中的示例代碼對我們的工作或?qū)W習有一定的幫助,需要的朋友可以參考一下2021-12-12
Keras自定義實現(xiàn)帶masking的meanpooling層方式
這篇文章主要介紹了Keras自定義實現(xiàn)帶masking的meanpooling層方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python解決ModuleNotFoundError: No module named&
ModuleNotFoundError: No module named 'PIL'是一個常見的Python錯誤,通常出現(xiàn)在使用Pillow庫時,Pillow是Python中用于圖像處理的一個庫,其前身是PIL,本文介紹了Python解決ModuleNotFoundError: No module named 'PIL'的問題,需要的朋友可以參考下2024-09-09
關(guān)于windos10環(huán)境下編譯python3版pjsua庫的問題
pjsua默認綁定的python版本是python 2.4,使用起來有諸多限制,希望可以使用python3調(diào)用pjsua的庫實現(xiàn)軟電話的基礎(chǔ)功能。這篇文章主要介紹了windos10環(huán)境下編譯python3版pjsua庫,需要的朋友可以參考下2021-10-10
Python 基于FIR實現(xiàn)Hilbert濾波器求信號包絡(luò)詳解
今天小編就為大家分享一篇Python 基于FIR實現(xiàn)Hilbert濾波器求信號包絡(luò)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02

