◆梁晶 史記征
基于Python庫的人臉識別方法研究
◆梁晶 史記征
(重慶安全技術(shù)職業(yè)學(xué)院 重慶 404020)
人臉識別技術(shù)經(jīng)過幾十年的發(fā)展,已成為計算機(jī)視覺領(lǐng)域的一個研究熱點(diǎn)。隨著人臉識別算法的趨于成熟,人臉識別技術(shù)已經(jīng)在公安、支付、身份驗(yàn)證、美顏相機(jī)等領(lǐng)域得到了非常廣泛的應(yīng)用。本文利用Python語言的第三方庫,通過機(jī)器深度學(xué)習(xí)實(shí)現(xiàn)人臉識別,該方法具有編程簡單、易于實(shí)現(xiàn)、準(zhǔn)確率高等優(yōu)勢。
人臉識別;Python語言;dlib庫
人臉是一個人在社會交往中最重要的特征,是確定一個人身份的最重要的方法,研究人臉識別具有重要的理論價值和應(yīng)用價值。人臉識別是通過生物特征對人的身份進(jìn)行辨認(rèn),是計算機(jī)視覺領(lǐng)域的一個研究方向。人臉識別研究起源于20世紀(jì)60年代,由Bledsoe和Chen最先提出。
通過對一個人面部的觀察可以獲得很多信息,比如:性別、心情、年齡、健康狀況等。人臉檢測是一個特別復(fù)雜的過程,根據(jù)所選檢測系統(tǒng)的不同,使用到的檢測算法、原理以及編程語言等也會相對應(yīng)的不相同,但歸納起來大致都可以分為以下幾個流程:
(1)人臉檢測:這個流程主要完成的工作是從所給圖像信息中檢測出人臉,同時將關(guān)鍵點(diǎn)的位置范圍進(jìn)行反饋。
(2)人臉規(guī)范化:由于人臉在不同的圖像像素和光照強(qiáng)度等問題下顯像程度是不一樣的,所以需要在上一步的基礎(chǔ)上對此進(jìn)行校正。
(3)人臉特征提取:完成校正后,對識別到的較清晰的人臉進(jìn)行特征提取。
(4)人臉識別:這一步是人臉檢測的最后一步,就是把前面提取出來的人臉特征與數(shù)據(jù)庫中已有的人臉特征進(jìn)行匹配,進(jìn)行人臉識別。具體識別過程如圖1所示。
本文所使用的Python第三方庫dlib是基于深度學(xué)習(xí)進(jìn)行人臉識別的。
圖1 人臉識別過程
dlib庫一個機(jī)器學(xué)習(xí)的開源庫,解決包含機(jī)器學(xué)習(xí)算法以及開發(fā)復(fù)雜軟件的現(xiàn)實(shí)問題,它被廣泛應(yīng)用在工業(yè)和學(xué)術(shù)研究領(lǐng)域,包括機(jī)器人、嵌入式設(shè)備、移動手機(jī)以及大規(guī)模高性能計算環(huán)境中。它的主要特點(diǎn)有:文檔說明全、代碼質(zhì)量高,包含機(jī)器學(xué)習(xí)算法、科學(xué)計算算法、圖模型推理算法、圖像處理、網(wǎng)絡(luò)編程、圖形用戶接口、數(shù)據(jù)壓縮與整合算法等。
Python第三方庫最常用的安裝方式是通過pip命令。作為Python的內(nèi)置命令,pip需要通過命令行執(zhí)行。dlib庫的安裝命令是:pip install dlib。
本研究共涉及4種不同類型的文件:人臉關(guān)鍵點(diǎn)檢測器文件1.dat,人臉識別模型文件2.dat;候選人臉文件girl1.jpg、girl2.jpg、girl3.jpg、girl4.jpg、girl5.jpg、girl6.jpg;需要識別的人臉圖像文件test1.jpg、test2.jpg、test3.jpg、test4.jpg;Python腳本文件girl-face-rec.py。1.dat、2.dat可以從http://dlib.net/files/下載獲得;模型數(shù)據(jù)文件是用來估計人臉上68個特征點(diǎn)(x, y)的坐標(biāo)位置,這68個坐標(biāo)點(diǎn)的位置如圖2所示;候選人臉文件如圖3所示;需要識別的人臉圖像文件如圖4所示。
圖2 人臉特征坐標(biāo)
圖3 候選人臉圖像
圖4 待識別的人臉圖像
從圖4可以看出:test1.jpg、test2.jpg和候選文件中的本人看起來有很大差別,test3.jpg是候選人中的原圖,test4.jpg中的女孩微微側(cè)臉,并且左臉有明顯黑色陰影。
基于以上分析和處理,人臉識別的相關(guān)數(shù)據(jù)已經(jīng)準(zhǔn)備完成,那么就可以通過編寫程序完成人臉識別了。其中人臉識別的大致流程如下:
(1)在對候選人進(jìn)行人臉檢測、關(guān)鍵點(diǎn)提取、描述子生成后,把候選人描述子保存起來。
(2)然后對測試人臉進(jìn)行人臉檢測、關(guān)鍵點(diǎn)提取、描述子生成。
(3)最后求測試圖像人臉描述子和候選人臉描述子之間的歐氏距離,距離最小者判定為同一個人。
#文件名: girl-face-rec py
#-*-coding:UHF-8-*-
import sys, os, dlib, glob, umpyfrom skimage
import io
if len(sys. argv)!=5:
print"請檢查參數(shù)是否正確”
exit()
predictor_path=sys.argv[1]
face_rec_model_path=sys. argv[2]
faces_folder_path=sys. argv[3]
img_path=sys. argv[4]
detector= dlib.get_frontal_face detector()
sp =dlib_shape_predictor(predictor_path)
facerec=
dlib face_recognition_model_vl(face_rec_mo
del_path)
descriptors=[]
for f in
glob glob(os path. join(faces_folder_path,
“*.jpg”)):
print(“Processing file:{}”.format(f))
img=io.imread(f)
dets=detector(img,1)
print(“Number of faces detected:
{}”.format(len(dets)))
for k, d in enumerate(dets):
shape=sp(img,d)
face descriptor=
facerec.compute_face_descriptor(img, shape)
v=numpy.array(face_descriptor)
descriptors.append(v)
img=io.imread(img_path)
dets=detector(img, 1)
dist=[]for k,d in enumerate(dets):
shape=sp(img, d)
face_descriptor=
facerec.compute_face_descriptor(img, shape)
d_test=numpy.array(face_descriptor)
for i in descriptors:
dist_=numpy.linalg.norm(i-d_test)
dist.append(dist_)
candidate=
[‘Unknown1’, ‘Unknown2’, ‘Shishi’, ‘Unknown4’
‘Bingbing’, ‘Feifei’]
c_d=dict(zip(candidate,dist))
cd_sorted=sorted(c_d.iteritems(),
key=lambda d:d [1])print” The person is:
“, cd_sorted[0][0]
dlib.hit_enter_to_continue()
分別運(yùn)行如下命令:
(1)python girl-face-rec.py 1.dat
2.dat./candidate-faces testl.jpg
(2)python girl-face-rec.py 1.dat
2.dat./candidate-faces test2.jpg
(3)python girl-face-rec.py 1.dat
2.dat./candidate-faces test3.jpg
(4)python girl-face-rec.py 1.dat
2.dat./candidate-faces test4.jpg
通過運(yùn)行結(jié)果可知:test1.jpg、test2.jpg、test3.jpg測試結(jié)果完全正確。但是測試圖片test4.jpg的輸出結(jié)果顯示是候選人girl4.jpg,識別存在一定的錯誤率。
利用Python的dlib庫可以實(shí)現(xiàn)人臉識別功能,編程簡單、準(zhǔn)確度高。但由于每個人臉有68個特征值,假如已知人臉圖片過多,特征值庫將較大,歐式距離的計算將消耗較長時間,所以需要引入并行計算技術(shù),以提高人臉識別效率。
[1]聶晶. Python在大數(shù)據(jù)挖掘和分析中的應(yīng)用優(yōu)勢[J].廣西民族大學(xué)學(xué)報, 2018, 24 (1) : 76-79.
[2]嚴(yán)婷,欣秀,趙嘉豪,等.基于Python 的可視化數(shù)據(jù)分析平臺設(shè)計與實(shí)現(xiàn)[J].計算機(jī)時代, 2017,(12) : 54-56.
[3]鄒國鋒,傅桂霞,李海濤,高明亮,王科俊.多姿態(tài)人臉識別綜述[J].模式識別與人工智能, 2015,28(07):613-625.
[4]胡敏,程天梅,王曉華.融合全局和局部特征的人臉識別[J].電子測量與儀器學(xué)報, 2013,27(09):817.
[5]Mark Summerfield著.王弘博,孫傳慶譯.Python3程序開發(fā)指南(第2版)[M].人民郵電出版社, 2015:427-444.
2018年重慶市高等職業(yè)教育雙基地建設(shè)重慶安全技術(shù)職業(yè)學(xué)院“大數(shù)據(jù)與物聯(lián)網(wǎng)融合實(shí)訓(xùn)基地”項(xiàng)目支持。