方華++郭靜++田敬北
摘 要:文章以ARM Cortex-A8 (S5PV210)為核心,構(gòu)建了一種基于OpenCV的嵌入式圖像處理平臺(tái),提出在主流的Ubuntu操作系統(tǒng)上交叉編譯Qt和OpenCV后將其移植到嵌入式Linux操作系統(tǒng)中,為嵌入式平臺(tái)下復(fù)雜圖像處理算法的設(shè)計(jì)和實(shí)現(xiàn)提供了一條有效途徑,降低了開(kāi)發(fā)難度。在此平臺(tái)上進(jìn)行的在線人臉識(shí)別實(shí)驗(yàn)結(jié)果表明該平臺(tái)運(yùn)行可靠,功能正常。
關(guān)鍵詞:OpenCV;嵌入式;圖像處理平臺(tái);Qt
與基于PC機(jī)和圖像處理卡等的傳統(tǒng)圖像處理系統(tǒng)相比,采用嵌入式系統(tǒng)可以開(kāi)發(fā)出具有便攜性、實(shí)時(shí)性、成本更低以及可靠性更佳的圖像處理平臺(tái),但也存在軟件設(shè)計(jì)難度大,開(kāi)發(fā)周期長(zhǎng)、代碼效率主要依賴設(shè)計(jì)人員經(jīng)驗(yàn)等問(wèn)題。為此,文章提出一種基于OpenCV的嵌入式圖像處理平臺(tái),在宿主機(jī)上采用Ubuntu操作系統(tǒng),安裝OpenCV以實(shí)現(xiàn)圖像處理和計(jì)算機(jī)視覺(jué)方面的通用算法,降低開(kāi)發(fā)難度,縮短軟件開(kāi)發(fā)周期[1],同時(shí)OpenCV中大部分函數(shù)都進(jìn)行了匯編優(yōu)化,有效提高了程序的運(yùn)行效率。基于OpenCV的開(kāi)源特性也降低了產(chǎn)品的成本。
1 構(gòu)建平臺(tái)所用的軟硬件配備
1.1 宿主機(jī)配置和源代碼預(yù)備
宿主機(jī)主要是用來(lái)開(kāi)發(fā)和調(diào)試嵌入式系統(tǒng)應(yīng)用程序的計(jì)算機(jī)系統(tǒng)。宿主機(jī)硬件可以用PC機(jī),配置Linux操作系統(tǒng)。在構(gòu)建本嵌入式圖像處理平臺(tái)的過(guò)程中需要準(zhǔn)備如下源代碼:用于生成目標(biāo)系統(tǒng)的編譯器gcc源代碼、用于圖形界面顯示的Qt源代碼以及用于圖像處理的OpenCV源代碼。
1.2 建立rootfs目錄
將下載的得到的文件解壓,使用如下命令建立相關(guān)目錄:
$sudo mkdir rootfs
$cd rootfs
$sudo mkdir root home lib dev sbin mnt sys proc tmp var etc usr
1.3 權(quán)限環(huán)境變量的設(shè)置
正確的權(quán)限設(shè)置是保證正常創(chuàng)建編譯環(huán)境的重要條件,編譯環(huán)境設(shè)置權(quán)限的基本原則是,保證用戶對(duì)所有操作目錄及目錄下的文件擁有讀寫的權(quán)限[2]。具體設(shè)置如下:
sudo chown –R root:root rootfs/
sudo chown –R 755 root rootfs/
2 嵌入式圖像處理平臺(tái)的構(gòu)建
2.1 嵌入式圖像處理平臺(tái)硬件結(jié)構(gòu)
文章以友善之臂公司生產(chǎn)的Smart210開(kāi)發(fā)板作為硬件平臺(tái),以三星公司的S5PV210嵌入式中央處理器作為核心部件。該款處理器采用了ARM Cortex?-A8內(nèi)核,ARM V7指令集,主頻可達(dá)1GHZ,具有2000DMIPS的高性能運(yùn)算能力,已經(jīng)被廣泛應(yīng)用于手機(jī)和平板等移動(dòng)多媒體設(shè)備上。
2.2 軟件平臺(tái)搭建
軟件平臺(tái)的搭建主要分為操作系統(tǒng)移植、移植Qt和移植OpenCV三個(gè)部分。在圖像處理開(kāi)發(fā)工具上選擇了廣泛應(yīng)用的OpenCV,利用該視覺(jué)庫(kù)可以很方便地實(shí)現(xiàn)數(shù)字圖像處理。在顯示方面,選擇以支持多平臺(tái)而著稱的Qt圖形界面設(shè)計(jì)工具,其優(yōu)點(diǎn)在于一次編寫,隨處編譯,已成為圖像處理領(lǐng)域強(qiáng)有力的輔助工具。
2.2.1 操作系統(tǒng)移植
嵌入式圖像處理平臺(tái)的搭建的首要步驟為操作系統(tǒng)的選擇和移植。嵌入式Linux操作系統(tǒng)作為嵌入式主流操作系統(tǒng),其最大的特點(diǎn)是源碼公開(kāi)并且遵循GPL協(xié)議。由于嵌入式Linux操作系統(tǒng)支持廣泛的硬件、融合了各種強(qiáng)大的應(yīng)用軟件及完善的設(shè)備驅(qū)動(dòng)和開(kāi)發(fā)工具,因此文章選用了嵌入式Linux操作系統(tǒng)進(jìn)行移植,其關(guān)鍵在于正確制作根文件系統(tǒng)以啟動(dòng)Linux內(nèi)核。制作根文件系統(tǒng)的流程,如圖 1所示。
2.2.2 圖形界面庫(kù)Qt的移植步驟
Step1:編譯Qt-4.8.4,方法如下:
tar xfvz qt-everywhere-opensource-src-4.8.5.tar.gz
cd qt-everywhere-opensource-src-4.8.5
./configure -opensource -embedded arm -xplatform -prefix /opt/qt-4.8.5 -I /tslib/include -L /tslib/lib
Step2:把/opt/qt-4.8.5/lib下的所有文件放入開(kāi)發(fā)板文件系統(tǒng)中。
Step3:修改etc/profile文件,添加Qt庫(kù)的環(huán)境變量。
2.2.3 計(jì)算機(jī)開(kāi)源視覺(jué)庫(kù)OpenCV的移植步驟
在進(jìn)行OpenCV的移植時(shí)文章提出改用Qt編寫圖形接口部分,而不使用OpenCV的HighGUI庫(kù)。其原因在于OpenCV中的HighGUI模塊中的函數(shù)是基于GTK+的,主要為了將圖像顯示在GTK+窗體上,由于移植GTK+比較復(fù)雜,需要的依賴庫(kù)比較多,移植相當(dāng)繁瑣,容易出錯(cuò)。在嵌入式圖像處理開(kāi)發(fā)平臺(tái)中,應(yīng)用程序的開(kāi)發(fā)與GTK+相關(guān)性不大,因此調(diào)用OpenCV函數(shù)編寫圖像處理程序時(shí),不采用HighGUI中的庫(kù)函數(shù)會(huì)使界面的編寫更簡(jiǎn)單。
具體移植步驟如下:
Step1:下載源碼并解壓。
Step2:安裝cmake以及cmake-gui。
Step3:配置OpenCV。
Step4:配置cmake和cmake-gui。
Step5:make和make install。
Step6:將lib文件夾下的所有文件拷貝到開(kāi)發(fā)板。
Step7:設(shè)置環(huán)境變量。
3 嵌入式圖像處理平臺(tái)應(yīng)用
為了驗(yàn)證嵌入式圖像處理平臺(tái)是否構(gòu)建成功,文章設(shè)計(jì)了人臉識(shí)別應(yīng)用程序進(jìn)行驗(yàn)證。人臉識(shí)別是通過(guò)對(duì)攝像頭獲取的視頻流數(shù)據(jù)進(jìn)行圖像處理中的檢測(cè)定位和特征提取,從而識(shí)別出人臉的具體位置,并進(jìn)行在線跟蹤。實(shí)驗(yàn)中采用基于OpenCV的人臉識(shí)別分類器,通過(guò)接入的USB攝像頭實(shí)時(shí)監(jiān)測(cè)人臉。
3.1 人臉識(shí)別算法
OpenCV人臉識(shí)別分類器利用Haar-like特征來(lái)表示人臉特征[3],采用積分圖作為加速器的方法高效計(jì)算人臉特征,再由AdaBoost迭代學(xué)習(xí)算法進(jìn)行特征選擇和分類器的訓(xùn)練,最終實(shí)現(xiàn)人臉圖像的跟蹤識(shí)別。對(duì)于每一個(gè)特征,Adaboost算法根據(jù)訓(xùn)練樣本的特征值排序,并計(jì)算樣本權(quán)重,求得分類誤差后得出最優(yōu)弱分類器,經(jīng)過(guò)多次循環(huán)特征選擇能夠得到更多的最優(yōu)弱分類器,再組合最優(yōu)弱分類器得到強(qiáng)分類器,相當(dāng)于按照弱分類器的錯(cuò)誤率加權(quán)投票的方式將弱分類器構(gòu)造為一個(gè)強(qiáng)分類器;然后,將強(qiáng)分類器強(qiáng)強(qiáng)聯(lián)手串聯(lián)成一個(gè)級(jí)聯(lián)分類器。
3.2 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)分為標(biāo)識(shí)人臉和跟蹤人臉兩方面,當(dāng)單個(gè)或者多個(gè)人臉出現(xiàn)在攝像頭前,顯示屏上均能顯示并標(biāo)識(shí)人臉,當(dāng)人臉從中間分別向兩邊移動(dòng)時(shí),能夠?qū)崟r(shí)跟蹤人臉。同時(shí),在本嵌入式圖像處理平臺(tái)上,檢測(cè)出人臉的平均時(shí)間為300ms,而在普通的PC機(jī)上,編寫同樣的算法,運(yùn)行也需要150ms的檢測(cè)時(shí)間。在相同的代碼下,本嵌入式平臺(tái)和普通PC機(jī)平臺(tái)主要參數(shù)不同。由該實(shí)驗(yàn)可看出,在本嵌入式平臺(tái)下,能夠準(zhǔn)確的檢測(cè)到攝像頭所拍攝到的人臉,人臉識(shí)別的測(cè)試運(yùn)行也證明了嵌入式圖像處理平臺(tái)的可行性和穩(wěn)定性。
[參考文獻(xiàn)]
[1]賈小軍,喻擎蒼.基于開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)OpenCV的圖像處理[J].計(jì)算機(jī)應(yīng)用與軟件,2008(4):276-278.
[2]宋凱,嚴(yán)麗平,甘嵐.嵌入式圖像處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009(19):4368-4370+4377.
[3]劉曉克,孫燮華,周永霞.基于新Haar-like特征的多角度人臉檢測(cè)[J].計(jì)算機(jī)工程,2009(19):195-197.