国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OpenCV的Android體感游戲平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)

2013-05-24 15:52林宏弘伍傳敏張帥
三明學(xué)院學(xué)報(bào) 2013年6期
關(guān)鍵詞:體感手勢(shì)應(yīng)用程序

林宏弘,伍傳敏,張帥

(三明學(xué)院信息工程學(xué)院,福建三明365004)

基于OpenCV的Android體感游戲平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)

林宏弘,伍傳敏,張帥

(三明學(xué)院信息工程學(xué)院,福建三明365004)

基于攝像頭的體感交互具有設(shè)備簡(jiǎn)單、對(duì)環(huán)境要求低等優(yōu)勢(shì),成為近年來研究的熱點(diǎn)。針對(duì)手機(jī)游戲的攝像頭體感交互性問題,著重于圖像人手識(shí)別、數(shù)據(jù)跨進(jìn)程通信及手勢(shì)后臺(tái)捕捉等關(guān)鍵技術(shù)的研究與實(shí)現(xiàn),解決了手持設(shè)備攝像頭可捕捉范圍小、硬件處理能力低、三維建模渲染效率低等缺陷,基于OpenCV開放庫開發(fā)Android手機(jī)體感游戲平臺(tái)。在此平臺(tái)移植了手機(jī)游戲,具有較強(qiáng)的互操作性。

Android;OpenCV;手勢(shì)識(shí)別;體感

隨著移動(dòng)互聯(lián)網(wǎng)時(shí)代的到來,手機(jī)游戲在游戲開發(fā)中逐步成為新的開發(fā)方向,越來越多的游戲廠商加入到了手機(jī)游戲的開發(fā)中,而隨著人們對(duì)手機(jī)游戲交互性體驗(yàn)需求的不斷提升,傳統(tǒng)的手指觸摸操作已經(jīng)不能滿足資深玩家的需求,因此在手機(jī)游戲中融入體感操作功能無論是在玩法的趣味性還是在操作的靈活性方面都具有優(yōu)勢(shì)。

本文結(jié)合Android底層的攝像頭數(shù)據(jù)和Android軟件層的顯示數(shù)據(jù),利用OpenCV開放庫解決圖像人手識(shí)別、數(shù)據(jù)跨進(jìn)程通信及手勢(shì)后臺(tái)捕捉等關(guān)鍵技術(shù),針對(duì)Android平臺(tái)進(jìn)行數(shù)據(jù)優(yōu)化和處理并進(jìn)行APK文件的發(fā)布,最終完成了Android體感游戲平臺(tái)的開發(fā)。

1 OpenCV的Android攝像頭處理機(jī)制

1.1 自定義攝像頭繪圖類CameraBridgeViewBase

OpenCV中的CameraBridgeViewBase類繼承SurfaceView并實(shí)現(xiàn)了SurfaceHolder.Callback接口,是攝像頭圖像繪制的自定義類,用于負(fù)責(zé)處理硬件傳輸?shù)膱D像信息。具體變量和繼承關(guān)系如圖1,該類中的變量如表1所示。

圖1 CameraBridgeViewBase關(guān)系圖

該類中的主要方法有calculateCameraFrameSize和deliverAndDrawFrame,calculateCameraFrame-Size主要進(jìn)行攝像頭圖像數(shù)據(jù)的幀計(jì)算,deliverAndDrawFrame進(jìn)行攝像頭圖像傳遞和繪制。

1.2 攝像頭數(shù)據(jù)處理方法onCameraFrame

OnCameraFrame方法是一個(gè)專門處理OpenCV攝像頭圖像數(shù)據(jù)的類回調(diào)方法,進(jìn)行體感識(shí)別的算法都需要寫在這個(gè)方法里,該方法會(huì)在Android設(shè)備攝像頭每幀圖像獲取到之后傳遞給應(yīng)用程序。使用該方法需要在自定義的Android主類中實(shí)現(xiàn)CvCameraViewListener2接口,該方法會(huì)傳入一個(gè)CvCameraViewFrame類型的對(duì)象(inputFrame),inputFrame包含兩個(gè)Mat圖像類型的色彩圖像(rgba和gray),rgba是Android攝像頭獲取到的彩色圖像,gray則是灰度圖像,手勢(shì)識(shí)別需要對(duì)rgba類型的色彩圖像進(jìn)行體感算法判斷。

Mat mRgba=inputFrame.rgba();然后將mRgba傳遞給基于OpenCV包裝好算法的C/C++代碼,讓Android NDK負(fù)責(zé)編譯運(yùn)行。

表1 CameraBridgeViewBase類的變量說明

2 Android體感平臺(tái)關(guān)鍵技術(shù)研究

2.1 圖像人手識(shí)別

