基于FPGA的手勢識別系統研究
*基金項目:江蘇省高等學(xué)校大學(xué)生創(chuàng )新創(chuàng )業(yè)訓練計劃項目,項目編號:202110900004Y;
江蘇省高校自然科學(xué)研究面上項目,項目編號:16KJB510007;
教育部產(chǎn)學(xué)合作協(xié)同育人項目,項目編號:201901163002、202002094006
作者簡(jiǎn)介:陳虹玉(2001—),女,2019級電子信息工程專(zhuān)業(yè)本科生
通信作者:張福鼎(1982—),男,講師(Email:zfdc@qq.com)
0 引言
FPGA 在當今社會(huì )很多地方都要用到,具有非常廣闊的市場(chǎng)前景,通過(guò)不斷研發(fā)已經(jīng)成為一個(gè)成熟器件[1],作為一種可編程邏輯器件,具有半定制、電路靈活,門(mén)電路數多、實(shí)時(shí)性強、低成本等優(yōu)點(diǎn)[2],在市場(chǎng)上有了立足之地,取得優(yōu)異成績(jì),并朝著(zhù)多元化發(fā)展方向發(fā)展[3]。FPGA 最大特點(diǎn)是靈活可實(shí)現各種電路設計,因此漸漸取代其他電子設計,成為了眾多廠(chǎng)商及個(gè)人的首選[4]。
先前的人機交互是傳統的鍵盤(pán)及鼠標模式,而現在的交互模式更加寬泛[5]。手勢是最能表達人類(lèi)動(dòng)作的一種形式,反映出來(lái)的是最直觀(guān)的感受,在這計算機流行的時(shí)代,能否將手勢和機器語(yǔ)言聯(lián)系在一起,呈現出人機互動(dòng)的形式,特別是當今游戲盛行的時(shí)代,手語(yǔ)識別系統也可以應用到游戲中[6]。最常見(jiàn)的體感游戲便是最好的證明,人類(lèi)通過(guò)穿戴體感設備,從而將人體運動(dòng)傳輸到電腦中,經(jīng)過(guò)處理并及時(shí)顯現出來(lái)[7]。
因此手勢識別在生活中的運用十分廣泛,所以越來(lái)越多的人致力于此項研究,類(lèi)如數據手套的常見(jiàn)識別系統也是層出不窮,而手勢系統這一新生事物還處于研發(fā)階段,所以?xún)r(jià)格還很高,不適用于普及當今社會(huì ),人們著(zhù)力于研究手勢識別的發(fā)展技術(shù),力圖在手勢識別方面獲得更多的成功。手勢識別系統的研究的重要性已經(jīng)不言而喻,在未來(lái)的生活中,手勢識別將會(huì )迅速發(fā)展[8]。
手勢識別是人類(lèi)和儀器溝通的橋梁,能否完成手勢識別這一任務(wù),也關(guān)系到和電腦等機器的互動(dòng)和溝通[9]。然而,現在手勢識別技術(shù)還不成熟,基于計算機視覺(jué)的交互系統容易收到外界干擾,不能識別大量手勢[10]。手勢跟蹤等[11]穩定性差,使得手勢成為一種復雜可變形體,有時(shí)甚至不能準確識別出來(lái)[12]。
本論文的主要內容是基于FPGA 的手勢識別系統研究,先搭建了手勢識別框架,并設計手勢識別算法,外部硬件由數據收集模塊、信號處理模塊、結果顯示模塊和外部觸摸板模塊組成,再根據對應的算法來(lái)實(shí)現他們的功能。
1 基于FPGA的手勢識別系統
1.1 硬件框架
基于FPGA 的硬件框架如圖1 所示,分為數據采集模塊,信號處理模塊,結果顯示模塊,外部觸摸板模塊和攝像頭模塊。
為了日??梢噪S身攜帶,也為了方便我們的穿戴,所以安裝在人體身上的模塊必須要小巧簡(jiǎn)單,因此選擇了尺寸較小的采集模塊,具體的數據為長(cháng)30 mm,寬15mm,厚2mm。具體的由控制器和傳感器組合而成,通過(guò)捕捉人體移動(dòng)信號,將信號從控制器發(fā)向傳感器,由傳感器進(jìn)行數據采樣,最后再通過(guò)控制芯片傳遞給其他設備。經(jīng)測定,sEMG 傳感器工作時(shí)的信噪比保持在20dB 以上,ACC 芯片在運轉之時(shí)有很多狀態(tài),尤其是在1.5 gn 時(shí),會(huì )形成一個(gè)驚人的信號,分辨率超出很多科學(xué)家的想象。此時(shí)對信號傳輸的要求會(huì )非常高,需要不容易產(chǎn)生波動(dòng)、大小合適,所以在此推薦CC2500 這個(gè)芯片。CC2500 之所以獲得眾多公司的青睞,除了以上的特長(cháng),還能夠幫助公司節約能源損耗,為公司的利益也是謀取了福利。在數據采集模塊中,這兩個(gè)芯片不可或缺,起到了至關(guān)重要的作用,更加有利于對實(shí)時(shí)數據的采集。
信號處理模塊首先配備了獲得信號的設備,為了得到精準的信號,我們這里采用CC2500,可以連接在FPGA 上,但是他們兩個(gè)卻絲毫沒(méi)有關(guān)系,分別處于不同的頻道,不影響各自的工作。信號處理模塊包含了多個(gè)硬件,而其中最關(guān)鍵的、最為核心的,便是FPGA 了。
FPGA 的硬件構成較為復雜,其中有上萬(wàn)邏輯單元等。收集模塊已經(jīng)收集到了sEMG 和ACC 信號,那么在處理模塊中的主要目的就是識別這兩個(gè)信號,在接下來(lái)的軟件設計中,將會(huì )詳細說(shuō)明算法。FPGA 所對應的功能已經(jīng)在上述中所詳細介紹,對應的如圖2 所示。
結果顯示模塊的功能是顯示識別的結果,要求在LCD屏上快速顯現出來(lái),對其處理速度有一定要求,所以我們在此模塊配備了LCD屏及單片機,采用的單片機也具有超高的配置,和如今的USB 接口一樣,傳輸速度使得我們立馬就能在LCD 屏上看見(jiàn)結果。
觸摸板結構圖如圖3 所示,核心處理器是STM32微處理器,為了方便具體使用,在處理器上外接一塊控制板,觸摸屏控制板的型號是TSC2046,觸摸板在模塊中的作用就是選擇手勢識別出來(lái)的結果,如果沒(méi)有與之相匹配的,就通過(guò)觸摸板,輸入自己想表達的手勢,另外,觸摸板上還能顯示其他信息,如顯示電池容量,顯示實(shí)時(shí)溫度等。
攝像頭模塊是作為整個(gè)系統的一個(gè)關(guān)鍵,如果不能實(shí)現這一模塊,將會(huì )無(wú)法進(jìn)行準確的識別,影響手勢識別結果的處理。此模塊的工作原理相當簡(jiǎn)單,首先攝像頭鎖定人手的具體方位,向處理模塊實(shí)時(shí)運達手勢的變化,同時(shí),鎖定了方位后,聯(lián)合傳感器,確定其他移動(dòng)設備,具體應用見(jiàn)如圖4 所示。
1.2 軟件框架
當信號發(fā)生在活動(dòng)段的時(shí)候,屏幕上就會(huì )出現sEMG信號,此時(shí)意味著(zhù)活動(dòng)段算法開(kāi)始執行。因為信號的差異性,所以要對收集到的數據進(jìn)行整理,然后傳遞給下一模塊,在下一模塊中檢測接收數據,根據傳遞的順序,依次接收信號。在活動(dòng)段中,傳送的單位是幀,也就是說(shuō)完成傳遞個(gè)1 信號,就意味著(zhù)1 幀的結束。
活動(dòng)段獲取算法是數據采集模塊所對應的軟件算法,通過(guò)計算平均絕對值,再用它來(lái)設計算法,具體完成操作如圖5 所示。由于不同的通道信號的數值是各不相同的,所以要計算出其總和,那么就需要采用以下方法,設置1個(gè)累加器1,用幀同步信號作為累加器1 的清零端,用位同步信號作為累加器1 時(shí)鐘,數據取絕對值后流入累加器1,每個(gè)幀同步來(lái)到時(shí)累加器1 輸出1次結果。32 點(diǎn)移動(dòng)平均用移位寄存器的結構實(shí)現,幀同步信號為移位寄存器提供時(shí)鐘,在每個(gè)時(shí)鐘周期進(jìn)行1次移位,累加器2 加入新進(jìn)寄存器的值,減去移出寄存器的值,累加的結果與閾值比較。采用了這種簡(jiǎn)便的算法后,給活動(dòng)段的檢測帶來(lái)了不少好處,既提升了檢測效率,又沒(méi)有過(guò)多的浪費資源。為了更好的檢測兩只手同時(shí)做出的手勢,我們在此放置了兩個(gè)檢驗模塊。
在這特征算法這一階段,首要目標就是找到特征值,就是對收集到的信號,計算出它的絕對平均值。在外面的SRAM 充當了數據收集的作用,里面集合了完整的數據,此時(shí)的信號被傳送到下一階段之時(shí),它所對應的在SRAM 中就有唯一的地址,然后對其做好記號,傳送結束后,此時(shí)又有新的對應的地址,并做好新的標記。接下來(lái),就可以通過(guò)整理出來(lái)的地址數據,先分別提取出來(lái),再完成運算。
ACC 信號是本次實(shí)驗中一個(gè)不可或缺的信號,其主要目的在于確定手勢的具體地址,為了更好的確定其坐標,可以用公式A=ΣX i/N 和u=Σ|X i-A|/N,后者是為了了解手勢的擺動(dòng)幅度。經(jīng)過(guò)嚴格的推理和證明,發(fā)現這兩個(gè)公式可以簡(jiǎn)化,并合成為1 個(gè)新的公式,即F=Σ|X i-C|/N,這個(gè)公式可以同時(shí)計算出平均值和一階矩,可以說(shuō)是十分便利,只需滿(mǎn)足條件C =0 和C =A,毫無(wú)疑問(wèn),這種計算方法有利的提高了計算的效率,也有效的解決了過(guò)多的占用FPGA 資源的問(wèn)題,達到了省時(shí)省力的效果。
因為采用的是除法算法,所以?xún)炔空紦藬盗魁嫶蟮倪壿媶卧?,從多次運算的實(shí)踐中可以看到,通過(guò)反復的算法實(shí)現,ACC 的出現是固定的,局限在固定數值之內,一般認為這個(gè)數值是256,再根據乘法運算,把所有可能出現的N 的倒數1/N(0~255)乘以65 536(2的16 次方)得到65 536/N,按照一一對應的原則,依次傳遞給RAM,將生成的地址,再傳遞給ROM,最后能夠計算出結果為65 536/N。接下來(lái)的步驟就是借助乘法器,在位數移動(dòng)16 位的基礎之上進(jìn)行乘法運算,最終獲取結果,最準確的數值可以達到萬(wàn)分之一,采用這種方法,既節約了計算的時(shí)間,又達到了精度高的要求,對于能夠實(shí)時(shí)的進(jìn)行大量的特征運算,達到了這一目的。
識別算法分為兩個(gè)步驟:首先,為了更好地確定其坐標,根據之前算法得出的特征進(jìn)行第1 次分類(lèi),然后結合sEMG 信號,對其第2 次分類(lèi)。為了確定手勢的具體位置,我們進(jìn)行以下步驟:先完成特征算法,計算出對應的平均值,最后對均值進(jìn)行分析判斷得出。要實(shí)現對靜態(tài)和動(dòng)態(tài)的區分,用兩者的一階矩作為判定的依據,當大于其對應的閾值時(shí)是動(dòng)態(tài)手勢,與之相反,就是靜態(tài)手勢。在識別算法中的分類(lèi)不是沒(méi)有好處的,如果沒(méi)有進(jìn)行分類(lèi)識別,會(huì )給這一算法帶來(lái)巨大的計算量,影響識別效率。
完成分類(lèi)后,把5 通道sEMG 的絕對均值組成特征向量,設計正態(tài)分布下的貝葉斯分類(lèi)器對手勢動(dòng)作進(jìn)行精確的分類(lèi)識別。分類(lèi)器的結構如圖6 所示。
圖6 分類(lèi)器結構
其中,X=(x1,x2, …,xd-1,xd),gi(X) 為類(lèi)別wi的判別函數,N 為類(lèi)別數。在這個(gè)手勢識別算法中,分類(lèi)器采用了對應的算法,對這個(gè)規則我們給予詳細的介紹,存在一個(gè)密度函數P(X|wi) 符合給定條件,呈正態(tài)分布的形式,μi 和Σi 分別表示X 在類(lèi)別wi 下的均值向量和協(xié)方差陣。經(jīng)過(guò)化簡(jiǎn),我們可以得到如下公式gi(X)=-ln|Σi |-(X-μi )T Σ-1i(X-μi ),i=1,2,3,…,N。
為了增加函數的準確性,采用不同的數據,代入分類(lèi)器實(shí)踐操作,這樣就能夠了解函數的組成部分。此時(shí)的算法還不能準確的對手勢進(jìn)行識別,仍需要借助在電腦上模擬完成。經(jīng)過(guò)反復的訓練,將生成的數據同函數融合在一起,便可以載入FPGA 的自生成ROM 中。最后對特征向量不斷的運算,在電腦上就可以呈現結果。
在本文的手勢系統中,對單手和雙手的識別是兼容的,對其數據采集后,都可以運行特征算法,并實(shí)現分類(lèi),最后在屏幕上呈現出手勢。識別結果用1 個(gè)字節表示,用bit 來(lái)顯示所代表的含義。單片機通過(guò)解析這個(gè)字節便可得知所需信息,進(jìn)一步做出反應。不論是單手手勢的識別,還是雙手手勢的識別,都確保了時(shí)效性,立馬就能識別出手勢特征,對手勢識別速度的發(fā)展做出貢獻。觸摸模塊軟件算法實(shí)現主要包括:
1)ucos 系統建立任務(wù),包括主任務(wù),用戶(hù)界面任務(wù),CAN 報文接收任務(wù)等;
2)ucGUI 圖形用戶(hù)界面程序,設計相關(guān)操作界面;
3)中斷服務(wù)程序,執行CAN 總線(xiàn)接收的中斷處理;
4)硬件平臺初始化程序,包括時(shí)鐘,CAN 模塊,觸摸屏等等的初始化;
5)LCD 的底層驅動(dòng)函數。
攝像上傳識別算法實(shí)現其主要思想是在攝像頭固定的情況下,通過(guò)減去背景圖像方法進(jìn)行運動(dòng)部分識別。在采集攝像頭數據后,首先要對背景進(jìn)行建模。本系統采用基于統計的背景模型提取方法,以一段時(shí)間內某像素點(diǎn)所在區域亮度的平均值作為該像素點(diǎn)的背景值。之后對實(shí)時(shí)圖像進(jìn)行高斯平滑,并與背景圖像相減再二值化,將得到的差值圖像通過(guò)膨脹、腐蝕等形態(tài)學(xué)濾波后,尋找最大連通區域,從而確定運動(dòng)部位坐標。
參考文獻:
[1] 羅娜.基于OpenCV的自然手勢識別與交互系統研究[D]: 廣州:廣東工業(yè)大學(xué), 2012.
[2] GUPTA A, V K SEHRAWAT, M KHOSLA. FPGA based real time human hand gesture recognition System[J]. Procedia Technology, 2012, (6)98-107.
[3] 周天彤等. 基于unity和kinect的交警手勢識別仿真系統的設計和實(shí)現[J].計算機測量與控制, 2016, 24(5): 156-159.
[4] 龔陶波.基于計算機視覺(jué)的靜態(tài)手勢識別系統[D].武漢:華中師范大學(xué), 2008.
[5] 譚同德,郭志敏.基于雙目視覺(jué)的人手定位與手勢識別系統研究[J].計算機工程與設計,2012,33(1): 259-264.
[6] 湯志彥,馮哲.適用于機器人視覺(jué)的手勢識別系統[J].計算機工程與應用, 2005(16): 51-54.
[7] 曾維.手勢識別系統中手指及指尖檢測方法[J].國外電子測量技術(shù), 2013, 32(4): 39-42.
[8] 杜釗君.基于體感傳感器的手勢識別及人機交互系統研究[D].武漢:武漢科技大學(xué), 2013.
[9] 劉江華,陳佳品,程君實(shí).用于人機交互的靜態(tài)手勢識別系統[D].紅外與激光工程, 2002(6): 499-503.
[10] 王茂吉.基于視覺(jué)的靜態(tài)手勢識別系統[J].哈爾濱:哈爾濱工業(yè)大學(xué), 2006.
[11] 魯姍丹,周松斌,李昌.基于多光源紅外傳感技術(shù)的手勢識別系統[J].自動(dòng)化與信息工程, 2015, 36(2): 22-26.
[12] 徐成,馬翌倫,劉彥.一種基于嵌入式系統實(shí)時(shí)交互的手勢識別方法[J].計算機應用研究,2011,28(7): 2782-2785.
(本文來(lái)源于《電子產(chǎn)品世界》雜志2023年6月期)
評論