衡友躍
摘要:考場傳統(tǒng)的人工核驗(yàn)身份存在效率低、人為因素大等弊端,設(shè)計(jì)實(shí)現(xiàn)了一種考場人臉識別系統(tǒng),該系統(tǒng)基于PCA算法,在OpenCV中實(shí)現(xiàn),測試達(dá)到預(yù)期效果,為考試提供了有力支持.
關(guān)鍵詞:人臉識別;PCA;OpenCV
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:1673-260X(2019)03-0051-03
基于視頻的考生異常行為識別的第一步識別考生身份,傳統(tǒng)的人工核驗(yàn)身份證和準(zhǔn)考證效率低,出錯(cuò)率高.針對當(dāng)前現(xiàn)狀,本文設(shè)計(jì)了考場人臉識別系統(tǒng),為考生異常行為識別奠定基礎(chǔ).
1 考生臉部圖像獲取及處理
在考生人臉識別之前,需要先進(jìn)行考生面部圖像的獲取.為防止學(xué)生替考,要求用二代身份證核驗(yàn)身份,通過拍攝二代身份證上的照片提取面部圖像.拍照的角度,拍照時(shí)的光線強(qiáng)弱等因素都會帶來干擾,對照片有影響.加上JPEG格式壓縮的圖像,其本身也有一定程度的失真.給人臉識別增加難度.這些因素沒法改變,因此只能通過選擇合適的算法,并對其進(jìn)行優(yōu)化,在一定程度上消除不利因素.
人臉識別算法對照片中人臉的標(biāo)準(zhǔn)化要求很高,在進(jìn)行人臉識別之前,要對原始的照片進(jìn)行預(yù)處理.預(yù)處理之后的照片應(yīng)該大小一樣,人臉的位置也應(yīng)該保持一致.
預(yù)處理流程步驟:首先對照片進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)到兩個(gè)眼睛處在同一條水平線上即可.接著對照片進(jìn)行裁剪,根據(jù)人臉圖像的寬度是標(biāo)準(zhǔn)照片中兩個(gè)眼睛之間的距離的2倍進(jìn)行裁剪,兩個(gè)眼睛的位置確定下來,其他器官的位置也就跟著確定了,一張標(biāo)準(zhǔn)化的人臉圖像就生成了.接著對圖像進(jìn)行灰度歸一化處理,為了方便統(tǒng)一處理不同灰度值的圖像,圖像的灰度值和方差需要被設(shè)定到一個(gè)合理的范圍之內(nèi).
2 面部特征提取
目前面部特征提取方法有:基于幾何特征面部識別方法、基于BP神經(jīng)網(wǎng)絡(luò)面部識別方法、基于LBP的面部識別方法等[1].每種方法都各有適用場景及優(yōu)缺點(diǎn),考慮到平臺的兼容性,硬件資源配置低的因素,本文采用PCA(Principal Component Analysis)算法.
PCA即主成分分析,是一種常用的數(shù)據(jù)降維方法.它可以通過線性變換將面部原始數(shù)據(jù)變換為一組各維度線性無關(guān)表示,以此來提取數(shù)據(jù)的主要特征分量.PCA算法步驟[2,3]:
(1)將面部圖像采集到數(shù)據(jù)庫中.這一步先進(jìn)行圖像預(yù)處理,然后再將數(shù)據(jù)按列組成n*n矩陣X.
(2)求特征協(xié)方差矩陣.將X的每一行進(jìn)行零均值化處理,求出協(xié)方差矩陣C,進(jìn)而求出協(xié)方差矩陣C的特征值及對應(yīng)的特征向量.
(3)對面部特征進(jìn)行降維.將面部特征向量按照對應(yīng)特征值大小從上到下按行進(jìn)行排列成矩陣,取前k行組成矩陣P,Y=PX即為降維到k維后的特征向量.
3 面部特征識別
識別過程分為兩步,第一步訓(xùn)練,第二步識別.
訓(xùn)練步驟:
(1)準(zhǔn)備一組面部圖像.
(2)訓(xùn)練這些圖像,生成它們的特征臉,保存N個(gè)特征值相關(guān)的特征向量,并將其定義為一個(gè)“面部空間”.
(3)將訓(xùn)練集合中的面部圖像全部投影到“面部空間”上,計(jì)算出每一個(gè)人臉圖像在該N維空間上的相關(guān)分布系數(shù).
訓(xùn)練之后就可以識別了,識別步驟:
(1)將待識別的人臉圖像投影到N個(gè)特征臉上,計(jì)算其權(quán)值.
(2)將得到的權(quán)值和原始的人臉集合做對比,計(jì)算圖像之間的歐式距離,通過比較歐式距離和設(shè)置的閾值做比較,可以確認(rèn)該人臉是否是人臉庫中的人臉.
4 特征臉在OpenCV中實(shí)現(xiàn)
OpenCV是一個(gè)開源發(fā)行的跨平臺計(jì)算機(jī)視覺庫,可以運(yùn)行在Linux、Windows、Android、Mac OS操作系統(tǒng)上.它用C++編寫,但提供了大量的Python、Ruby等語言接口[4,5].
在OpenVCV2.4以后,加入了新的類FaceRecognizer.通過它可以方便快捷的進(jìn)行人臉識別.首先輸入人臉圖像訓(xùn)練樣本,F(xiàn)aceRecognizer類調(diào)用train方法對其進(jìn)行訓(xùn)練,訓(xùn)練的結(jié)果通過調(diào)用save方法保存到FaceRecognizer對象中.接著進(jìn)行識別工作,先通過load方法加載之前訓(xùn)練好的特征文件,然后FaceRecognizer調(diào)用predict方法進(jìn)行人臉識別[6].整個(gè)識別過程在OpenCV中的實(shí)現(xiàn)過程如圖1所示.
5 Android人臉識別軟件設(shè)計(jì)
5.1 開發(fā)環(huán)境準(zhǔn)備
(1)從opencv官網(wǎng)上下載sdk,本項(xiàng)目選擇3.3.3版本.
(2)新建一個(gè)Android項(xiàng)目,導(dǎo)入opencvLibrary.
(3)復(fù)制sample/face-detection/src到app項(xiàng)目的src下.
(4)導(dǎo)入res文件.
(5)復(fù)制jni/detectionBasedTracker_ini.cpp和
jni/detectionBased Tracker_ini.h到cpp目錄下.
(6)新建main/jniLibs/armeabi-v7a目錄,復(fù)制sdk/native/libs/armeabi-v7a/libopencv_java3.so到新建目錄下.
(7)復(fù)制sdk/native/jni/include/*.*
到main/jniLibs/目錄下.
(8)修改CMakeList.txt文件.
(9)在build-gradle文件中加入要支持的armeabi-v7a架構(gòu).
(10)加入啟動頁面,運(yùn)行.
5.2 人臉檢測與識別
OpenCV有一個(gè)org.opencv.android.JavaCameraView自定義控件,它不停地從攝像頭抓取數(shù)據(jù),在回調(diào)方法中,我們能得到Mat數(shù)據(jù),然后通過調(diào)用OpenCV的Native方法,檢測當(dāng)前是否是人臉,我們會獲得一個(gè)Rect數(shù)組,里面都是人臉數(shù)據(jù),最后將人臉畫在屏幕上.
人臉識別用到了JavaCV,JavaCV是一款開源的視覺處理庫,封裝了OpenCV等計(jì)算機(jī)視覺編程常用接口,在Android平臺上調(diào)用方便[7].
人臉檢測階段檢測到人臉之后,把人臉部分截取出來,接著預(yù)處理原始數(shù)據(jù),然后將特征值跟人臉空間特征值做比對,達(dá)到一定相似度即識別出來.
5.3 軟件測試
本次App測試過程中,主要測試軟件的識別率,測試組選取四位志愿者.首先訓(xùn)練樣本,四位志愿者每人拍攝5張圖片作為訓(xùn)練樣本,如圖2所示.
每位志愿者采集的面部圖像的神態(tài)、表情都稍微有些變化,圖中的人臉圖像都是經(jīng)過預(yù)處理之后的.在樣本訓(xùn)練結(jié)束之后,進(jìn)行人臉識別,識別結(jié)果如圖3所示.
經(jīng)過軟件測試,當(dāng)測試人數(shù)為4人時(shí),軟件識別率達(dá)到100%.
6 結(jié)束語
本文首先詳細(xì)介紹了PCA人臉識別算法,然后配置Android開發(fā)環(huán)境,使用OpenCV開發(fā)實(shí)現(xiàn)了人臉識別軟件,測試結(jié)果達(dá)到預(yù)期效果.
參考文獻(xiàn):
〔1〕江琨,鄭祿,帖軍.基于LBP和PCA算法的智能人臉識別[J].計(jì)算機(jī)與數(shù)字工程,2016,44(10):2048-2051+2056.
〔2〕趙鑫,汪維家,曾雅云等.改進(jìn)的模塊PCA人臉識別新算法[J].計(jì)算機(jī)工程與應(yīng)用,2015(02):161 -164+176.
〔3〕張曉璐.基于PCA的人臉識別技術(shù)的研究[J].遼寧科技學(xué)院學(xué)報(bào),2014(04):38-39+42.
〔4〕林啟亮.基于OpenCV2.X的車牌識別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].廈門大學(xué),2013.6-7.
〔5〕王艷紅.基于OpenCV的運(yùn)動目標(biāo)檢測與跟蹤算法的研究[D].杭州電子科技大學(xué),2014.5-6.
〔6〕劉海建.基于OpenCV的人臉辨識算法研究與實(shí)現(xiàn)[D].集美大學(xué),2014.10-12.
〔7〕曾健平,邵艷潔.Android系統(tǒng)架構(gòu)及應(yīng)用程序開發(fā)研究[J].微計(jì)算機(jī)信息,2011(09):1-3.