張俊+李鑫+趙莎莎+鄧碩辰
摘要:該文設(shè)計了一種基于嵌入式平臺的人臉識別系統(tǒng),該系統(tǒng)采用S3C2440A作為微處理器,以嵌入式Linux為操作系統(tǒng),QT為界面編輯語言,對攝像頭采集的圖像進(jìn)行分析處理。通過移植OpenCV視覺函數(shù)庫,調(diào)用PCA算法的相關(guān)庫函數(shù)完成人臉圖像的檢測與識別。具有較強(qiáng)的實用價值。
關(guān)鍵詞:S3C2440A;QT;人臉識別
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)04-0195-03
Face Recognition System Design Based On Embedded Platform And OPENCV
ZHANG Jun, LI Xin, ZHAO Sha-sha, DENG Shuo-chen
(College of Information Engineering, Taiyuan University of Technology, Taiyuan 030024)
Abstract: In this paper, we design a face recognition system based on embedded platform, the system adopts the S3C2440A as microprocessor, based on embedded Linux operating system, QT is the interface editor language, analysis image which getting from camera. It complete face image detection and recognition by transplanting OpenCV vision function library and calling library function related PCA algorithm. It has strong practical value.
Key words: S3C2440A;QT;face recognition
如今, 生物特征識別技術(shù)正作為IT行業(yè)熱門的技術(shù)革新手段,應(yīng)用需求廣泛。在各種生物特征識別技術(shù)中,人臉識別技術(shù)以其非強(qiáng)制性、非接觸性、并發(fā)性和普遍性的特點,得到了廣泛應(yīng)用。以嵌入式系統(tǒng)為平臺的各種智能設(shè)備使用量劇增,但在嵌入式系統(tǒng)上增加人臉識別功能,開發(fā)周期長,難度大。OpenCV是一個良好的跨平臺計算機(jī)視覺庫,資源豐富,將兩者結(jié)合起來實現(xiàn)人臉識別能夠有效提高開發(fā)效率。
1 方案設(shè)計
1.1硬件組成
系統(tǒng)采用的微控制器是三星公司推出的S3C2440A,運用ARM920T內(nèi)核,具有性能高、功耗低、成本低的特點。LCD顯示屏,采用支持4K色STN、分辨率為480*272的顯示屏。USB攝像頭,通過V4L2接口與主控制器進(jìn)行數(shù)據(jù)傳輸,實現(xiàn)圖像采集。V4L2是一種由Linux內(nèi)核提供的可供用戶編寫驅(qū)動程序后使用的編程接口,通過控制API即可靈活地完成攝像頭對整個圖像采集的過程。
1.2軟件設(shè)計
軟件設(shè)計包括人臉庫的錄入和人臉庫的匹配兩部分組成,人臉錄入便于盡快采集樣本數(shù)據(jù),方便檢測系統(tǒng)識別的精度。同時提取特征值形成特征臉空間并進(jìn)行存儲。人臉匹配通過將攝像頭采集的數(shù)據(jù)投影到特征臉空間,并與存儲器中每一幅圖像進(jìn)行匹配,得到檢測結(jié)果。軟件流程圖如圖2所示:
1.3 基本原理
在人臉識別算法上,我們使用了當(dāng)前最廣泛使用的PCA算法,即主成分分析法(Principal Component Analysis),是通過協(xié)方差矩陣來對樣本數(shù)據(jù)進(jìn)行抽取主要特征維度的一種方法 ,可以把富含高維度的信息,投射到低的維度空間,進(jìn)而可以通過對低維度的描述,來表示事物的主要方面。
1.3.1 PCA主成分分析
人臉識別的過程,是把人臉樣本表征為向量,通過構(gòu)造出的特征臉子空間,求出平均向量即平均臉,計算訓(xùn)練集對于平均臉的偏差、協(xié)方差矩陣特征值與特征向量,并選取N個最大特征值表征人臉維數(shù)。
1.3.2人臉檢測與識別
采用最短歐式距離作為判定準(zhǔn)則,在錄入圖像的向量空間中尋找與特征空間最為相近的樣本,若此距離小于設(shè)定閾值,則系統(tǒng)判定人臉身份,否則拒絕陌生用戶的登錄申請。
采集圖像矩陣與每個訓(xùn)練圖像特征臉矩陣的歐氏距離為:
[εi2=τ-τ0T2]
通過[εi]與指定閾值[κ]的大小比較,來確定該圖像是否被識別。
2 系統(tǒng)開發(fā)
2.1 嵌入式操作系統(tǒng)構(gòu)建
Linux內(nèi)核的嵌入式系統(tǒng)的構(gòu)建,主要分為Bootloader的移植,Linux內(nèi)核的配置與移植,文件系統(tǒng)的構(gòu)建與移植,應(yīng)用程序的移植。主要流程圖如圖3所示?;谇度胧降娜四樧R別系統(tǒng)的Bootloader采用Uboot對操作系統(tǒng)的啟動進(jìn)行引導(dǎo)。Bootloader與文件系統(tǒng)均采用開發(fā)板原機(jī)所帶,故重點對內(nèi)核的配置,應(yīng)用軟件的編寫與移植進(jìn)行重點介紹。
2.2 內(nèi)核配置
2.2.1內(nèi)核簡介
內(nèi)核是操作系統(tǒng)功能實現(xiàn)的基礎(chǔ)。Linux操作系統(tǒng)的內(nèi)核負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng)等。嵌入式系統(tǒng)的內(nèi)核也具有以上功能。Linux是開源系統(tǒng),在裁剪其系統(tǒng)內(nèi)核時更為方便,使系統(tǒng)的體積更小。通過配置內(nèi)核,支持所需要的外圍硬件設(shè)備。通過Redhat圖形界面使內(nèi)核支持NAND和yaffs2,掛載文件系統(tǒng);也使內(nèi)核支持基本的外圍設(shè)備,便于數(shù)據(jù)顯示和采集。
2.2.2配置過程
下載操作系統(tǒng)內(nèi)核linux-2.6.31.tar.gz源碼,解壓并進(jìn)入源碼目錄,打開圖形界面進(jìn)行配置:
1支持NAND和yaffs2,掛載文件系統(tǒng)
修改arch/arm/plat-s3c24xx/common-
smdk.c文件使支持NAND并且配置內(nèi)核支持yaffs2,如下:
File systems --->
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows95) fs support
Miscellaneous filesystems --->
<*> YAFFS2 file system support
[*] Autoselect yaffs2 format
2基本外圍設(shè)備的配置
配置內(nèi)核,支持 LCD:
Device Drivers:
Graphics Support --->
<*>support for frame buffer devices --->
[*] Enable frameware EDID
[*] Enable Vidoe Mode Handling Helpers
<*> S3C24X0 LCD framebuffer support
Console display driver support --->
<*> Framebuffer Console Support
[*] Bootup Logo --->
<*> Standard 224-color Linux logo
啟動時輸出:
Console: switching to colour frame buffer device 40x30
fb0: s3c2410fb frame buffer device
3配置內(nèi)核,支持 USB 攝像頭:
Device Drivers --->
<*> Multimedia support --->
<*> Video For Linux
[*] Enable Video For Linux API 1 (DEPRECATED)
[*] Video capture adapters --->
[*] V4L USB devices --->
<*> USB Video Class (UVC)
[*] UVC input events device support
[*] GSPCA based webcams --->
2.3 OpenCV的編譯與應(yīng)用
2.3.1 OpenCV的編譯
OpenCV是一個開源的計算機(jī)視覺庫,支持跨平臺運行,利用特定的平臺編譯器編譯使得OpenCV可以運行在不同的平臺。基于嵌入式的人臉識別系統(tǒng)運行在嵌入式Linux系統(tǒng)。利用ARM-Linux-Gcc編譯OpenCV需要做以下工作。
① 準(zhǔn)備環(huán)境變量
#export OPENCV_BUILD_DIR=/home/openCV/install
② 解壓OpenCV
#tar xjf OpenCV-2.0.0.tar.bz2
③ 軟件包進(jìn)行配置
#cd OpenCV-2.0.0
#./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --disable-static --enable-shared --disable-apps CXX=arm-linux-g++ --prefix=$OPENCV_BUILD_DIR/install --libdir=$OPENCV_BUILD_DIR/install/lib -includedir=$OPENCV_BUILD_DIR/install/include
④ OpenCV進(jìn)行編譯
#make
⑤ OpenCv進(jìn)行安裝
#make install
2.3.2 OpenCV的移植與應(yīng)用
將編譯好的OpenCV庫移植到開發(fā)板的根文件系統(tǒng)的/usr/lib目錄中。圖像采集和圖像處理利用OpenCV函數(shù)進(jìn)行編寫,運行時依賴移植后的庫運行。在QT程序中嵌入依賴OpenCV庫的人臉識別程序,在編譯Qt程序時需要在Makefile文件中進(jìn)行以下設(shè)置。
1 添加OpenCV頭文件路徑
-I/home/openCV/install/install/include/opencv
2 添加openCV庫文件路徑
-L/home/openCV/install/install/lib -lm -lcv -lcvaux -lcxcore -lhighgui -lml -lpthread -ljpeg -lrt -lcxcore -lz
2.4 QT編寫人臉識別程序
Qt是跨平臺的C++圖形用戶界面應(yīng)用程序開發(fā)框架,既可以用來開發(fā)GUI程序,也可用于開發(fā)非GUI程序。QT具有優(yōu)良的跨平臺特性,支持多種操作系統(tǒng),多用于嵌入式系統(tǒng)的顯示界面。
由于基于嵌入式的人臉識別系統(tǒng)需要在上位機(jī)Linux平臺和ARM平臺利用QT顯示,所以需要分別利用特定的編譯器編譯QT和Qt Embedded,前者編譯后可以在上位機(jī)平臺使用,后者可以在上位機(jī)平臺用交叉編譯器編譯,將編譯后的庫移植到ARM平臺的根文件系統(tǒng)中,就可以在ARM平臺成功運行QT程序。顯示界面通過Qt Creator 中集成的Qt Designer工具進(jìn)行與開發(fā)板顯示屏大小匹配的界面設(shè)計,界面包含三個Label標(biāo)簽,將采集到的圖像放入其中一個Label標(biāo)簽進(jìn)行顯示,并對界面進(jìn)行刷新。進(jìn)行人臉識別后的結(jié)果顯示在另外兩個標(biāo)簽上,其中一個標(biāo)簽放入動態(tài)采集的人臉圖片,另外一個標(biāo)簽顯示從樣本庫中選取的識別結(jié)果,如圖6所示。
3 結(jié)束語
開源庫可以很好的移植到嵌入式操作系統(tǒng)上,利用OpenCV開源庫使人臉識別技術(shù)在嵌入式系統(tǒng)上得以實現(xiàn),并借助QT顯示界面使圖像采集和識別結(jié)果得以顯示。經(jīng)實驗檢驗,界面簡潔,使用方便,易于移植,軟硬件搭配合理,根據(jù)需要裁剪系統(tǒng),充分體現(xiàn)了嵌入式系統(tǒng)的各方面優(yōu)點。而且可以應(yīng)用在各門禁系統(tǒng),考勤,圖片歸檔,身份驗證,公共安全等多種場合。
參考文獻(xiàn):
[1] 韋東山. 嵌入式Linux應(yīng)用開發(fā)完全手冊[M]. 北京: 人民郵電出版社, 2008.
[2] 布拉德斯基, 克勒.學(xué)習(xí)OpenCV[M]. 于仕琪, 劉瑞禎,譯. 北京: 清華大學(xué)出版社, 2009.
[3] 布蘭切特, 薩默菲爾德, C++ GUI Qt4編程[M]. 閆鋒欣, 曾泉人, 張志強(qiáng),譯. 2版.北京:電子工業(yè)出版社, 2013.
[4] 王映輝. 人臉識別——原理、方法與技術(shù)[M]. 北京: 科學(xué)出版社, 2010.
[5] 宋成, 孫廣富. 觸摸屏在 S3C2410 上的應(yīng)用實例[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2005 (1): 35-37.
[6] 張懿. 構(gòu)造廉價的ARM9開發(fā)平臺[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2007 (5): 71-74.