基于Zynq平臺(tái)硬件加速的體感游戲
作者/ 韋笠 陳銳 毛穎 王曰海 浙江大學(xué) 信息與電子工程學(xué)院(浙江 杭州 310027)
本文引用地址:http://www.ex-cimer.com/article/201610/311930.htm摘要:隨著嵌入式系統(tǒng)的發(fā)展,我們已經(jīng)越來越離不開它們。本文設(shè)計(jì)了一個(gè)基于Xilinx ZYNQ平臺(tái)硬件加速的體感游戲。首先,我們完成了手勢(shì)方向控制貪食蛇游戲,該游戲通過進(jìn)行膚色檢測(cè)、手勢(shì)跟蹤并分析軌跡,來控制貪食蛇的位置。然后,我們實(shí)現(xiàn)了用verilog語言編寫的運(yùn)行在FPGA上的膚色學(xué)習(xí)和識(shí)別算法。最后,軟件游戲調(diào)用基于AXI總線的協(xié)議與硬件加速單元通信,膚色識(shí)別算法運(yùn)行時(shí)間減少了43.2713%,達(dá)到了加速的效果。
前言
嵌入式系統(tǒng)發(fā)展至今,已被廣泛應(yīng)用在手機(jī)、手環(huán)、平板電腦等設(shè)備上。然而,由于其中央處理器處理性能有限,異構(gòu)處理越來越受到關(guān)注。異構(gòu)處理是將通用處理器(如ARM芯片)與數(shù)字信號(hào)處理器(DSP,Digital Signal Process)、現(xiàn)場(chǎng)可編程門陣列(FPGA,F(xiàn)ield Programmable Gate Array)協(xié)同處理。有觀點(diǎn)認(rèn)為,隨著應(yīng)用的變化、需求的增長(zhǎ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處理器進(jìn)行直方圖均衡化、Sobel邊緣檢測(cè)和3×3中值濾波分別提高了5.5倍、2.4倍和10.9倍[2]??梢?,ARM+FPGA的處理架構(gòu)在圖像處理上有很大的潛力。本文以Zynq系列的Zybo開發(fā)板為平臺(tái),設(shè)計(jì)了一個(gè)手勢(shì)控制的貪食蛇游戲。
1 硬件部分
1.1 硬件架構(gòu)
本項(xiàng)目的目標(biāo)在于硬件加速,即讓FPGA承擔(dān)一部分圖像處理的任務(wù)。為了讓整個(gè)系統(tǒng)協(xié)同工作起來,就需要在Cortex-A9核和FPGA邏輯資源之間建立通信的通道,這條通道就是AXI總線。最終我們選擇了Xillybus公司的Xillybus Lite總線[3]。在架構(gòu)上,它是位于AXI總線[4]之下的一個(gè)通信協(xié)議。系統(tǒng)架構(gòu)如圖1所示,硬件部分整體框架如圖2所示。
從Linux系統(tǒng)到FPGA部分的整體框架圖如圖2,在Linux系統(tǒng)中分別編寫了兩個(gè)設(shè)備的驅(qū)動(dòng)文件:xillybus_write_32 和xillybuf_read_32,用于與xillybus_lite總線進(jìn)行通信。Linux系統(tǒng)向xillybus_write_32設(shè)備中傳入數(shù)據(jù)流,數(shù)據(jù)流位寬為32bit,通過AXI總線和xillybus_lite總線傳入FIFO1,到達(dá)膚色識(shí)別IP核模塊,由膚色識(shí)別產(chǎn)生膚色判別結(jié)果,并將結(jié)果傳入FIFO2,然后經(jīng)過xillybus_lite總線協(xié)議和AXI總線協(xié)議,到達(dá)xillybus_read_32設(shè)備文件,在Linux系統(tǒng)中可以從xillybus_read_32設(shè)備文件中讀出。
1.2 膚色識(shí)別算法
皮膚模型中有單高斯、混合高斯[5]、貝葉斯模型和橢圓模型等。經(jīng)過前人學(xué)者大量的皮膚統(tǒng)計(jì)信息可以知道,如果將皮膚信息映射到Y(jié)CrCb空間,這些皮膚像素點(diǎn)近似成一個(gè)橢圓分布[6]。因此,如果我們得到了一個(gè)CrCb的橢圓,下次來一個(gè)坐標(biāo)(Cr, Cb)我們只需判斷它是否在橢圓內(nèi)(包括邊界),如果是,則可以判斷其為皮膚,否則就是非皮膚像素點(diǎn)[7-8]。
因此,我們采集了膚色的樣本點(diǎn),將其投影到此平面,投影后,進(jìn)行了相應(yīng)的非線性變換K-L[9]變換,進(jìn)而形成統(tǒng)計(jì)橢圓模型如圖3(a)所示。
由于在FPGA中實(shí)現(xiàn)乘除法器比較麻煩,且會(huì)引入較大的時(shí)延,因此,我們用一幅圖像來存儲(chǔ)這個(gè)橢圓,而不是直接采用橢圓數(shù)學(xué)方程。該圖像是二值圖像,即橢圓區(qū)域內(nèi)部為白色,其它地方為黑色。當(dāng)其需要判斷其它像素點(diǎn)時(shí),只需將該像素點(diǎn)轉(zhuǎn)換成Cr、Cb兩個(gè)坐標(biāo),然后在上面的橢圓中找到該坐標(biāo)的值,如果非0,則為皮膚,反之亦然。橢圓模型的二值圖像如圖3(a)所示。在FPGA中,我們使用了一個(gè)位寬為1bit,深度為65536bit,地址線寬為16bit的ROM核來存儲(chǔ)這張圖片。如圖4所示。
1.3 膚色識(shí)別算法的實(shí)現(xiàn)
由于膚色識(shí)別算法在YCrCb空間中可近似用橢圓模型進(jìn)行模擬,因此,要先將RGB空間的像素點(diǎn)轉(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
由于涉及到了浮點(diǎn)數(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
因?yàn)檫@里用到了9次12bit和8bit的乘法,所以就用了9個(gè)12bit和8bit的乘法器。
圖5是RGB轉(zhuǎn)YUV部分的仿真圖,可以看到,轉(zhuǎn)換基本是正確的,但是從RGB轉(zhuǎn)到Y(jié)UV有三個(gè)時(shí)鐘的時(shí)延。從RGB轉(zhuǎn)到Y(jié)UV有三個(gè)時(shí)鐘的時(shí)延,由YUV從ROM核中得到膚色判決結(jié)果有2個(gè)時(shí)鐘的時(shí)延,所以從RGB值傳入膚色判決IP核到得到膚色判決結(jié)果有5個(gè)時(shí)鐘的時(shí)延。
圖6是膚色檢測(cè)模塊實(shí)測(cè)的效果,除了背后的柜子由于比較接近膚色,有一定的誤判,可以認(rèn)為效果還不錯(cuò)。
2 軟件部分
我們先在Zybo上配置從SD卡啟動(dòng)的嵌入式Xilinux系統(tǒng),并編譯了OpenCV2.4.10的源碼,這樣就可以使用OpenCV的視覺庫(kù)函數(shù)了。
在軟件代碼部分,主要利用膚色模型分割手部,并追蹤手部運(yùn)動(dòng)軌跡,根據(jù)手部頂點(diǎn)運(yùn)動(dòng)軌跡判斷出手勢(shì)運(yùn)動(dòng)方向。步驟如下:
1)對(duì)于每一幀輸入的圖像,首先進(jìn)行中值濾波等預(yù)處理,然后利用膚色模型分割出手勢(shì)部分。膚色模型主要是先將圖像轉(zhuǎn)換到Y(jié)CrCb空間,然后根據(jù)膚色在YCrCb空間的橢圓分布來判別屬于膚色的像素點(diǎn),并形成膚色二值化圖像。
2)經(jīng)過一些圖像去噪和形態(tài)學(xué)腐蝕膨脹操作去掉一些較大的噪點(diǎn)。假設(shè)圖像區(qū)域沒有頭部的干擾,那么面積最大的輪廓即為手部,確定手部輪廓后,找到中心點(diǎn)和頂點(diǎn)(即輪廓中縱坐標(biāo)最小的點(diǎn),即最靠上方的點(diǎn))。
3)確定軌跡和判斷方向,將方向參數(shù)傳遞給游戲部分即可。方向參數(shù)的確定主要依據(jù)相鄰兩幀的頂點(diǎn)坐標(biāo)值。判斷邏輯如圖7所示。
游戲部分,如圖8(a)所示,每次接收到判斷出的手勢(shì)方向后改變蛇的方向即可。貪食蛇的前進(jìn)是使用rectangle函數(shù)一楨一幀畫出來的,畫果實(shí)使用了circle函數(shù),隨機(jī)生成果實(shí)使用了cvRandInt函數(shù),充分利用了OpenCV的繪圖功能。
3 實(shí)驗(yàn)結(jié)果
我們使用C語言的time函數(shù)庫(kù)來計(jì)算運(yùn)行膚色識(shí)別代碼段的時(shí)間。以處理480*640的彩色視頻流為例,計(jì)算運(yùn)算50幀的平均耗時(shí),并計(jì)算了10組,求最終平均數(shù)。純軟件膚色識(shí)別代碼運(yùn)行的平均耗時(shí)為223982.611μs,有硬件加速的膚色識(shí)別算法運(yùn)行時(shí)間是127062.454μs,耗時(shí)減少了43.2713%,達(dá)到了硬件加速的效果。
有研究者在Zynq平臺(tái)上設(shè)計(jì)了一個(gè)基于膚色識(shí)別的人臉檢測(cè)算法,使用了硬件加速。仿真結(jié)果表明,使用硬件加速可提高80%的效率[10]??梢姡O(shè)計(jì)達(dá)到了硬件加速的效果,也還有值得改進(jìn)的空間。
4 結(jié)束語
本文設(shè)計(jì)了一個(gè)基于Zynq平臺(tái)硬件加速的體感游戲,內(nèi)容包括軟件程序編寫、硬件算法設(shè)計(jì)和系統(tǒng)硬件加速。我們對(duì)膚色識(shí)別算法的硬件加速,使這部分運(yùn)行時(shí)間減少了43.2713%,提升了系統(tǒng)效率,達(dá)到了加速的目的。
基于FPGA的異構(gòu)計(jì)算仍有很大的潛力,包括算法在硬件平臺(tái)上的移植、硬件軟件部分的交互、系統(tǒng)性能的提升等。對(duì)于嵌入式系統(tǒng)的發(fā)展,異構(gòu)計(jì)算有著長(zhǎng)遠(yuǎn)而重要的意義。
參考文獻(xiàn):
[1]陳芳園,張冬松,王志英.異構(gòu)多核處理器體系結(jié)構(gòu)設(shè)計(jì)研究[J].計(jì)算機(jī)工程與科學(xué),2011,12:27-36.
[2]劉宏,符意德.基于Zynq芯片的圖像處理系統(tǒng)平臺(tái)設(shè)計(jì)[J].計(jì)算機(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è)計(jì)與實(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——膚色檢測(cè):橢圓模型 (&最大連通區(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.
本文來源于中國(guó)科技期刊《電子產(chǎn)品世界》2016年第10期第50頁,歡迎您寫論文時(shí)引用,并注明出處。
評(píng)論