基於稀疏表示的實際應用人臉識別系統
1.實驗背景
在大二的時候我加入了華南農業大學318軟體開發室,並在在讀博士塗淑琴老師的指導下接觸計算機視覺,被它的智慧和新奇所吸引,就一直在這塊領域摸滾帶爬。先是學習了Matlab、JAVA,一邊看論文一邊喝著牛奶,一邊拍攝人臉一邊客串宿舍。功夫不負有心人,終於讓我拍齊50人,每人20張不同角度的頭像共1000張,用於實驗稀疏表示和特徵提取。塗老師下達了一個任務就是做出一個實際應用人臉識別,並要求用Matlab做核心,JAVA做介面。第一次接觸混合程式設計,在解決Matlab和JAVA通訊問題這方面花了我不少時間,最終寫了好幾個軟體才趨於完善。廢話不多說,下面直接進入主題。
圖1是基於稀疏表示的人臉識別系統主介面
圖1人臉識別應用軟體
2.稀疏表示和特徵提取原理
本實驗涉及SRC演算法、PCA降維演算法、歸一化演算法、L1正規化最小化演算法。
先是把整張人臉頭像基於稀疏表示的人臉識別,其稀疏表示用的字典直接由訓練所用的全部影象構成,把該類人臉不同頭像影象資料處理成一列列列向量,通過PCA降維演算法,歸一化演算法再排列成一個很大的三維矩陣儲存到.mat檔案裡形成訓練字典。
識別演算法通過L1正規化計算再比較,選擇訓練字典中匹配值最大的一類。具體演算法參見附件。
3.Matlab和JAVA通訊
本實驗基於Win8.1的64位(32位)系統,Matlab版本2012b,JDK1.7環境下。
利用 MATLAB的 COM Builder 連線,COM由一組規範和一個系統級的實現構成, 這組規範由COM核心、結構化儲存、統一資料傳輸以及智慧命名構成。其中,COM核心定義了軟體元件的物件與客戶通過介面進行互動通訊的規格說明; 結構化儲存定義了複合文件的儲存格式, 以及建立文件的介面; 統 一資料傳輸定義了元件之間資料交換的標準介面; 智慧命名給予物件一個系統可識別的名字。對於 COM客 戶來說, 使用元件功能只能通過呼叫元件的介面函式完成。
簡單的說就是用Matlab中的deploytool命令把m檔案轉化為jar包,只要設定好返回變數和形參就可以實現通訊。
4.人臉識別應用軟體演示
圖2是實際應用人臉識別系統的設定,包括人臉相簿路徑、人臉類數和樣本數。
圖2軟體設定
圖3是載入本人頭像,左邊一列第一張圖是原影象,第二張圖是灰度影象。
圖3載入圖片
圖4是匯入字典操作,選擇事先訓練好的Dict.mat檔案
圖4匯入字典
圖5點選開始識別,右邊是識別後的頭像及個人資訊
圖5識別成功
圖6為不識別頭像,直接檢視或檢索人臉相簿的資訊,如輸入“鴻”,顯示出本人的資訊
圖6檢索人臉相簿的資訊
圖7為主介面下點選左邊第三個按鈕識別分析,對人臉相簿進行稀疏表示和殘差分析
圖7稀疏表示和殘差
5.測試
本人將不再相簿的人臉頭像進行識別,一部分識別成功,另一部分由於頭像拍攝不合格、不是統一畫素以及長和寬比例不一致導致識別失敗。
本人測試成功將閉眼的頭像進行識別,將不同角度(角度不是很大)的人臉進行識別,識別率在97%上下。
6.展望
影象處理領域還有很多問題可以用基於稀疏表示的理論進行處理,比如本文實際應用人臉識別,影象去噪,影象檢索等。以後工作可以考慮將稀疏表示理論引入到一些新的問題中。