基于Zynq平臺硬件加速的體感游戲
作者/ 韋笠 陳銳 毛穎 王曰海 浙江大學(xué) 信息與電子工程學(xué)院(浙江 杭州 310027)
本文引用地址:http://m.butianyuan.cn/article/201610/311930.htm摘要:隨著嵌入式系統(tǒng)的發(fā)展,我們已經(jīng)越來越離不開它們。本文設(shè)計了一個基于Xilinx ZYNQ平臺硬件加速的體感游戲。首先,我們完成了手勢方向控制貪食蛇游戲,該游戲通過進行膚色檢測、手勢跟蹤并分析軌跡,來控制貪食蛇的位置。然后,我們實現(xiàn)了用verilog語言編寫的運行在FPGA上的膚色學(xué)習(xí)和識別算法。最后,軟件游戲調(diào)用基于AXI總線的協(xié)議與硬件加速單元通信,膚色識別算法運行時間減少了43.2713%,達到了加速的效果。
前言
嵌入式系統(tǒng)發(fā)展至今,已被廣泛應(yīng)用在手機、手環(huán)、平板電腦等設(shè)備上。然而,由于其中央處理器處理性能有限,異構(gòu)處理越來越受到關(guān)注。異構(gòu)處理是將通用處理器(如ARM芯片)與數(shù)字信號處理器(DSP,Digital Signal Process)、現(xiàn)場可編程門陣列(FPGA,F(xiàn)ield Programmable Gate Array)協(xié)同處理。有觀點認(rèn)為,隨著應(yīng)用的變化、需求的增長以及技術(shù)的發(fā)展,異構(gòu)多核必將成為未來多核的發(fā)展主流[1]。
Xillinx公司推出的Zynq-7000系列全可編程片上系統(tǒng)(SoC, System on Chip)即是這樣的異構(gòu)芯片。它集成ARM Cortex A9雙核和FPGA芯片,為兩者協(xié)同處理提供了可能。以圖像處理為例,使用FPGA+ARM協(xié)同處理比單純使用ARM處理器進行直方圖均衡化、Sobel邊緣檢測和3×3中值濾波分別提高了5.5倍、2.4倍和10.9倍[2]。可見,ARM+FPGA的處理架構(gòu)在圖像處理上有很大的潛力。本文以Zynq系列的Zybo開發(fā)板為平臺,設(shè)計了一個手勢控制的貪食蛇游戲。
1 硬件部分
1.1 硬件架構(gòu)
本項目的目標(biāo)在于硬件加速,即讓FPGA承擔(dān)一部分圖像處理的任務(wù)。為了讓整個系統(tǒng)協(xié)同工作起來,就需要在Cortex-A9核和FPGA邏輯資源之間建立通信的通道,這條通道就是AXI總線。最終我們選擇了Xillybus公司的Xillybus Lite總線[3]。在架構(gòu)上,它是位于AXI總線[4]之下的一個通信協(xié)議。系統(tǒng)架構(gòu)如圖1所示,硬件部分整體框架如圖2所示。
從Linux系統(tǒng)到FPGA部分的整體框架圖如圖2,在Linux系統(tǒng)中分別編寫了兩個設(shè)備的驅(qū)動文件:xillybus_write_32 和xillybuf_read_32,用于與xillybus_lite總線進行通信。Linux系統(tǒng)向xillybus_write_32設(shè)備中傳入數(shù)據(jù)流,數(shù)據(jù)流位寬為32bit,通過AXI總線和xillybus_lite總線傳入FIFO1,到達膚色識別IP核模塊,由膚色識別產(chǎn)生膚色判別結(jié)果,并將結(jié)果傳入FIFO2,然后經(jīng)過xillybus_lite總線協(xié)議和AXI總線協(xié)議,到達xillybus_read_32設(shè)備文件,在Linux系統(tǒng)中可以從xillybus_read_32設(shè)備文件中讀出。
1.2 膚色識別算法
皮膚模型中有單高斯、混合高斯[5]、貝葉斯模型和橢圓模型等。經(jīng)過前人學(xué)者大量的皮膚統(tǒng)計信息可以知道,如果將皮膚信息映射到Y(jié)CrCb空間,這些皮膚像素點近似成一個橢圓分布[6]。因此,如果我們得到了一個CrCb的橢圓,下次來一個坐標(biāo)(Cr, Cb)我們只需判斷它是否在橢圓內(nèi)(包括邊界),如果是,則可以判斷其為皮膚,否則就是非皮膚像素點[7-8]。
因此,我們采集了膚色的樣本點,將其投影到此平面,投影后,進行了相應(yīng)的非線性變換K-L[9]變換,進而形成統(tǒng)計橢圓模型如圖3(a)所示。
由于在FPGA中實現(xiàn)乘除法器比較麻煩,且會引入較大的時延,因此,我們用一幅圖像來存儲這個橢圓,而不是直接采用橢圓數(shù)學(xué)方程。該圖像是二值圖像,即橢圓區(qū)域內(nèi)部為白色,其它地方為黑色。當(dāng)其需要判斷其它像素點時,只需將該像素點轉(zhuǎn)換成Cr、Cb兩個坐標(biāo),然后在上面的橢圓中找到該坐標(biāo)的值,如果非0,則為皮膚,反之亦然。橢圓模型的二值圖像如圖3(a)所示。在FPGA中,我們使用了一個位寬為1bit,深度為65536bit,地址線寬為16bit的ROM核來存儲這張圖片。如圖4所示。
1.3 膚色識別算法的實現(xiàn)
由于膚色識別算法在YCrCb空間中可近似用橢圓模型進行模擬,因此,要先將RGB空間的像素點轉(zhuǎn)化到Y(jié)CrCb空間。 轉(zhuǎn)換公式如下:
Y =(0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr=(0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb=-(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
由于涉及到了浮點數(shù)的乘法,現(xiàn)將系數(shù)整形化。即在上述公式中左右各乘以1024,即左移10位。
Y << 10 = (12’d263 * R) + (12’d516 * G) + (12’d100 * B) + 24’d16384
Cr << 10 = (12’d450 * R) - (12’d377 * G) - ( 12’d73 * B) + 24’d131072
Cb << 10 = -(12’d152 * R) - (12’d298 * G) + (12’d450 * B) + 24’d131072
因為這里用到了9次12bit和8bit的乘法,所以就用了9個12bit和8bit的乘法器。
圖5是RGB轉(zhuǎn)YUV部分的仿真圖,可以看到,轉(zhuǎn)換基本是正確的,但是從RGB轉(zhuǎn)到Y(jié)UV有三個時鐘的時延。從RGB轉(zhuǎn)到Y(jié)UV有三個時鐘的時延,由YUV從ROM核中得到膚色判決結(jié)果有2個時鐘的時延,所以從RGB值傳入膚色判決IP核到得到膚色判決結(jié)果有5個時鐘的時延。
圖6是膚色檢測模塊實測的效果,除了背后的柜子由于比較接近膚色,有一定的誤判,可以認(rèn)為效果還不錯。
2 軟件部分
我們先在Zybo上配置從SD卡啟動的嵌入式Xilinux系統(tǒng),并編譯了OpenCV2.4.10的源碼,這樣就可以使用OpenCV的視覺庫函數(shù)了。
在軟件代碼部分,主要利用膚色模型分割手部,并追蹤手部運動軌跡,根據(jù)手部頂點運動軌跡判斷出手勢運動方向。步驟如下:
1)對于每一幀輸入的圖像,首先進行中值濾波等預(yù)處理,然后利用膚色模型分割出手勢部分。膚色模型主要是先將圖像轉(zhuǎn)換到Y(jié)CrCb空間,然后根據(jù)膚色在YCrCb空間的橢圓分布來判別屬于膚色的像素點,并形成膚色二值化圖像。
2)經(jīng)過一些圖像去噪和形態(tài)學(xué)腐蝕膨脹操作去掉一些較大的噪點。假設(shè)圖像區(qū)域沒有頭部的干擾,那么面積最大的輪廓即為手部,確定手部輪廓后,找到中心點和頂點(即輪廓中縱坐標(biāo)最小的點,即最靠上方的點)。
3)確定軌跡和判斷方向,將方向參數(shù)傳遞給游戲部分即可。方向參數(shù)的確定主要依據(jù)相鄰兩幀的頂點坐標(biāo)值。判斷邏輯如圖7所示。
游戲部分,如圖8(a)所示,每次接收到判斷出的手勢方向后改變蛇的方向即可。貪食蛇的前進是使用rectangle函數(shù)一楨一幀畫出來的,畫果實使用了circle函數(shù),隨機生成果實使用了cvRandInt函數(shù),充分利用了OpenCV的繪圖功能。
3 實驗結(jié)果
我們使用C語言的time函數(shù)庫來計算運行膚色識別代碼段的時間。以處理480*640的彩色視頻流為例,計算運算50幀的平均耗時,并計算了10組,求最終平均數(shù)。純軟件膚色識別代碼運行的平均耗時為223982.611μs,有硬件加速的膚色識別算法運行時間是127062.454μs,耗時減少了43.2713%,達到了硬件加速的效果。
有研究者在Zynq平臺上設(shè)計了一個基于膚色識別的人臉檢測算法,使用了硬件加速。仿真結(jié)果表明,使用硬件加速可提高80%的效率[10]??梢姡O(shè)計達到了硬件加速的效果,也還有值得改進的空間。
4 結(jié)束語
本文設(shè)計了一個基于Zynq平臺硬件加速的體感游戲,內(nèi)容包括軟件程序編寫、硬件算法設(shè)計和系統(tǒng)硬件加速。我們對膚色識別算法的硬件加速,使這部分運行時間減少了43.2713%,提升了系統(tǒng)效率,達到了加速的目的。
基于FPGA的異構(gòu)計算仍有很大的潛力,包括算法在硬件平臺上的移植、硬件軟件部分的交互、系統(tǒng)性能的提升等。對于嵌入式系統(tǒng)的發(fā)展,異構(gòu)計算有著長遠而重要的意義。
參考文獻:
[1]陳芳園,張冬松,王志英.異構(gòu)多核處理器體系結(jié)構(gòu)設(shè)計研究[J].計算機工程與科學(xué),2011,12:27-36.
[2]劉宏,符意德.基于Zynq芯片的圖像處理系統(tǒng)平臺設(shè)計[J].計算機與現(xiàn)代化,2015,08:43-47.
[3]Lin Z, Chow P. Zcluster: A zynq-based hadoop cluster[C]//Field-Programmable Technology (FPT), 2013 International Conference on. IEEE, 2013: 450-453.
[4]高偉林,曹峰,佟川,等.基于Zynq的圖形生成電路設(shè)計與實現(xiàn)[J].液晶與顯示, 2014, 29(6): 944-949.
[5]Vezhnevets V, Sazonov V, and Andreeva A. A survey on pixel-based skin color detection techniques. In Graphicon, Moscow, Russia, 2003: 85–92.
[6]Bojic N and Pang K K. Adaptive skin segmentation for head and shoulder video sequences. Visual communications and Image Processing, SPIE, 2000, 4067: 704-711.
[7]Huynh-Thu Q, Meguro M, Kaneko M. Skin-color extraction in images with complex background and varying illumination[C]//Applications of Computer Vision, 2002.(WACV 2002). Proceedings. Sixth IEEE Workshop on. IEEE, 2002: 280-285.
[8]學(xué)習(xí)OpenCV——膚色檢測:橢圓模型 (&最大連通區(qū)域). http://blog.csdn.net/yangtrees/article/details/8269984.2012-12-07/2016-05-01.
[9]章毓晉.圖象工程(上)[M].北京:清華大學(xué)出版社.1999: 68-70.
[10]T. Han, G. W. Liu, H. Cai and B. Wang, "The face detection and location system based on Zynq," Fuzzy Systems and Knowledge Discovery (FSKD), 2014 11th International Conference on, Xiamen, 2014, pp. 835-839.
本文來源于中國科技期刊《電子產(chǎn)品世界》2016年第10期第50頁,歡迎您寫論文時引用,并注明出處。
評論