王向豪,謝鈞霖,曾凡馨,姚西成
(西南石油大學理學院,成都610000)
這個高速發展的時代,一切事物都將與“快”相聯系。人臉識別技術的發展成熟保證了人們的信息安全,二維碼的飛速發展成為了現如今信息傳遞的新媒介。“慢”就會被淘汰,因此減少現如今人臉識別過程的時間仍是目前研究的一個課題。本文將現今兩項比較前沿的領域——人臉識別和二維碼,融合在一起,以達到快速識別人臉信息的目的。
其中,人臉識別技術的優點在于:①圖像采集方式靈活、方便,通過手機、相機等設備就能完成;②圖像的采集過程簡單;③人臉圖像信息易于處理;④人臉面部特征易于提取和識別。QR 二維碼的優點在于:①QR碼的可存儲信息量大;②技術簡單便于實現。本文將這兩項前沿技術相結合,有望為人臉識別技術未來的發展提供一個新的思路。
主成分分析(Principal Component Analysis)是一種應用非常廣泛的基礎數學分析方法。其內在思想是K-L 變換或者霍特林變換,通過分析變量找出一組最優正交基,使得變換后的變量與原來變量之間的均方誤差最小。通過K-L 變換后,將原來的自變量變換成另一組變量,變換后的變量便是“主成分”。從“主成分”中提取一部分重要成分作為新的自變量,最后用最小二乘法對選取主成分后的模型參數進行估計。
PCA 原理是將一個高維向量通過一個特征變換矩陣將變換后的變量投影到一個低維向量空間中形成一個低維向量,并且幾乎不損失主要信息。本文的人臉識別過程中,將每一個特征臉處理成了一個特征臉。
PCA 算法經過多年的發展和研究已經非常完善和成熟,因此本文將直接應用MATLAB 本身的PCA 算法將ORL 人臉庫的數據信息進行降維處理,得到的特征臉信息再與QR 二維碼技術結合,設計出基于主成分分析的人臉二維碼識別系統。
本文的訓練集以及測試集采用的是ORL 人臉庫。基于ORL 人臉庫的信息多樣和標準灰度圖像的優點,我們將直接對選取的人臉樣本集進行訓練。從ORL 人臉庫中選取380 張人臉圖像,每張圖像的像素為112×92,為了方便數據處理我們將每張圖像放縮成像素為64×64 的圖像。
圖1 所示的圖像為放縮后的圖像,可以看出經過放縮后的圖像仍然可以完全識別,而且沒有損失主要的特征信息。

圖1 放縮前后的圖像
通過放縮后的人臉圖像矩陣為Ai=R64×64,其中每個圖像矩陣按照64×64 的列向量進行重新排列,構成一個樣本訓練集φ=[φ1,φ2,…,φ380],φi表示長度為64×64 的列向量。

圖2 圖像壓縮成向量示意圖
樣本訓練集構成后我們將獲取平均臉,平均臉在數學意義中表示為樣本訓練集的平均值,為同時平均值mφ也為樣本集所有人臉圖像共有的特征成分。
將得到的平均臉放縮成像素為64×64 的人臉圖像,如圖3 所示。

圖3 平均臉圖像
因為我們需要訓練集樣本中圖像彼此不同的部分,因此需要將訓練集中的共有成分去掉,即X=[x1,x2,…,x380],其中xi=φi-mφ。
接著求出協方差矩陣的特征值λi和對應的特征向量ui。本文對于求協方差矩陣的特征向量和特征值使用的是MATLAB 自帶的PCA 算法,通過MATLAB自帶的PCA 算法計算出的特征值和特征向量經過測試得到的結果可以正確地識別測試圖像。
將協方差矩陣的特征值進行降序排列,即:

經過多次測試,我們取n=350 時得到的測試相對誤差最小,即大于λ350的特征值對應的特征向量構成主成分,因此主成分構成的變換矩陣為:

這樣每一幅人臉都可投影到Ueig=[u1,u2,…,u350]構成的特征臉子空間中,任何一幅人臉圖像都可以向其作投影y=xUeig T,得到一組經變換后的變量,即低維向量y,此低維向量可作為人臉識別的依據。
計算出特征臉子空間后,我們便可以將被識別人臉圖像向其投影。首先將被識別人臉圖像壓縮成向量,然后將其共有的成分剔除。即:

其中xs為被識別人臉圖像的特有成分,φs為被識別人臉圖像的全部信息,mφ為訓練集樣本平均值或者平均臉信息。
將被識別的人臉圖像的特有成分經過特征變換矩陣投影后,便得到了降維后的向量ys,此向量也稱為被識別人臉圖像的“主成分”。即:降維后我們需要再對主成分進行人臉圖像重構,因為K-L 變換是正交對稱性的,因此Ueig

-1=Ueig T,即:

其中E為單位矩陣,因此xs=ysUeig,再將得到的被識別人臉圖像的特有成分加上平均臉,即φs=xs+mφ,重構出被識別的人臉圖像。
Java 是現如今實現QR 二維碼生成與信息識別的主流工具,因此在提取被識別人臉圖像的主成分后,我們將使用Java 來實現將此主成分的信息轉換成QR 二維碼,進而再對QR 二維碼信息提取并對人臉圖像的重構,以達到對人臉信息的快速識別的目的。

圖4 二維碼圖形格式
QR 碼(Quick Response)是一種矩陣式二維碼符號。QR 碼有制作成本低、存儲容量大、應用和儲存范圍廣、可靠性高等特點。QR 碼可以同時在水平和垂直方向的二維空間儲存信息,在表示信息方面也可以記載更復雜的數據,除了字母和數字外還可以錄入漢字、圖片、指紋、網址等信息,相當一個可移動的數據庫。而相比其他二維碼而言,QR 二維碼具有識讀速度快、數據密度大、占用空間小的優勢。結合QR 二維碼以上優勢,它能夠儲存大量人臉信息,制作成本低,并且能夠快速識別,所以本文采用QR 二維碼來對人臉信息進行儲存。
MATLAB 本身不具備生成和識別二維碼的函數,所以需要借助Java 的ZXing 開源庫,之后再使用MAT?LAB 提供的用于和Java 模塊通信的各種函數。為了生成二維碼。首先創建一個ZXing.MultiFormatWriter的實例,從而把抽象的Java 類實例出個體,實例對象才能直接進行交互。接下來,使用MultiFormatWriter 的encode 方法,對之前導入的人臉數據信息進行編碼。至此,編碼就已經完成。下一步要做的,是從我們創建的BitMatrix 實例中提取圖像數據,用它的ToBitmap 將其轉化為一個dotNET 的Bitmap 對象,然后再將其轉化成MATLAB 矩陣。在這過程中需要將像素之間空格和換行符刪除,從而將字符串轉換為MATLAB 可以接受的圖像矩陣。最終生成的包含人臉數據信息的二維碼示例如圖5。

圖5 含有主成分信息的二維碼
識別QR 二維碼,需要用到的類主要是BinaryBit?map,識別過程關鍵類是QRCodeReader。通過指令查閱類可知,所用到的函數輸入變量類型是BinaryBit?map,所以就要求解碼之前要進行類型轉換,即將普通格式的二維碼圖片轉化為Java 類型圖像格式,之后就可以調用函數對Java 類型圖像灰度化、降噪、邊緣檢測、輪廓提取、矯正畸變,最終得到二維碼中的人臉信息(向量數據)。
將二維碼主要信息提取后,我們再利用K-L 變換是正交對稱性:U-1=UT,即:UUT=E,其中E為單位矩陣,U為特征臉子空間。因此我們再將從二維碼中提取的信息乘以特征臉子空間,即xs=ysU,得到被識別人臉圖像的特有成分后,我們再將得到的被識別人臉圖像的特有成分加上平均臉,即φs=xs+mφ,重構出被識別的人臉圖像。

圖6 原始圖像以及重構圖像及誤差率
從圖6 中可以看出,被識別的人臉圖像可以很好地被重構出來,而且并沒有產生明顯的失真。同時重構前后的數據均在誤差允許的范圍之內,因此我們的人臉識別系統已經基本完成,且具有很高的可靠性。
本文是將當前較為熱門的兩個領域結合,人臉識別和QR 二維碼結合在一起,將人臉圖像信息錄入二維碼中,可以通過掃描二維碼迅速識別出人臉信息。本文實現了人臉圖像信息處理、QR 二維碼的生成及識別,雖然二維碼有著識別快、存儲信息量大等優點,但是通過二維碼能夠快速識別出人臉信息的同時,也存在信息泄露的風險,可以在當前研究的基礎上進一步提高二維碼的加密性和安全性,對人臉識別系統我們還需要更加完善的措施,以保證二維碼內信息的安全。
目前能夠識別QR 二維碼的設備有限,二維碼的識別設備大部分是手機和平板等手持電子設備,因此,下一步的研究可以將PC 端轉換到Android 平臺或者iOS 平臺上。