訂閱
糾錯
加入自媒體

使用Python的人臉識別系統(tǒng)

介紹

人臉識別不同于人臉檢測。在人臉檢測中,我們只檢測了人臉的位置,在人臉識別任務(wù)中,我們識別了人的身份。

在本文中,我們將在人臉識別庫的幫助下,使用python構(gòu)建一個人臉識別系統(tǒng)。

市場上有許多用于人臉識別的算法。這一計(jì)算機(jī)視覺挑戰(zhàn)是從視頻和圖片中檢測人臉。許多應(yīng)用程序可以構(gòu)建在識別系統(tǒng)之上。許多大公司出于安全和身份驗(yàn)證的目的而采用識別系統(tǒng)。

識別系統(tǒng)用例

人臉識別系統(tǒng)在現(xiàn)代得到廣泛應(yīng)用,許多新的創(chuàng)新系統(tǒng)都建立在識別系統(tǒng)之上。

有幾個用例:

尋找失蹤者識別社交媒體上的帳戶識別汽車中的駕駛員考勤系統(tǒng)

多種實(shí)現(xiàn)面部識別的算法取決于其性能和準(zhǔn)確性。

傳統(tǒng)人臉識別算法

傳統(tǒng)的人臉識別算法不符合現(xiàn)代人臉識別標(biāo)準(zhǔn)。它們旨在使用舊的傳統(tǒng)算法識別面部。

OpenCV 提供了一些傳統(tǒng)的面部識別算法。

image.png

這些方法在提取圖像信息和匹配輸入和輸出圖像的方式上有所不同。

LBPH 算法是一種簡單但非常有效的方法,仍在使用中,但與現(xiàn)代算法相比速度較慢。

人臉識別深度學(xué)習(xí)

有多種基于深度學(xué)習(xí)的面部識別算法可供使用。

DeepFaceDeepID series of systemsFaceNetVGGFace

一般來說,基于地標(biāo)的人臉識別器對人臉圖像進(jìn)行拍攝,并試圖找到眉毛、嘴角、眼睛、鼻子、嘴唇等基本特征點(diǎn)。有60多個地標(biāo)。

人臉識別涉及的步驟

1.人臉檢測:定位人臉,記下每個人臉定位的坐標(biāo),并在每個人臉周圍繪制一個邊界框。

2.面部對齊。標(biāo)準(zhǔn)化人臉以獲得快速訓(xùn)練。

3.特征提取。從面部圖片中提取局部特征進(jìn)行訓(xùn)練,這一步由不同的算法執(zhí)行不同的操作。

4.人臉識別。將輸入人臉與我們數(shù)據(jù)集中的一個或多個已知人臉進(jìn)行匹配。

本文重點(diǎn)介紹使用庫 face_recognition 實(shí)現(xiàn)人臉識別,該庫基于深度學(xué)習(xí)技術(shù),并承諾使用單個訓(xùn)練圖像的準(zhǔn)確率超過 96%。

執(zhí)行

使用python實(shí)現(xiàn)人臉識別系統(tǒng)。使用 face_recognition 庫實(shí)現(xiàn)基于深度學(xué)習(xí)的人臉識別系統(tǒng)。

1. 設(shè)置人臉識別庫:

為了安裝人臉識別庫,我們需要先安裝dlib

· dlib:它是一個現(xiàn)代 C++ 工具包,包含與機(jī)器學(xué)習(xí)相關(guān)的算法和工具。

# installing dlib

pip install dlib

· 安裝實(shí)際的人臉識別庫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)入庫

import cv2

import numpy as np

import face_recognition

2. 加載圖片:

我們完成了庫的安裝和導(dǎo)入。是時(shí)候?qū)⒁恍┦纠龍D像加載到face_recognition庫中了。

該face_recognition庫僅支持 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.檢測和定位人臉:

face_recognition庫可以自行快速定位人臉,我們不需要使用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. 樣本圖像識別:

該face_recognition庫基于深度學(xué)習(xí),它支持單次學(xué)習(xí),這意味著它需要一張圖片來訓(xùn)練自己檢測一個人。

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)閮蓮堈掌际峭粋人,所以它返回了true。

face_recognition.face_encodings(imgelon)[0]→返回傳遞圖像的編碼。

face_recognition.compare_faces([train_encode],test_encode) 獲取經(jīng)過訓(xùn)練的編碼列表和未知圖像的測試編碼。如果兩個測試編碼在訓(xùn)練編碼中匹配,則返回True ;否則,它會返回False.

了解人臉識別的工作原理

1.我們將人的照片和他們的名字傳遞給模型。

2.該模型拍攝每張照片,將它們轉(zhuǎn)換為某種數(shù)字編碼,并將它們存儲在一個列表中,并將所有標(biāo)簽(人名)存儲在另一個列表中。

3.在預(yù)測階段,當(dāng)我們傳遞未知人的圖片時(shí),識別模型會將該人的圖像轉(zhuǎn)換為編碼。

4.在將未知人的圖像轉(zhuǎn)換為編碼后,它會嘗試根據(jù)距離參數(shù)找到最相似的編碼。與未知人的編碼距離最小的編碼將是最接近的匹配。

5.在獲得最接近的匹配編碼后,我們從該列表中獲取該編碼的索引并使用索引。我們找到檢測到的人的名字。

識別系統(tǒng)的挑戰(zhàn)

這些都是識別系統(tǒng)面臨的重大挑戰(zhàn),需要解決。

· 姿勢:識別系統(tǒng)容易受到人體姿勢的影響。面部識別系統(tǒng)將無法預(yù)測該人的面部是否不可見。

· 照明:照明會極大地改變面部輪廓。用于人臉識別的照片應(yīng)在適當(dāng)?shù)恼彰鳁l件下拍攝。

· 面部表情:不同的面部表情會導(dǎo)致對同一個人的圖像的不同預(yù)測。

· 低分辨率:低分辨率圖片包含的信息較少,因此不適合人臉識別訓(xùn)練。

結(jié)論

本文討論了如何使用 python 和單次圖像訓(xùn)練技術(shù)實(shí)現(xiàn)人臉識別系統(tǒng)。你可以進(jìn)一步使用像 python Tkinter 這樣的 GUI 來設(shè)計(jì)基于 GUI 的考勤系統(tǒng)。我們看到了影響識別系統(tǒng)的各種挑戰(zhàn)以及如何解決這些挑戰(zhàn)。


       原文標(biāo)題 : 使用Python的人臉識別系統(tǒng)

聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯
x
*文字標(biāo)題:
*糾錯內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號