程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python使用face_recognition庫實現人臉識別案例

編輯:Python

本項目使用face_recognition庫編寫一個簡單的python程序,實現人臉識別。這個庫是基於深度學習技術,希望盡量用最方便最簡單的方式實現人臉識別,只要使用一張圖片進行訓練就能從大量的人臉數據找到驗證者對應的身份,准確率達96%。

一、face_recognition介紹

face_recognition是一個人臉識別開源庫,是在深度學習框架dlib上做的整合。通過 Python 語言將它封裝為一個非常簡單就可以實現人臉識別的 API 庫,屏蔽了人臉識別的算法細節,大大降低了人臉識別功能的開發難度。
關於face_recognition庫中的相關API說明見下表。

api說明load_image_file將img文件加載到numpy 數組中face_locations查找圖像中所有面部和所有面部特征的位置batch_face_locations批次人臉定位函數(GPU)face_encodings圖像編碼轉為特征向量compare_faces特征向量比對)face_landmarks人臉特征提取函數face_distance計算特征向量差值

二、實驗准備

1.庫安裝
(1)安裝人臉識別庫dlib庫,一般安裝方法如下:

pip install dlib

如果安裝出錯,可以詳見之前寫過的博客
Dlib庫安裝方法
(2)安裝實際的人臉識別庫face_recognition,安裝方法如下:

pip install face_recognition

(3)安裝opencv庫,安裝方法如下:

pip install opencv

2.實現代碼
程序說明:該程序實現了調用攝像頭拍攝一張人臉圖像,以“img.jpg”命名並保存到桌面。然後利用face_recognition函數中load_image_file指令將圖片文件加載到numpy 數組中,利用face_encodings指令將圖像編碼轉為特征向量。同樣的方法遍歷人臉數據庫face文件夾裡面的每一張圖片,然後將文件的圖像編碼轉為特征向量。

#人臉檢測的程序,測試一張訓練的圖片,然後從文件夾中獲取所有的圖片進行人臉對比,獲取同一個人臉的圖片
import cv2
import face_recognition
import os
#拍攝照片函數
def get_photo():
capture = cv2.VideoCapture(0, cv2.CAP_DSHOW) #打開攝像頭
ref,frame=capture.read() #將攝像頭中的一幀數據保存下來
img = "C:/Users/cos(Lin)/Desktop/img.jpg" #給拍攝的圖片命名,保存到指定的路經
cv2.imwrite(img,frame) #將圖片保存下來
#cv2.imshow(img,frame)
capture.release() #關閉攝像頭
return img #返回圖片數據
#load_image_file加載人臉圖像
img_modi = face_recognition.load_image_file(get_photo()) #參數調用拍照函數,獲取一張驗證者的圖像
img_modi_rgb =cv2.cvtColor(img_modi,cv2.COLOR_BGR2RGB) #圖像類型轉換函數
#給定一個圖像,返回圖像中每個面的128維人臉編碼
train_encode = face_recognition.face_encodings(img_modi)[0] #編碼
#返回face文件夾裡面的內容,要從人臉庫face文件夾中,獲取驗證者的身份
pathDir = os.listdir("C:/Users/cos(Lin)/Desktop/face/") #返回的是文件夾裡的每一張圖片
flag = 0 #標志位
#測試另外一張圖像
for i in pathDir: #遍歷6張圖片
test = face_recognition.load_image_file("C:/Users/cos(Lin)/Desktop/face/" + i) #將文件夾裡的每一張圖片打開
test = cv2.cvtColor(test,cv2.COLOR_BGR2RGB) #將文件夾裡的每一張圖片進行轉換
test_encode = face_recognition.face_encodings(test)[0] #將圖像編碼
#compare_faces比較臉部編碼列表和候選編碼,看看它們是否匹配
s = face_recognition.compare_faces([train_encode],test_encode,tolerance=0.49) #參數tolerance是兩張臉之間有多少距離才算匹配。該值越小對比越嚴格,0.6是典型的最佳值
#print(s,type(s)) #打印類型
if s == [True] : #如果匹配成功則返回的是布爾型列表裡的True
flag = 1 #成功的話將標志位賦值為1
break #直接跳出循環
else:
flag = 0 #沒有匹配成功則標志位為0
if flag ==1:
print("第幾張照片是:" , i) #輸出對比結果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved