基于NiosⅡ的人臉檢測系統設計
摘要 基于FPGA內嵌的NiosⅡ處理器,設計了一個實時人臉檢測系統。介紹了基于Haar特征的AdaBoost人臉檢測算法,描述了依據AdaBoost算法的人臉檢測軟件實現過程,最后在以Altera公司CycloneⅡ系列EP2C70為核心芯片的DE-2開發平臺上,對檢測系統進行了整體設計。測試結果表明,系統有較高的檢測率,可以滿足實時人臉檢測的要求。
關鍵詞 人臉檢測;FPGA;AdaBoost算法;分類器
人臉檢測是指在圖像中判斷是否有人臉存在,并且將檢測到的人臉部分在圖像中標識出來的過程。作為人臉信息處理中的一項關鍵技術,人臉檢測在自動人臉識別、視頻會議、智能人機交互等領域得到廣泛應用。目前人臉檢測系統多采用PC或DSP作為處理平臺。在PC上,人臉檢測系統實現雖已經達到基本要求,但由于攜帶不便,無法滿足實時檢測,且成本較高。采用通用的DSP方式,外圍電路較復雜,設計難度大,調試也需要較長的時間,且系統的可擴展性和移植性差。文中利用SOPC技術設計了基于NiosⅡ處理器的人臉檢測系統,不僅達到了實時性要求,而且在PC上開發的程序,可方便地移植到Nios II處理器上。
1 Nios II處理器
Nios II處理器是Altera公司為其FPGA產品配套開發的軟核CPU。在邏輯功能上,它是一款通用的RISC結構的CPU;在實現方式上,它在FPGA上通過編程實現。由于Nios II有一個開放式的ALU,通過用戶自定義指令集,可以方便地完成對系統的操作;同時采用哈佛結構的總線模式,大幅地提高了系統的處理速度;另外,Nios II系統中的外設具有可配置性,這在較大程度上簡化了硬件開發的難度,縮短了產品開發周期。
2 算法概述
文中采用Viola P提出的基于Haar特征的AdaBoost人臉檢測算法,該算法主要分為以下3部分:
(1)使用Haar-like特征表示人臉,將“積分圖”的概念用于Haar矩形特征的快速計算。
(2)使用AdaBoost算法訓練得到大量弱分類器,按照權值補償的方式級聯得到強分類器。
(3)將訓練得到的強分類器串聯組成層疊分類器,這種結構能及時摒棄非人臉圖像子模塊,減少了計算的數據量,有效提高系統的檢測速度。
訓練得到一個好的分類器,將大幅提高系統性能。文中通過對大量的人臉及非人臉圖像進行訓練,經過多次迭代,獲得一系列弱分類器。在迭代過程當中,選擇錯誤率最小的弱分類器作為本次迭代產生的弱分類器hn(x),之后更新樣本權值,使得那些在上次檢測過程中被誤判的樣本在此次檢測時能得到足夠的重視,然后再次迭代,獲得新的弱分類器,以此類推,經過k次迭代,得到k個弱分類器,而所有弱分類器組合后便得到分類能力較強的強分類器。
系統中,每級強分類器都有相應的閾值,通過調整每級強分類器的閾值,使得幾乎所有含人臉的圖像都可以順利通過分類器,而絕大多數的非人臉圖像被拒絕。分類器位置越靠前,只需少量的特征即可濾除大量的非人臉圖像,而位置靠后,分類器的結構相對較復雜,需要較多的特征才能排除那些具有一定人臉特征的非人臉圖像。最終,通過每級強分類器的檢測,人臉圖像將被保留,而非人臉圖像則在檢測過程當中被某級強分類器所淘汰。
概括說來,該檢測算法的主要流程為:首先對檢測圖像進行積分圖運算,然后用一定大小的子窗口遍歷整幅待檢測圖像,并將子窗口截取到的圖像輸入到分類器中判斷是否包含人臉,若該子圖像通過全部強分類器,則判定當前子圖像包含人臉特征,記錄該子圖像的位置和大小,否則拋棄當前子圖像,進入下一幀的檢測,當該子窗口遍歷整幅圖像后,放大子窗口尺寸,重新遍歷待檢測圖像,直到子窗口大小超過圖像大小,檢測結束,流程如圖3所示。
3 人臉檢測系統的硬件設計框架
按照人臉檢測系統的功能要求,可以將整個系統分為幾個模塊:視頻采集模塊、視頻緩存模塊、視頻輸出模塊、人臉檢測算法實現模塊、IO接口模塊(LCD顯示模塊和按鍵模塊);同時為項目開發的延續,在不影響系統功能的基礎上再添加通訊接口模塊,這樣既可以實現數據的遠距離傳輸,又能與個人PC協同處理。
系統的工作流程:通過CCD攝像機(25幀/s)采集視頻,之后利用ADV7121將CCD送來的NTSC、PAL模擬視頻信號轉換成符合CCIR 656標準的YCrCb4:2:2視頻數據;然后在FPGA中通過視頻采集模塊、視頻緩存模塊、視頻輸出模塊、人臉檢測算法實現模塊實現人臉檢測;最后在LCD上顯示最終檢測結果。通過FPGA內部的I2C總線控制器模塊,實現對ADV7121視頻解碼芯片的配置。視頻輸出模塊,通過控制信號提取、制式檢測、灰度有效數據提取等單元,完成視頻數據流中灰度圖像數據的提取。人臉檢測算法實現模塊根據AdaBoost人臉檢測算法流程對人臉進行檢測,然后輸出人臉的相關數據。LCD顯示模塊主要是輸出行同步信號(HS)和場同步信號(VS),結合人臉檢測算法實現模塊的檢測結果和視頻緩存模塊存放的視頻數據,完成人臉位置顯示和視頻數據中人臉位置標定。硬件系統的設計框架如圖4所示。
具體功能流程如下:
(1)初始化:FPGA通過I2C總線傳輸SDAT和SCLK信號,完成對ADV7121的配置;來自模擬攝像機的模擬視頻信號,經過ADV7121,輸出ITU—RBT.656格式數字視頻信號。
(2)FPGA將轉換后的數字視頻數據傳輸給SRAM1。圖5為視頻采集模塊框圖。ADV7121主要完成視頻數據采集,其視頻數據總線、幀圖像數據時鐘(PCLK)、場同步信號(Vsync)、行同步信號(Hsync)與FPGA視頻采集模塊相連。FPGA協調兩塊SRAM“乒乓模式”的讀寫操作,并完成模塊的外部接口。
(3)FPGA等待一幀圖像數據存儲結束后,調用人臉檢測模塊,同時等待下一幀圖像數據,并存儲到SRAM2。
(4)檢測結束,FPGA將得到的人臉位置寫回圖像所在SRAM中。
(5)當SRAM2存儲完畢,通知人臉檢測模塊,同時等待下一幀圖像數據,并存儲到SRAM1。檢測結束,將得到的人臉位置坐標寫回圖像所在SRAM中。每秒25幀,每幀周期40 ms,因此從寫入視頻圖像到檢測模塊返回結果,需要在40 ms內完成。
4 實驗結果
經過對A、B、C 3名同學在多種不同情況下的反復測試,得到測試數據如表1所示。
其中,N、n、FR分別為該條件下測試的總次數、錯檢次數以及誤檢率。
此外,還對網絡上的具有多個人臉的圖像進行了測試,實驗結果表明,系統對多人臉模式也有較好的識別能力,效果圖如圖6所示。
5 實驗結論
通過對實驗結果的分析,可得如下結論:
(1)檢測速度:通過分析人臉檢測算法,經過訓練分類器、定點化、以及硬件加速后,使人臉檢測系統在DE-2開發板平臺上,基本達到實時檢測的效果。
(2)檢測定位:從檢測結果可以看到,人臉的范圍較小,側重點主要集中在眉毛、眼睛、鼻子、嘴唇等器官上,沒有耳朵信息特征表現。這是因為人臉訓練庫主要是圍繞幾個主要特征,所以檢測定位是小區域定位。
(3)檢測率與誤檢率:通過反復實驗可以看到,該系統具有較高的檢測率和可以接受的誤檢率,尤其是在正面人臉、小角度傾斜、光照比較均勻的情況下。漏檢往往是因為頭像過小、臉部特征發生暫時性變化(戴眼鏡)、只出現部分人臉或偏轉角度過大,又或者光照不均勻等。而那些被判定為人臉的非人臉圖像,通常是因為背景復雜,而且該圖像又具有人臉某些特征等因素造成的。
(4)資源利用率:從最終的綜合和仿真結果來看,在所有模塊當中,積分圖資源占用最多,分類器計算時間最長,因此選用一種好的處理架構,能大幅提升系統的整體性能。
評論