圖像人手識(shí)別有兩種方法:第一種是直接識(shí)別,直接識(shí)別是直接進(jìn)行數(shù)學(xué)建模,在圖像中直接找出人手,并進(jìn)行跟蹤。微軟公司體感游戲機(jī)Kinect便是采用此法,先通過熱成像找出人的位置,直接在圖像中區(qū)分,再進(jìn)行定位;第二種是間接識(shí)別,先對(duì)背景進(jìn)行建模,然后對(duì)前景和背景進(jìn)行區(qū)分,再在前景中尋找出人的位置進(jìn)而判斷手。方法一的優(yōu)點(diǎn)在于一旦識(shí)別成功,人手的跟蹤精度和速度都非常髙,不會(huì)受到周圍環(huán)境干擾,利于手勢(shì)識(shí)別,缺點(diǎn)在于對(duì)硬件的需求較高,識(shí)別過程的精度和速度不如間接識(shí)別好;方法二的優(yōu)點(diǎn)在于整個(gè)識(shí)別過程對(duì)硬件的需求較低,識(shí)別過程的精度和速度較穩(wěn)定,缺點(diǎn)在于識(shí)別容易受到周圍環(huán)境干擾,手勢(shì)跟蹤難。

由于Android手持設(shè)備攝像頭可捕捉范圍小、硬件處理能力低、三維建模渲染效率低等缺陷,因而選用方法二對(duì)于在Android平臺(tái)上進(jìn)行體感開發(fā)比較有利,在onCameraFrame方法中獲取rgba圖像之后,需要對(duì)其進(jìn)行背景建模,然后再區(qū)分前景和背景,圖像灰度化和對(duì)畫面進(jìn)行幀差計(jì)算可以很好區(qū)分前景和背景,達(dá)到Kinect熱成像的效果,進(jìn)而通過手勢(shì)識(shí)別找到手在平面內(nèi)的坐標(biāo)。

具體方法如下:

攝像頭設(shè)備首先獲得圖像,并將其定義為背景模型,假設(shè)背景建模的顏色為Bn(x,y),當(dāng)前幀圖像的顏色為Nn(x,y),則二值化圖像的顏色值為:

其中1為黑色,0為白色,0代表物體所在像素點(diǎn)位置,式中threshold為閾值,該值可以適當(dāng)選擇,執(zhí)行后的效果如圖2~3。

圖2 手勢(shì)識(shí)別狀態(tài)

圖3 手勢(shì)識(shí)別真實(shí)位置坐標(biāo)

在復(fù)雜的環(huán)境下,可能會(huì)受到一定程度的干擾,比如背景中的人物數(shù)量和其他物體等,這時(shí)候需要對(duì)背景進(jìn)行重新建模,使用每前一幀重新背景建模覆蓋之前的背景模型,后一幀重新前景建模區(qū)分來避免其他物體對(duì)體感識(shí)別的干擾。

2.2 運(yùn)動(dòng)目標(biāo)檢測(cè)技術(shù)

OpenCV提供了5個(gè)模塊,CV模塊包含基本的圖形處理函數(shù)和高級(jí)視覺算法;MLL是機(jī)器學(xué)習(xí)庫,包含了一些基于統(tǒng)計(jì)的分類和聚類算法;HighGUI包含圖像和視頻輸入/輸出的函數(shù);CXCore包含OpenCV的一些基本數(shù)據(jù)和相關(guān)函數(shù)。如何快速根據(jù)攝像頭所捕獲的像素點(diǎn)對(duì)其進(jìn)行目標(biāo)檢測(cè)及跟蹤成為系統(tǒng)最終實(shí)現(xiàn)的關(guān)鍵技術(shù)。

運(yùn)動(dòng)目標(biāo)檢測(cè)及跟蹤是由決策系統(tǒng)完成實(shí)時(shí)分析的數(shù)據(jù)來源保障,首先從場(chǎng)景中檢測(cè)運(yùn)動(dòng)目標(biāo),根據(jù)特征值定位判斷是否為新加入目標(biāo)。基于背景重構(gòu)技術(shù),通過攝像頭關(guān)鍵幀的比對(duì)判斷鎖定目標(biāo)是否已經(jīng)移動(dòng)。利用高斯分布函數(shù)表示場(chǎng)景中每一個(gè)像素點(diǎn)的分布,則特定像素點(diǎn)在時(shí)間N的像素值XN可以被表示為式(2),其中wk為第K個(gè)高斯向量權(quán)重,η(xn∶θj)為第K個(gè)高斯分布密度函數(shù)。

在運(yùn)動(dòng)過程中,可以將屏幕分割為若干個(gè)模塊,對(duì)每個(gè)模塊的極值像素點(diǎn)進(jìn)行比對(duì),就可以發(fā)現(xiàn)是否有連續(xù)相鄰的模塊發(fā)生移動(dòng)。如果一個(gè)大的區(qū)域集成模塊移動(dòng)至另一個(gè)區(qū)域便可判定為靜止移動(dòng),否則為變化移動(dòng),則需要重新調(diào)用特征值檢測(cè)。

