使用Python的人臉識(shí)別系統(tǒng)
介紹
人臉識(shí)別不同于人臉檢測(cè)。在人臉檢測(cè)中,我們只檢測(cè)了人臉的位置,在人臉識(shí)別任務(wù)中,我們識(shí)別了人的身份。
在本文中,我們將在人臉識(shí)別庫(kù)的幫助下,使用python構(gòu)建一個(gè)人臉識(shí)別系統(tǒng)。
市場(chǎng)上有許多用于人臉識(shí)別的算法。這一計(jì)算機(jī)視覺挑戰(zhàn)是從視頻和圖片中檢測(cè)人臉。許多應(yīng)用程序可以構(gòu)建在識(shí)別系統(tǒng)之上。許多大公司出于安全和身份驗(yàn)證的目的而采用識(shí)別系統(tǒng)。
識(shí)別系統(tǒng)用例
人臉識(shí)別系統(tǒng)在現(xiàn)代得到廣泛應(yīng)用,許多新的創(chuàng)新系統(tǒng)都建立在識(shí)別系統(tǒng)之上。
有幾個(gè)用例:
尋找失蹤者識(shí)別社交媒體上的帳戶識(shí)別汽車中的駕駛員考勤系統(tǒng)
多種實(shí)現(xiàn)面部識(shí)別的算法取決于其性能和準(zhǔn)確性。
傳統(tǒng)人臉識(shí)別算法
傳統(tǒng)的人臉識(shí)別算法不符合現(xiàn)代人臉識(shí)別標(biāo)準(zhǔn)。它們旨在使用舊的傳統(tǒng)算法識(shí)別面部。
OpenCV 提供了一些傳統(tǒng)的面部識(shí)別算法。
這些方法在提取圖像信息和匹配輸入和輸出圖像的方式上有所不同。
LBPH 算法是一種簡(jiǎn)單但非常有效的方法,仍在使用中,但與現(xiàn)代算法相比速度較慢。
人臉識(shí)別深度學(xué)習(xí)
有多種基于深度學(xué)習(xí)的面部識(shí)別算法可供使用。
DeepFaceDeepID series of systemsFaceNetVGGFace
一般來(lái)說(shuō),基于地標(biāo)的人臉識(shí)別器對(duì)人臉圖像進(jìn)行拍攝,并試圖找到眉毛、嘴角、眼睛、鼻子、嘴唇等基本特征點(diǎn)。有60多個(gè)地標(biāo)。
人臉識(shí)別涉及的步驟
1.人臉檢測(cè):定位人臉,記下每個(gè)人臉定位的坐標(biāo),并在每個(gè)人臉周圍繪制一個(gè)邊界框。
2.面部對(duì)齊。標(biāo)準(zhǔn)化人臉以獲得快速訓(xùn)練。
3.特征提取。從面部圖片中提取局部特征進(jìn)行訓(xùn)練,這一步由不同的算法執(zhí)行不同的操作。
4.人臉識(shí)別。將輸入人臉與我們數(shù)據(jù)集中的一個(gè)或多個(gè)已知人臉進(jìn)行匹配。
本文重點(diǎn)介紹使用庫(kù) face_recognition 實(shí)現(xiàn)人臉識(shí)別,該庫(kù)基于深度學(xué)習(xí)技術(shù),并承諾使用單個(gè)訓(xùn)練圖像的準(zhǔn)確率超過(guò) 96%。
執(zhí)行
使用python實(shí)現(xiàn)人臉識(shí)別系統(tǒng)。使用 face_recognition 庫(kù)實(shí)現(xiàn)基于深度學(xué)習(xí)的人臉識(shí)別系統(tǒng)。
1. 設(shè)置人臉識(shí)別庫(kù):
為了安裝人臉識(shí)別庫(kù),我們需要先安裝dlib
· dlib:它是一個(gè)現(xiàn)代 C++ 工具包,包含與機(jī)器學(xué)習(xí)相關(guān)的算法和工具。
# installing dlib
pip install dlib
· 安裝實(shí)際的人臉識(shí)別庫(kù)face recognition。
# installing face recognition
pip install face recognition
· Opencv用于一些圖像預(yù)處理
# installing opencv
pip install opencv
Note: Sometimes installing dlib throws error in that case install install the C++ development toolkit using vs_code community .
導(dǎo)入庫(kù)
import cv2
import numpy as np
import face_recognition
2. 加載圖片:
我們完成了庫(kù)的安裝和導(dǎo)入。是時(shí)候?qū)⒁恍┦纠龍D像加載到face_recognition庫(kù)中了。
該face_recognition庫(kù)僅支持 BGR 格式的圖像。在打印輸出圖像時(shí),我們應(yīng)該使用 OpenCV 將其轉(zhuǎn)換為 RGB。
Face_recognition僅加載 BGR 格式的圖像。
import cv2
import numpy as np
import face_recognition
img_bgr = face_recognition.load_image_file('student_images/modi.jpg')
img_rgb = cv2.cvtColor(img_bgr,cv2.COLOR_BGR2RGB)
cv2.imshow('bgr', img_bgr)
cv2.imshow('rgb', img_rgb)
cv2.waitKey
輸出→ BGR 與 RGB
3.檢測(cè)和定位人臉:
face_recognition庫(kù)可以自行快速定位人臉,我們不需要使用haar_cascade或其他技術(shù)。
img_modi=face_recognition.load_image_file('student_images/modi.jpg')
img_modi_rgb = cv2.cvtColor(img_modi,cv2.COLOR_BGR2RGB)
#--------- Detecting Face -------
face = face_recognition.face_locations(img_modi_rgb)[0]
copy = img_modi_rgb.copy()
# ------ Drawing bounding boxes around Faces------------------------
cv2.rectangle(copy, (face[3], face[0]),(face[1], face[2]), (255,0,255), 2)
cv2.imshow('copy', copy)
cv2.imshow('MODI',img_modi_rgb)
cv2.waitKey(0)
4. 樣本圖像識(shí)別:
該face_recognition庫(kù)基于深度學(xué)習(xí),它支持單次學(xué)習(xí),這意味著它需要一張圖片來(lái)訓(xùn)練自己檢測(cè)一個(gè)人。
img_modi = face_recognition.load_image_file('student_images/modi.jpg')
img_modi = cv2.cvtColor(img_modi,cv2.COLOR_BGR2RGB)
#------to find the face location
face = face_recognition.face_locations(img_modi)[0]
#--Converting image into encodings
train_encode = face_recognition.face_encodings(img_modi)[0]
#----- lets test an image
test = face_recognition.load_image_file('student_images/modi2.jpg')
test = cv2.cvtColor(test, cv2.COLOR_BGR2RGB)
test_encode = face_recognition.face_encodings(test)[0]
print(face_recognition.compare_faces([train_encode],test_encode))
cv2.rectangle(img_modi, (face[3], face[0]),(face[1], face[2]), (255,0,255), 1)
cv2.imshow('img_modi', img_modi)
cv2.waitKey(0)
上面的代碼拍了兩張總理的照片,因?yàn)閮蓮堈掌际峭粋(gè)人,所以它返回了true。
face_recognition.face_encodings(imgelon)[0]→返回傳遞圖像的編碼。
face_recognition.compare_faces([train_encode],test_encode) 獲取經(jīng)過(guò)訓(xùn)練的編碼列表和未知圖像的測(cè)試編碼。如果兩個(gè)測(cè)試編碼在訓(xùn)練編碼中匹配,則返回True ;否則,它會(huì)返回False.
了解人臉識(shí)別的工作原理
1.我們將人的照片和他們的名字傳遞給模型。
2.該模型拍攝每張照片,將它們轉(zhuǎn)換為某種數(shù)字編碼,并將它們存儲(chǔ)在一個(gè)列表中,并將所有標(biāo)簽(人名)存儲(chǔ)在另一個(gè)列表中。
3.在預(yù)測(cè)階段,當(dāng)我們傳遞未知人的圖片時(shí),識(shí)別模型會(huì)將該人的圖像轉(zhuǎn)換為編碼。
4.在將未知人的圖像轉(zhuǎn)換為編碼后,它會(huì)嘗試根據(jù)距離參數(shù)找到最相似的編碼。與未知人的編碼距離最小的編碼將是最接近的匹配。
5.在獲得最接近的匹配編碼后,我們從該列表中獲取該編碼的索引并使用索引。我們找到檢測(cè)到的人的名字。
識(shí)別系統(tǒng)的挑戰(zhàn)
這些都是識(shí)別系統(tǒng)面臨的重大挑戰(zhàn),需要解決。
· 姿勢(shì):識(shí)別系統(tǒng)容易受到人體姿勢(shì)的影響。面部識(shí)別系統(tǒng)將無(wú)法預(yù)測(cè)該人的面部是否不可見。
· 照明:照明會(huì)極大地改變面部輪廓。用于人臉識(shí)別的照片應(yīng)在適當(dāng)?shù)恼彰鳁l件下拍攝。
· 面部表情:不同的面部表情會(huì)導(dǎo)致對(duì)同一個(gè)人的圖像的不同預(yù)測(cè)。
· 低分辨率:低分辨率圖片包含的信息較少,因此不適合人臉識(shí)別訓(xùn)練。
結(jié)論
本文討論了如何使用 python 和單次圖像訓(xùn)練技術(shù)實(shí)現(xiàn)人臉識(shí)別系統(tǒng)。你可以進(jìn)一步使用像 python Tkinter 這樣的 GUI 來(lái)設(shè)計(jì)基于 GUI 的考勤系統(tǒng)。我們看到了影響識(shí)別系統(tǒng)的各種挑戰(zhàn)以及如何解決這些挑戰(zhàn)。
原文標(biāo)題 : 使用Python的人臉識(shí)別系統(tǒng)

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺(tái)
- 5 國(guó)產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來(lái)商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽(yáng)光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長(zhǎng)空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營(yíng)收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?