楊鳴鳴
(杭州電子科技大學 計算機學院,浙江 杭州 310000)
摘要:該文主要實現了在嵌入式系統上的人臉識別。采用PCA對圖像數據進行降維,然后利用最短歐氏距離、支持向量機(Support Vector Machine,SVM)和BP神經網絡實現了分類。在嵌入式系統上,沒有使用QT、OpenCV等占用空間大的工具,而使用自己編寫的C語言,以及Linux內核,節省了空間,并且處理過程中使用了BMP圖片,稍微增加了存儲空間,但是運算簡單,處理速度較快。
關鍵詞:PCA;SVM;神經網絡;嵌入式系統;人臉識別
0引言
假如汽車上安裝了嵌入式人臉識別系統,通過人臉識別才能啟動汽車,那么安全系數就提高了很多。過去,大多數人借助于OpenCV等方式在嵌入式設備上進行人臉識別,大大增加了嵌入式系統的負擔,本文通過使用主成分分析(Principal Component Analysis,PCA)、支持向量機(Support Vector Machine,SVM)、神經網絡等算法,拋開QT圖形界面、OpenCV等工具,僅借助LibSVM庫,以及C語言實現了一個完整的嵌入式人臉識別系統。盡管PCA以及SVM都可以實現人臉識別,但是本文實現了一種將PCA、SVM與神經網絡相結合的方法,在滿足準確率要求的情況下,將運行時間降到最低。
1概述
人臉是人的主要身份信息。隨著人臉識別技術的發展,用機器來識別人臉已經實現,目前的人臉識別方法主要分為以下幾類:
(1)基于幾何特征的方法,最早是由BLEDSOE于1966年提出,后來KANDE做出了一些改進,然而識別率也僅有45%~75%;
(2)基于模型的方法,使用的模型主要為HMM隱馬爾可夫模型[1],它的識別效果較好;
(3)基于統計的方法,特征臉[2]的方法是由TURK M和PENTLAND A最早提出,一種新的人臉識別思路由此開始。后來在此基礎上有一系列的改進方法[34],基于頻域的方法GABOR[5]小波變換也引入到人臉識別領域;基于支持向量機[67]的人臉識別,識別率很好。
本文主要研究使用PCA、SVM、神經網絡方法在嵌入式系統上實現人臉識別。
2PCA及降維
在ORL人臉數據庫中,有40個人的400張像素為92×112的圖片,把每一張照片放到一個行向量上,那么將得到10 304維的數據,這對于識別來說實在是太大了,因此需要對它進行降維處理。
KIRBY M[8]等人使用KL變換對人臉圖像進行了降維處理,把一張人臉圖像當做一個高維的向量,人臉圖像的每個像素都是這個高維向量的一個元素,接著使用KL變換把圖像向量映射到一個特征空間。直到1991年PENTLAND A[9]首先將PCA用在了人臉識別上,進而引出了“特征臉”。
大部分研究都是使用OpenCV[10]、MATLAB[11]等工具在嵌入式設備上進行人臉識別,然而這些工具對于嵌入式系統來說是非常消耗存儲資源的。因此筆者寫了一個精簡PCA的程序代碼。
編寫代碼的步驟如下:
(1)讀取一張圖片的數據;
(2)先跳過bmp的前54 B的頭文件部分,接下來的是顏色數據;
(3)轉換為灰度圖,連續的3 B構成了一個像素,那么該像素的灰度值為GRAY=(R×30+G×59+B×11)/100;
(4)把測試圖片(50張)的灰度值存為一個10 304×50的矩陣中;
(5)利用Householder方法對矩陣進行變換,進而求出特征值和特征向量;
(6)把測試圖像投影到特征空間,將歐式距離最小的作為識別結果。
3SVM
在20世紀70年代,BOSER B E等人[12]開始研究統計學習理論,SVM[13]是基于統計學習理論的一種機器學習方法,它通過尋求結構化風險最小來達到提高學習機泛
化能力,實現經驗風險和置信范圍的最小化。
本文中使用臺灣大學林智仁[14]教授開發的LibSVM庫,在Linux上使用非常方便。步驟如下:
(1)利用PCA降維獲得的數據,然后將它修改為LibSVM所要求的格式;
(2)分別對訓練數據和測試數據進行SCALE;
(3)對于SCALE后的測試數據進行分類。
4神經網絡
1943年,首先由McCulloch和Pitts提出MP模型后,一直到今天,神經網絡經過幾十年的發展,取得了很大的發展,本次試驗中使用BP神經網絡對人臉數據進行處理,經過實驗發現在一定量人臉的情況下,訓練耗時較少,識別時間也較短,如表1所示。
5嵌入式相關移植
本文基于S3C2400的嵌入式設備,使用Linux操作系統在JZ2440上實現了一套完整的嵌入式人臉識別系統, 由于嵌入式攝像頭的安裝位置相對固定,因此把主要精力放在了人臉識別的部分。主要分為以下兩個步驟:
(1)圖片采集。使用攝像頭獲取動態的圖片,當需要識別時,只需要觸摸顯示屏,就可以把圖片保存下來。
(2)人臉識別。此時對圖片進行預處理,然后使用PCA+歐式距離或者PCA+SVM等方法進行識別。
6實驗結果分析
本文分別使用PCA和SVM等方法,在ORL人臉圖像庫(如圖1所示),與本實驗室人員的人臉圖像庫(如圖2所示)進行實驗,實驗證明識別效果很好。ORL人臉庫有40個人,每人有10張照片,本文使用一個人的前5張照片作為實驗樣本,后5張作為測試樣本。如圖1所示,1~5為一個人的訓練樣本照片,對應的測試樣本是10 001~10 005。同樣的訓練樣本6~10對應的測試樣本是10 006~10 010。
為了驗證此方法的通用性,還使用了一些本實驗室人員的人臉圖像,識別率仍然可以達到很好的識別效果(如表2所示)。
7結論
經過試驗發現,在ORL人臉圖像庫使用PCA+最近鄰識別率最高可達94%,而使用PCA+SVM的識別率可以達到98%,而使用BP神經網絡時,本文前期訓練耗時較多,且實驗過程中發現為了達到更高的準確率不得不增加神經網絡輸入的維度,這樣就更增大了神經網絡的耗時,并且實驗結果發現實現的準確率并沒有SVM高,因此本文最終選擇PCA+SVM作為嵌入式人臉識別的實驗方法。
參考文獻
[1] SAMARIA F, YOUNG S. HMM based architecture for face identification[J]. Image & Vision Computing, 1994, 12(8):537-543.
[2] TURK M, PENTLAND A. Eigenfaces for recognition[J]. Journal of Cognitive Neuroscience, 1991, 3(1):71-86.
[3] HONG Z Q. Algebraic feature extraction of image for recognition[J]. Pattern Recognition, 1991, 24(3):211-219.
[4] NAKAMURA O, MATHUR S, MINAMI T. Identification of human faces based on isodensity maps[J]. Pattern Recognition, 1991, 24(3):263-272.
[5] LIU D H, LAM K M, SHEN L S. Optimal sampling of Gabor features for face recognition[J]. Pattern Recognition Letters, 2004, 25(2):267-276.
[6] PHILLIPS P J. Support vector machines applied to face recognition[J]. Advances in Neural Information Processing Systems, 2001, 11(7):803-809.
[7] JONSSON B K, MATAS J K J, LI Y. Learning support vector vectors for face verification and recognition[C]. IEEE International Conference on Automatic Face and Gesture Recognition, 2000.
[8] KIRBY M, SIROVICH L. Application of the karhunenloeve procedure for the characterization of human faces[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 1990, 12(1):103-108.
[9] TURK M, PENTLAND A. Eigenfaces for recognition[J]. Journal of Cognitive Neuroscience, 1991, 3(1):71-86.
[10] 王威. 基于ARM9硬件平臺的人臉識別系統設計與研究[D]. 成都:電子科技大學, 2013.
[11] 趙文琦. 基于ARM的嵌入式人臉識別系統研究實現[D]. 哈爾濱:哈爾濱工程大學, 2011.
[12] BOSER B E, GUYON I M, VAPNIK V N. A training algorithm for optimal margin classifiers[C]. Proceedings of the 5th Annual Workshop on Computational Learning Theory, 1992(7):144-152.
[13] BURGES C J C. A tutorial on support vector machines for pattern recognition[J]. Data Mining & Knowledge Discovery, 1998, 2(2):121-167.
[14] CHANG C C, LIN C J. LIBSVM: a library for support vector machines[J]. Acm Transactions on Intelligent Systems & Technology, 2011, 2(3):389-396.