2.3 手勢(shì)后臺(tái)捕捉

Android平臺(tái)對(duì)攝像頭的圖像捕捉有限制條件,Camera獲得的圖像數(shù)據(jù)必須用一個(gè)SurfaceView來接收,并且顯示出來,如果該SurfaceView不是系統(tǒng)的最頂層,Camera的工作就會(huì)自動(dòng)停止,這就造成了一點(diǎn)問題:如何在后臺(tái)讓攝像頭進(jìn)行工作并且處理手勢(shì)圖像數(shù)據(jù)?

在不修改系統(tǒng)底層的情況下,如何在后臺(tái)運(yùn)行攝像頭只需要讓應(yīng)用程序在后臺(tái)運(yùn)行,將攝像頭圖像顯示界面最小化即可,這時(shí)候就需要修改并使用OpenCV的自定義SurfaceView面板類CameraBridgeViewBase,CameraBridgeViewBase是OpenCV中的所有畫面圖像顯示系統(tǒng)的基類,它繼承了SurfaceView并且實(shí)現(xiàn)了CallBack接口,活脫脫的一個(gè)專門為攝像頭圖像數(shù)據(jù)顯示和處理的自定義類。在CameraBridgeViewBase中將畫面圖像大小設(shè)置為最?。?px*0px),并且將攝像頭返回的圖像大小設(shè)置為相應(yīng)的最小值,即可以讓攝像頭顯示的圖像看不見,讓后臺(tái)運(yùn)行的應(yīng)用程序界面顯示上來。

CameraBridgeViewBase實(shí)現(xiàn)并修改的代碼如下:

僅僅將圖像最小化仍然不夠,其實(shí)圖像仍然在設(shè)備內(nèi)存中繪制,只是沒有將繪制的結(jié)果顯示出來,這給CPU和設(shè)備的GPU造成了嚴(yán)重負(fù)擔(dān),對(duì)于移動(dòng)設(shè)備來說,這無疑會(huì)造成硬件資源的浪費(fèi)和電量的耗費(fèi),這時(shí)候需要在deliverAndDrawFrame方法中取消繪制圖像,在CameraBridgeViewBase中加入整型變量camera_flag,并設(shè)置為0,在deliverAndDrawFrame中的繪制判斷中修改為如下代碼:

if(bmpValid&&mCacheBitmap!=null&&canvas_flag==0)這樣即可取消繪制,讓硬件性能提升。

2.4 數(shù)據(jù)跨進(jìn)程通信

僅僅是獲得了體感識(shí)別的數(shù)據(jù)還是不夠,還需要將數(shù)據(jù)傳遞給其他應(yīng)用程序,讓其他應(yīng)用程序也可以使用獲取的體感數(shù)據(jù)。因?yàn)轶w感平臺(tái)和應(yīng)用程序所在的進(jìn)程不同,因此數(shù)據(jù)的傳遞需要跨進(jìn)程通信,而Intent通信方式是進(jìn)程內(nèi)通信,因此跨進(jìn)程需要使用其他通信方式。Android提供了一個(gè)即時(shí)跨進(jìn)程通信的方式,可以在不同應(yīng)用程序進(jìn)行即時(shí)的跨進(jìn)程通信。該技術(shù)稱為進(jìn)程間通信接口技術(shù),簡(jiǎn)稱AIDL。想讓體感數(shù)據(jù)跨進(jìn)程通信只需要在應(yīng)用程序中插入AIDL和Service即可。

Android平臺(tái)下的跨進(jìn)程通信使用AIDL需要通過Service進(jìn)行橋梁的搭建,將體感數(shù)據(jù)打包在一個(gè)String字符串中,并且用逗號(hào)隔開,提供一個(gè)名為getHandInfo()的方法來供其他應(yīng)用程序跨進(jìn)程接收,同時(shí)還提供一個(gè)名為letExit()的方法來讓其他程序可以隨時(shí)控制體感識(shí)別的運(yùn)行和退出,具體體感AIDL聲明的方法代碼如下:

需要獲得體感數(shù)據(jù)的應(yīng)用程序通過AIDL通信調(diào)用getHandInfo()方法返回一個(gè)字符串,通過逗號(hào)分割可以得到一組長(zhǎng)度為8的整型數(shù)組,數(shù)組內(nèi)容為體感識(shí)別的數(shù)據(jù),具體如表2。

表2 體感數(shù)據(jù)

3 系統(tǒng)實(shí)現(xiàn)

