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

多人識(shí)別效果:

經(jīng)過(guò)測(cè)試,最終選用了 haarcascade_frontalface_alt.xml 做人臉識(shí)別,識(shí)別率最高。
人臉檢測(cè)分類(lèi)器對(duì)比:
| 級(jí)聯(lián)分類(lèi)器的類(lèi)型 | XML文件名 |
|---|---|
| 人臉檢測(cè)器(默認(rèn)) | haarcascade_frontalface_default.xml |
| 人臉檢測(cè)器(快速的Haar) | haarcascade_frontalface_alt2.xml |
| 人臉檢測(cè)器(Tree) | haarcascade_frontalface_alt_tree.xml |
| 人臉檢測(cè)器(Haar_1) | haarcascade_frontalface_alt.xml |
小結(jié)
開(kāi)源的人臉檢測(cè)分類(lèi)器對(duì)于標(biāo)準(zhǔn)的人臉識(shí)別足夠了,要想精確識(shí)別比如,側(cè)臉、模糊、光照、遮擋的人臉,只能通過(guò)深度機(jī)器學(xué)習(xí)進(jìn)一步優(yōu)化識(shí)別精度和速度。
源碼
https://gitee.com/52itstyle/Python/tree/master/Day09(本地下載)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- python實(shí)現(xiàn)圖像檢索的三種(直方圖/OpenCV/哈希法)
- Python Opencv任意形狀目標(biāo)檢測(cè)并繪制框圖
- opencv python 圖像輪廓/檢測(cè)輪廓/繪制輪廓的方法
- python opencv實(shí)現(xiàn)圖像邊緣檢測(cè)
- Python基于matplotlib畫(huà)箱體圖檢驗(yàn)異常值操作示例【附xls數(shù)據(jù)文件下載】
- python用10行代碼實(shí)現(xiàn)對(duì)黃色圖片的檢測(cè)功能
- 用Python實(shí)現(xiàn)通過(guò)哈希算法檢測(cè)圖片重復(fù)的教程
- Python檢查圖片是否損壞及圖片類(lèi)型是否正確過(guò)程詳解
相關(guān)文章
對(duì)python中矩陣相加函數(shù)sum()的使用詳解
今天小編就為大家分享一篇對(duì)python中矩陣相加函數(shù)sum()的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
django2用iframe標(biāo)簽完成網(wǎng)頁(yè)內(nèi)嵌播放b站視頻功能
這篇文章主要介紹了django2 用iframe標(biāo)簽完成 網(wǎng)頁(yè)內(nèi)嵌播放b站視頻功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法
下面小編就為大家分享一篇python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
為什么選擇python編程語(yǔ)言入門(mén)黑客攻防 給你幾個(gè)理由!
為什么選擇python編程語(yǔ)言入門(mén)黑客攻防,小編今天給你幾個(gè)理由!Python語(yǔ)言的優(yōu)點(diǎn)、Python黑客攻擊優(yōu)點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
Python爬取門(mén)戶論壇評(píng)論淺談Python未來(lái)發(fā)展方向
這篇文章主要介紹了如何實(shí)現(xiàn)Python爬取門(mén)戶論壇評(píng)論,附含圖片示例代碼,講解了詳細(xì)的操作過(guò)程,有需要的的朋友可以借鑒參考下,希望可以有所幫助2021-09-09
Python中apply函數(shù)的用法實(shí)例教程
這篇文章主要介紹了Python中apply函數(shù)的用法,配合實(shí)例解說(shuō),可加深讀者對(duì)apply函數(shù)的理解,需要的朋友可以參考下2014-07-07

