吳友蘭 胡冬琴 石俊峰


摘要:本文介紹兩種快速搭建人臉識別系統的方法。一種設計方法以OpenCV視覺庫為核心的人臉識別系統,我們將攝像頭采集的人的面部圖像進行灰度化處理、特征值計算,并在此基礎上訓練出待測人臉的數據模型,然后對數據進行分析處理,用以識別出人臉。另一種方法是基于百度云API進行人臉檢測,我們靈活利用百度云提供的大量模塊化接口,可快速完成相關的開發,大大縮短開發周期。
關鍵詞:人臉識別; OpenCV; 人工智能; 嵌入式;
一、引言
人臉識別是獲得人的眼、口、鼻輪廓,從而識別多種人臉屬性。它實現從輸入的人臉圖像或視頻流中檢測和跟蹤人臉,首先判斷其是否存在人臉,如果存在人臉就進行預處理,切割出其中的人臉照片,然后再給出每個人臉的位置、大小和各個主要面部器官的位置信息。最后依據這些信息,進一步提取每個人臉中所包含的身份特征數據,并將其與已知的人臉庫中人臉進行對比,從而識別不同人臉的身份。人臉識別作為一種生物識別技術,具有非強制性、非接觸性、并發性等特點,已經廣泛應用于各行各業。
下面我們介紹二種方法用以快速搭建人臉識別系統,可以把它加載到現有的項目中快速實現人臉比對、人臉識別功能。我們的程序設計都采用了python語言來實現,如圖1列出了人臉識別系統框圖。
在很多設計開發項目中,我們需要通過人臉的比對來進行身份的驗證。當前主流的人臉識別算法,在進行人臉比對時,主要依靠人臉特征值的比對。所謂特征值,即面部特征所組成的信息集,人工智能算法可以很精確的辨別和記住面部特征,從而實現人臉比對,人臉識別。
人臉識別就是給定一張臉,判斷這張臉是誰。人臉識別是需要識別人的的人臉特征與數據庫中已獲取到的人臉特征模板進行比對,根據所比較的相似程度對人臉的身份信息進行判斷。我們介紹二種方法來快速實現人臉識別和人臉比對。人臉識別步驟包括數據收集和預處理、訓練模型、人臉識別三個部分。第一種方法是在本地拍攝待測人臉大約30張照片,照片在不同時間、不同光照、不同表情(睜眼閉眼、笑或者不笑)、不同人臉細節(戴眼鏡或者不戴眼鏡)下進行采集。然后用OpenCV中FaceRecognizer類對收集的待測人臉照片數據進行人臉檢測和訓練生成人臉數據集.yml文件,利用生成的.vml模型文件來實現人臉識別。第二種方法是將自己的照片上傳到百度云平臺上,由百度云平臺負責收集你的臉部特征和對模型的訓練,并將你攝像頭中所錄取的照片與人臉庫比對從而實現人臉識別的功能。
第一種方法我們利用OpenCV中提供的人臉識別算法來實現人臉檢測識別。OpenCV的全稱是Open Source Computer Vision Library,是一個開放源代碼的計算機視覺庫,可以運行多種操作系統上,我們可以利用OpenCV快速的實現端對端的人臉識別。
實現步驟包括下面三步:
第一步:人臉數據圖片的收集和預處理
數據的收集和預處理就是在得到待測人臉照片之后,對圖片上的人臉進行檢測和分割并添加數據標簽。
執行步驟包括:
1.加載分類器,我們調用opencv中提供的“haarcascade_frontalface_alt2.xml”分類器文件,它對人臉的檢測準確率和速度都比較好。
2.調用detectMultiScale()函數檢測,調整函數的參數可以使檢測結果更加精確。
3.把檢測到的人臉用矩形畫出來。
4. 記錄每一個人臉對應的標簽,就是為每一個人姓名編號。
實現人臉檢測的核心代碼如下:
face_detect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces=face_detect.detectMultiScale(image_gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5)) # 檢測人臉
for (x, y, width, height) in faces:# 根據檢測結果繪制矩形框
cv2.rectangle(image, (x, y), (x + width, y + height), (255, 0, 0), 2)
cv2.imwrite("dataset/User."+str(face_id)+'.'+str(count)+".jpg",gray[y:y+h,x:x+w])# 記錄人臉標簽
第二步:訓練模型,圖2是訓練人臉模型流程圖如下:
通過樣本和類別標簽進行訓練,得到訓練好的人臉模型,將模型保存為.xml文件。
現在待測人臉數據集準備好了,接下來就是訓練模型了。這里我們用到了opencv的Facerecognizer類。FaceRecognizer類主要包含了三種人臉識別的方法:基于PCA變換的、基于Fisher變換的和基于局部二值模式的三種方法。
LBPH(Local Binary Pattern Histogram)將檢測到的人臉分為若干個小單元,并將每個小單元與模型中的對應單元進行比較,對每個區域進行匹配,由所獲得的匹配值產生直方圖。由于這種方法的靈活性,LBPH是唯一允許模型樣本人臉和檢測到的人臉在形狀、大小上可以不同的人臉識別算法。
我們從數據集中獲取所有用戶數據,并調用train函數進行并“訓練”產生OpenCV 識別器。訓練結束后,會產生一個 .yml 的模型文件,該文件將保存在“trainer/”目錄中,供我們后面做人臉識別測試時用。
第三步:人臉識別、人臉測試
在模型訓練好之后我們拿數據集中的最后幾張圖片做一個測試,根據獲得的confidence值確定測試結果。
調整后的區域中調用 predict()函數, 該函數返回兩個元素的數組:
第一個元素是所識別個體的標簽, 第二個是置信度評分。 所有的算法都有一個置信度評分閾值,置信度評分用來衡量所識別人臉與原模型的差距, 0 表示完全匹配。 可能有時不想保留所有的識別結果,則需要進一步處理,因此可用自己的算法來估算識別的置信度評分。 LBPH一個好的識別參考值要低于 50,任何高于 80 的參考值都會被認為是低的置信度評分。
第二種方法我們調用百度提供的開放人臉api接口,幫助我們快速在自己的系統中集成人臉識別的功能,而且這個接口可以無限次調用。由于嵌入式開發系統的性能限制,運行神經網絡來進行人臉模型的訓練識別的難度較大,在嵌入式系統的開發中一般采用了百度提供的開源的人臉識別SDK來進行人臉的識別和檢測。
開發步驟如下:
1.在百度智能云上申請注冊,先獲取APPID、API Key和secret key,添加人臉識別功能。
2.下載Python HTTP? SDK安裝百度的api。
輸入以下代碼安裝:pip install baidu-aip
python setup.py install
3.新建分組
4.在分組中創建用戶,用戶名zhangsan,并且添加自己人臉照片進去,如在光線條件充足的條件下的正面照、側面照片,以便識別時能準確識別。
5.訪問API接口,上傳圖片的URL。
6.獲取返回的信息數據
7.操作返回的信息數據
利用百度云實現人臉識別的核心代碼如下:
import cv2
import urllib.request
import base64
import time
#百度人臉識別API賬號信息
APP_ID = ‘添加自己創建的百度APPID
API_KEY = ‘添加自己創建的百度API Key
SECRET_KEY =添加自己創建的百度secret key ‘
client = AipFace(APP_ID, API_KEY, SECRET_KEY)#創建一個客戶端用以訪問百度云
#圖像編碼方式
IMAGE_TYPE=BASE64
def go_api(image):
result = client.search(str(image, ‘utf-8), IMAGE_TYPE, GROUP);
if result[‘error_msg] == ‘SUCCESS:
name = result[‘result][‘user_list][0][‘user_id]
score = result[‘result][‘user_list][0][‘score]
if score > 80:#如果相似度大于80
if name == ‘zhangsan:
print(“歡迎%s !” % name)
time.sleep(3)
return 1
else:
print(“對不起,我不認識你!”)
name = ‘Unknow
return 0
while True:
print(‘準備)
if True:
getimage()#拍照
img = transimage()#轉換照片格式
res = go_api(img)#將轉換了格式的圖片上傳到百度云
time.sleep(3)
以上兩種方法都可以快速實現人臉識別系統的開發,可識別單張,多張人臉圖片。我們可以根據項目的需要自行選擇一種方法來實現人臉識別,后期我們可以將計算機視覺庫移值到嵌入式系統中,可以利用計算機視覺技術實現監控設備、醫療設備、機器人設備等產品的開發。
作者單位:吳友蘭? ? 胡冬琴? ? 石俊峰? ? 北京電子科技職業學院
參? 考? 文? 獻
[1]楊軍,張岳,劉燕峰.基于Python語言的數據挖掘課程的建設與研究[J].科技風,2021(14):80-82.
[2]高雙喜,曹淑服.基于人臉識別的門禁系統設計[J].河北省科學院學報,2012,29(1).
[3]郝立濤,陳書旺,唐鴻武.基于人臉識別的門禁系統設計[J].河北工業科技,2009,26(5):339-341.
[4]張玉榮,王強強,吳瓊,等. 基于Python-OpenCV圖像處理技術的小麥不完善粒識別研究[J]. 河南工業大學學報(自然科學版),2021,42(6):1-13.