OpenCV開放庫需要Android NDK的支持,因此在程序構(gòu)建算法中使用C/C++完成識(shí)別算法代碼,在向Android平臺(tái)移植時(shí)需要進(jìn)行Android NDK環(huán)境的搭建,在Windows下進(jìn)行NDK環(huán)境的搭建需要模擬Linux環(huán)境,安裝Cygwin和OpenCV4Android SDK。由于OpenCV采用標(biāo)準(zhǔn)的C++開發(fā)的,Android原生的NDK不支持一些特性,而算法實(shí)現(xiàn)是在PC上完成的,因此需要下載一個(gè)改造過的Android NDK以及適合OpenCV的編譯環(huán)境。

完成算法移植之后,需要利用NDK的JNI對(duì)JAVA和C/C++進(jìn)行相互調(diào)用和交叉編譯,并且打包成apk程序。由于使用了OpenCV開放庫,因此在手機(jī)上運(yùn)行體感程序需要安裝OpenCV Manager程序。

最后的運(yùn)行效果如圖4~5。

圖4 識(shí)別手的位置

圖5 手勢(shì)識(shí)別

4 結(jié)束語

本文通過OpenCV開放庫結(jié)合Android SDK開發(fā)實(shí)現(xiàn)了Android平臺(tái)的體感手勢(shì)識(shí)別的應(yīng)用程序,重點(diǎn)研究通過骨架的提取與動(dòng)作識(shí)別,實(shí)現(xiàn)解析用戶指令的方法,研究開發(fā)體感游戲平臺(tái),并開放程序API,開展基于該平臺(tái)的典型示范應(yīng)用,具有一定的研究?jī)r(jià)值和市場(chǎng)推廣前景。

[1]曾健平,邵艷潔.Android系統(tǒng)架構(gòu)及應(yīng)用程序開發(fā)研究[J].微計(jì)算機(jī)信息,2011,27(9):1-3.

[2]李文新,王姜博,慕德俊,等.Android系統(tǒng)Rootkit技術(shù)綜述[J].微處理機(jī),2011,32(2),68-72.

[3]孟小華,黃宗軒.Android系統(tǒng)非標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2011,30(14):7-12.

[4]伍傳敏,張帥,邱錦明.基于Unity3D的FPS游戲設(shè)計(jì)與開發(fā)[J].三明學(xué)院學(xué)報(bào),2012,29(2):35-40.

[5]楊科選.人工智能尋路算法及其在游戲中的應(yīng)用研究[D].長(zhǎng)沙:中南大學(xué),2009.

[6]倪樂波,戚鵬,遇麗娜,等.Unity3d產(chǎn)品虛擬展示技術(shù)的研究與應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2010(9):54-55.

[7]梁毅,周剛.基于定位點(diǎn)和路徑復(fù)用的大型多人在線游戲?qū)ぢ匪惴ǎ跠].成都:四川大學(xué),2010.

[8]YU Q,CHENG H H,CHENG W W,et al.Ch OpenCV for interactive open architecture computer vision[J].Advances in Engineering Software,2004,35(8):527-536.

[9]尹文生,羅瑜林,李世其.基于OpenCV的攝像機(jī)標(biāo)定[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(1):197-199.

The Design and Implementation of Android Somatosensory Game Platform Based on OpenCV

LIN Hong-hong,WU Chuan-min,ZHANG Shuai
(Insititute of Information Engineering,Sanming University,Sanming,365004 China)

Somatosensory interaction based on camera has the advantages of simple equipment and low environmental requirements and has become a research hotspot in recent years.In order to solve the problem of mobile phone game camera somatosensory interaction,the research emphasis was put on hand recognition of image,data communication across process and gesture catch,which solve the defects of limited capture range,low processing ability and 3D rendering.Based on OpenCV open library,android somatosensory game platform was developed.Mobile games on the platform were transplanted, which has strong interoperability.

android;Opencv;gesture recognition;somatosensory

TP311.52

A

1673-4343(2013)06-0026-05

2013-10-08

國家級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(201211311019,201211311006);福建省大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(201311311050,201311311044);福建省教育廳自然科學(xué)研究項(xiàng)目(JA13295)

林宏弘,男,福建福州人,大學(xué)生;通訊作者:伍傳敏,男,福建將樂人,講師。研究方向:軟件開發(fā)。

猜你喜歡
體感手勢(shì)應(yīng)用程序
體感交互技術(shù)在腦卒中康復(fù)中的應(yīng)用
人體體感感知機(jī)械手設(shè)計(jì)與實(shí)現(xiàn)
挑戰(zhàn)!神秘手勢(shì)
刪除Win10中自帶的應(yīng)用程序
V字手勢(shì)的由來
谷歌禁止加密貨幣應(yīng)用程序
非觸控式的體感機(jī)械臂交互控制系統(tǒng)研究
勝利的手勢(shì)
體感語境下的交互行為設(shè)計(jì)
三星電子將開設(shè)應(yīng)用程序下載商店