王向豪,謝鈞霖,曾凡馨,姚西成
(西南石油大學(xué)理學(xué)院,成都610000)
這個高速發(fā)展的時代,一切事物都將與“快”相聯(lián)系。人臉識別技術(shù)的發(fā)展成熟保證了人們的信息安全,二維碼的飛速發(fā)展成為了現(xiàn)如今信息傳遞的新媒介?!奥本蜁惶蕴虼藴p少現(xiàn)如今人臉識別過程的時間仍是目前研究的一個課題。本文將現(xiàn)今兩項比較前沿的領(lǐng)域——人臉識別和二維碼,融合在一起,以達到快速識別人臉信息的目的。
其中,人臉識別技術(shù)的優(yōu)點在于:①圖像采集方式靈活、方便,通過手機、相機等設(shè)備就能完成;②圖像的采集過程簡單;③人臉圖像信息易于處理;④人臉面部特征易于提取和識別。QR 二維碼的優(yōu)點在于:①Q(mào)R碼的可存儲信息量大;②技術(shù)簡單便于實現(xiàn)。本文將這兩項前沿技術(shù)相結(jié)合,有望為人臉識別技術(shù)未來的發(fā)展提供一個新的思路。
主成分分析(Principal Component Analysis)是一種應(yīng)用非常廣泛的基礎(chǔ)數(shù)學(xué)分析方法。其內(nèi)在思想是K-L 變換或者霍特林變換,通過分析變量找出一組最優(yōu)正交基,使得變換后的變量與原來變量之間的均方誤差最小。通過K-L 變換后,將原來的自變量變換成另一組變量,變換后的變量便是“主成分”。從“主成分”中提取一部分重要成分作為新的自變量,最后用最小二乘法對選取主成分后的模型參數(shù)進行估計。
PCA 原理是將一個高維向量通過一個特征變換矩陣將變換后的變量投影到一個低維向量空間中形成一個低維向量,并且?guī)缀醪粨p失主要信息。本文的人臉識別過程中,將每一個特征臉處理成了一個特征臉。
PCA 算法經(jīng)過多年的發(fā)展和研究已經(jīng)非常完善和成熟,因此本文將直接應(yīng)用MATLAB 本身的PCA 算法將ORL 人臉庫的數(shù)據(jù)信息進行降維處理,得到的特征臉信息再與QR 二維碼技術(shù)結(jié)合,設(shè)計出基于主成分分析的人臉二維碼識別系統(tǒng)。
本文的訓(xùn)練集以及測試集采用的是ORL 人臉庫?;贠RL 人臉庫的信息多樣和標(biāo)準(zhǔn)灰度圖像的優(yōu)點,我們將直接對選取的人臉樣本集進行訓(xùn)練。從ORL 人臉庫中選取380 張人臉圖像,每張圖像的像素為112×92,為了方便數(shù)據(jù)處理我們將每張圖像放縮成像素為64×64 的圖像。
圖1 所示的圖像為放縮后的圖像,可以看出經(jīng)過放縮后的圖像仍然可以完全識別,而且沒有損失主要的特征信息。
圖1 放縮前后的圖像
通過放縮后的人臉圖像矩陣為Ai=R64×64,其中每個圖像矩陣按照64×64 的列向量進行重新排列,構(gòu)成一個樣本訓(xùn)練集φ=[φ1,φ2,…,φ380],φi表示長度為64×64 的列向量。
圖2 圖像壓縮成向量示意圖
樣本訓(xùn)練集構(gòu)成后我們將獲取平均臉,平均臉在數(shù)學(xué)意義中表示為樣本訓(xùn)練集的平均值,為同時平均值mφ也為樣本集所有人臉圖像共有的特征成分。
將得到的平均臉放縮成像素為64×64 的人臉圖像,如圖3 所示。
圖3 平均臉圖像
因為我們需要訓(xùn)練集樣本中圖像彼此不同的部分,因此需要將訓(xùn)練集中的共有成分去掉,即X=[x1,x2,…,x380],其中xi=φi-mφ。
接著求出協(xié)方差矩陣的特征值λi和對應(yīng)的特征向量ui。本文對于求協(xié)方差矩陣的特征向量和特征值使用的是MATLAB 自帶的PCA 算法,通過MATLAB自帶的PCA 算法計算出的特征值和特征向量經(jīng)過測試得到的結(jié)果可以正確地識別測試圖像。
將協(xié)方差矩陣的特征值進行降序排列,即:
經(jīng)過多次測試,我們?nèi)=350 時得到的測試相對誤差最小,即大于λ350的特征值對應(yīng)的特征向量構(gòu)成主成分,因此主成分構(gòu)成的變換矩陣為:
這樣每一幅人臉都可投影到Ueig=[u1,u2,…,u350]構(gòu)成的特征臉子空間中,任何一幅人臉圖像都可以向其作投影y=xUeig T,得到一組經(jīng)變換后的變量,即低維向量y,此低維向量可作為人臉識別的依據(jù)。
計算出特征臉子空間后,我們便可以將被識別人臉圖像向其投影。首先將被識別人臉圖像壓縮成向量,然后將其共有的成分剔除。即:
其中xs為被識別人臉圖像的特有成分,φs為被識別人臉圖像的全部信息,mφ為訓(xùn)練集樣本平均值或者平均臉信息。
將被識別的人臉圖像的特有成分經(jīng)過特征變換矩陣投影后,便得到了降維后的向量ys,此向量也稱為被識別人臉圖像的“主成分”。即:降維后我們需要再對主成分進行人臉圖像重構(gòu),因為K-L 變換是正交對稱性的,因此Ueig
-1=Ueig T,即:
其中E為單位矩陣,因此xs=ysUeig,再將得到的被識別人臉圖像的特有成分加上平均臉,即φs=xs+mφ,重構(gòu)出被識別的人臉圖像。
Java 是現(xiàn)如今實現(xiàn)QR 二維碼生成與信息識別的主流工具,因此在提取被識別人臉圖像的主成分后,我們將使用Java 來實現(xiàn)將此主成分的信息轉(zhuǎn)換成QR 二維碼,進而再對QR 二維碼信息提取并對人臉圖像的重構(gòu),以達到對人臉信息的快速識別的目的。
圖4 二維碼圖形格式
QR 碼(Quick Response)是一種矩陣式二維碼符號。QR 碼有制作成本低、存儲容量大、應(yīng)用和儲存范圍廣、可靠性高等特點。QR 碼可以同時在水平和垂直方向的二維空間儲存信息,在表示信息方面也可以記載更復(fù)雜的數(shù)據(jù),除了字母和數(shù)字外還可以錄入漢字、圖片、指紋、網(wǎng)址等信息,相當(dāng)一個可移動的數(shù)據(jù)庫。而相比其他二維碼而言,QR 二維碼具有識讀速度快、數(shù)據(jù)密度大、占用空間小的優(yōu)勢。結(jié)合QR 二維碼以上優(yōu)勢,它能夠儲存大量人臉信息,制作成本低,并且能夠快速識別,所以本文采用QR 二維碼來對人臉信息進行儲存。
MATLAB 本身不具備生成和識別二維碼的函數(shù),所以需要借助Java 的ZXing 開源庫,之后再使用MAT?LAB 提供的用于和Java 模塊通信的各種函數(shù)。為了生成二維碼。首先創(chuàng)建一個ZXing.MultiFormatWriter的實例,從而把抽象的Java 類實例出個體,實例對象才能直接進行交互。接下來,使用MultiFormatWriter 的encode 方法,對之前導(dǎo)入的人臉數(shù)據(jù)信息進行編碼。至此,編碼就已經(jīng)完成。下一步要做的,是從我們創(chuàng)建的BitMatrix 實例中提取圖像數(shù)據(jù),用它的ToBitmap 將其轉(zhuǎn)化為一個dotNET 的Bitmap 對象,然后再將其轉(zhuǎn)化成MATLAB 矩陣。在這過程中需要將像素之間空格和換行符刪除,從而將字符串轉(zhuǎn)換為MATLAB 可以接受的圖像矩陣。最終生成的包含人臉數(shù)據(jù)信息的二維碼示例如圖5。
圖5 含有主成分信息的二維碼
識別QR 二維碼,需要用到的類主要是BinaryBit?map,識別過程關(guān)鍵類是QRCodeReader。通過指令查閱類可知,所用到的函數(shù)輸入變量類型是BinaryBit?map,所以就要求解碼之前要進行類型轉(zhuǎn)換,即將普通格式的二維碼圖片轉(zhuǎn)化為Java 類型圖像格式,之后就可以調(diào)用函數(shù)對Java 類型圖像灰度化、降噪、邊緣檢測、輪廓提取、矯正畸變,最終得到二維碼中的人臉信息(向量數(shù)據(jù))。
將二維碼主要信息提取后,我們再利用K-L 變換是正交對稱性:U-1=UT,即:UUT=E,其中E為單位矩陣,U為特征臉子空間。因此我們再將從二維碼中提取的信息乘以特征臉子空間,即xs=ysU,得到被識別人臉圖像的特有成分后,我們再將得到的被識別人臉圖像的特有成分加上平均臉,即φs=xs+mφ,重構(gòu)出被識別的人臉圖像。
圖6 原始圖像以及重構(gòu)圖像及誤差率
從圖6 中可以看出,被識別的人臉圖像可以很好地被重構(gòu)出來,而且并沒有產(chǎn)生明顯的失真。同時重構(gòu)前后的數(shù)據(jù)均在誤差允許的范圍之內(nèi),因此我們的人臉識別系統(tǒng)已經(jīng)基本完成,且具有很高的可靠性。
本文是將當(dāng)前較為熱門的兩個領(lǐng)域結(jié)合,人臉識別和QR 二維碼結(jié)合在一起,將人臉圖像信息錄入二維碼中,可以通過掃描二維碼迅速識別出人臉信息。本文實現(xiàn)了人臉圖像信息處理、QR 二維碼的生成及識別,雖然二維碼有著識別快、存儲信息量大等優(yōu)點,但是通過二維碼能夠快速識別出人臉信息的同時,也存在信息泄露的風(fēng)險,可以在當(dāng)前研究的基礎(chǔ)上進一步提高二維碼的加密性和安全性,對人臉識別系統(tǒng)我們還需要更加完善的措施,以保證二維碼內(nèi)信息的安全。
目前能夠識別QR 二維碼的設(shè)備有限,二維碼的識別設(shè)備大部分是手機和平板等手持電子設(shè)備,因此,下一步的研究可以將PC 端轉(zhuǎn)換到Android 平臺或者iOS 平臺上。