APP下载

基于OpenCV的Android体感游戏平台的设计与实现

2013-05-24林宏弘伍传敏张帅

三明学院学报 2013年6期
关键词:体感手势应用程序

林宏弘,伍传敏,张帅

(三明学院信息工程学院,福建三明365004)

基于OpenCV的Android体感游戏平台的设计与实现

林宏弘,伍传敏,张帅

(三明学院信息工程学院,福建三明365004)

基于摄像头的体感交互具有设备简单、对环境要求低等优势,成为近年来研究的热点。针对手机游戏的摄像头体感交互性问题,着重于图像人手识别、数据跨进程通信及手势后台捕捉等关键技术的研究与实现,解决了手持设备摄像头可捕捉范围小、硬件处理能力低、三维建模渲染效率低等缺陷,基于OpenCV开放库开发Android手机体感游戏平台。在此平台移植了手机游戏,具有较强的互操作性。

Android;OpenCV;手势识别;体感

随着移动互联网时代的到来,手机游戏在游戏开发中逐步成为新的开发方向,越来越多的游戏厂商加入到了手机游戏的开发中,而随着人们对手机游戏交互性体验需求的不断提升,传统的手指触摸操作已经不能满足资深玩家的需求,因此在手机游戏中融入体感操作功能无论是在玩法的趣味性还是在操作的灵活性方面都具有优势。

本文结合Android底层的摄像头数据和Android软件层的显示数据,利用OpenCV开放库解决图像人手识别、数据跨进程通信及手势后台捕捉等关键技术,针对Android平台进行数据优化和处理并进行APK文件的发布,最终完成了Android体感游戏平台的开发。

1 OpenCV的Android摄像头处理机制

1.1 自定义摄像头绘图类CameraBridgeViewBase

OpenCV中的CameraBridgeViewBase类继承SurfaceView并实现了SurfaceHolder.Callback接口,是摄像头图像绘制的自定义类,用于负责处理硬件传输的图像信息。具体变量和继承关系如图1,该类中的变量如表1所示。

图1 CameraBridgeViewBase关系图

该类中的主要方法有calculateCameraFrameSize和deliverAndDrawFrame,calculateCameraFrame-Size主要进行摄像头图像数据的帧计算,deliverAndDrawFrame进行摄像头图像传递和绘制。

1.2 摄像头数据处理方法onCameraFrame

OnCameraFrame方法是一个专门处理OpenCV摄像头图像数据的类回调方法,进行体感识别的算法都需要写在这个方法里,该方法会在Android设备摄像头每帧图像获取到之后传递给应用程序。使用该方法需要在自定义的Android主类中实现CvCameraViewListener2接口,该方法会传入一个CvCameraViewFrame类型的对象(inputFrame),inputFrame包含两个Mat图像类型的色彩图像(rgba和gray),rgba是Android摄像头获取到的彩色图像,gray则是灰度图像,手势识别需要对rgba类型的色彩图像进行体感算法判断。

Mat mRgba=inputFrame.rgba();然后将mRgba传递给基于OpenCV包装好算法的C/C++代码,让Android NDK负责编译运行。

表1 CameraBridgeViewBase类的变量说明

2 Android体感平台关键技术研究

2.1 图像人手识别

图像人手识别有两种方法:第一种是直接识别,直接识别是直接进行数学建模,在图像中直接找出人手,并进行跟踪。微软公司体感游戏机Kinect便是采用此法,先通过热成像找出人的位置,直接在图像中区分,再进行定位;第二种是间接识别,先对背景进行建模,然后对前景和背景进行区分,再在前景中寻找出人的位置进而判断手。方法一的优点在于一旦识别成功,人手的跟踪精度和速度都非常髙,不会受到周围环境干扰,利于手势识别,缺点在于对硬件的需求较高,识别过程的精度和速度不如间接识别好;方法二的优点在于整个识别过程对硬件的需求较低,识别过程的精度和速度较稳定,缺点在于识别容易受到周围环境干扰,手势跟踪难。

由于Android手持设备摄像头可捕捉范围小、硬件处理能力低、三维建模渲染效率低等缺陷,因而选用方法二对于在Android平台上进行体感开发比较有利,在onCameraFrame方法中获取rgba图像之后,需要对其进行背景建模,然后再区分前景和背景,图像灰度化和对画面进行帧差计算可以很好区分前景和背景,达到Kinect热成像的效果,进而通过手势识别找到手在平面内的坐标。

具体方法如下:

摄像头设备首先获得图像,并将其定义为背景模型,假设背景建模的颜色为Bn(x,y),当前帧图像的颜色为Nn(x,y),则二值化图像的颜色值为:

其中1为黑色,0为白色,0代表物体所在像素点位置,式中threshold为阈值,该值可以适当选择,执行后的效果如图2~3。

图2 手势识别状态

图3 手势识别真实位置坐标

在复杂的环境下,可能会受到一定程度的干扰,比如背景中的人物数量和其他物体等,这时候需要对背景进行重新建模,使用每前一帧重新背景建模覆盖之前的背景模型,后一帧重新前景建模区分来避免其他物体对体感识别的干扰。

2.2 运动目标检测技术

OpenCV提供了5个模块,CV模块包含基本的图形处理函数和高级视觉算法;MLL是机器学习库,包含了一些基于统计的分类和聚类算法;HighGUI包含图像和视频输入/输出的函数;CXCore包含OpenCV的一些基本数据和相关函数。如何快速根据摄像头所捕获的像素点对其进行目标检测及跟踪成为系统最终实现的关键技术。

运动目标检测及跟踪是由决策系统完成实时分析的数据来源保障,首先从场景中检测运动目标,根据特征值定位判断是否为新加入目标。基于背景重构技术,通过摄像头关键帧的比对判断锁定目标是否已经移动。利用高斯分布函数表示场景中每一个像素点的分布,则特定像素点在时间N的像素值XN可以被表示为式(2),其中wk为第K个高斯向量权重,η(xn∶θj)为第K个高斯分布密度函数。

在运动过程中,可以将屏幕分割为若干个模块,对每个模块的极值像素点进行比对,就可以发现是否有连续相邻的模块发生移动。如果一个大的区域集成模块移动至另一个区域便可判定为静止移动,否则为变化移动,则需要重新调用特征值检测。

2.3 手势后台捕捉

Android平台对摄像头的图像捕捉有限制条件,Camera获得的图像数据必须用一个SurfaceView来接收,并且显示出来,如果该SurfaceView不是系统的最顶层,Camera的工作就会自动停止,这就造成了一点问题:如何在后台让摄像头进行工作并且处理手势图像数据?

在不修改系统底层的情况下,如何在后台运行摄像头只需要让应用程序在后台运行,将摄像头图像显示界面最小化即可,这时候就需要修改并使用OpenCV的自定义SurfaceView面板类CameraBridgeViewBase,CameraBridgeViewBase是OpenCV中的所有画面图像显示系统的基类,它继承了SurfaceView并且实现了CallBack接口,活脱脱的一个专门为摄像头图像数据显示和处理的自定义类。在CameraBridgeViewBase中将画面图像大小设置为最小(0px*0px),并且将摄像头返回的图像大小设置为相应的最小值,即可以让摄像头显示的图像看不见,让后台运行的应用程序界面显示上来。

CameraBridgeViewBase实现并修改的代码如下:

仅仅将图像最小化仍然不够,其实图像仍然在设备内存中绘制,只是没有将绘制的结果显示出来,这给CPU和设备的GPU造成了严重负担,对于移动设备来说,这无疑会造成硬件资源的浪费和电量的耗费,这时候需要在deliverAndDrawFrame方法中取消绘制图像,在CameraBridgeViewBase中加入整型变量camera_flag,并设置为0,在deliverAndDrawFrame中的绘制判断中修改为如下代码:

if(bmpValid&&mCacheBitmap!=null&&canvas_flag==0)这样即可取消绘制,让硬件性能提升。

2.4 数据跨进程通信

仅仅是获得了体感识别的数据还是不够,还需要将数据传递给其他应用程序,让其他应用程序也可以使用获取的体感数据。因为体感平台和应用程序所在的进程不同,因此数据的传递需要跨进程通信,而Intent通信方式是进程内通信,因此跨进程需要使用其他通信方式。Android提供了一个即时跨进程通信的方式,可以在不同应用程序进行即时的跨进程通信。该技术称为进程间通信接口技术,简称AIDL。想让体感数据跨进程通信只需要在应用程序中插入AIDL和Service即可。

Android平台下的跨进程通信使用AIDL需要通过Service进行桥梁的搭建,将体感数据打包在一个String字符串中,并且用逗号隔开,提供一个名为getHandInfo()的方法来供其他应用程序跨进程接收,同时还提供一个名为letExit()的方法来让其他程序可以随时控制体感识别的运行和退出,具体体感AIDL声明的方法代码如下:

需要获得体感数据的应用程序通过AIDL通信调用getHandInfo()方法返回一个字符串,通过逗号分割可以得到一组长度为8的整型数组,数组内容为体感识别的数据,具体如表2。

表2 体感数据

3 系统实现

OpenCV开放库需要Android NDK的支持,因此在程序构建算法中使用C/C++完成识别算法代码,在向Android平台移植时需要进行Android NDK环境的搭建,在Windows下进行NDK环境的搭建需要模拟Linux环境,安装Cygwin和OpenCV4Android SDK。由于OpenCV采用标准的C++开发的,Android原生的NDK不支持一些特性,而算法实现是在PC上完成的,因此需要下载一个改造过的Android NDK以及适合OpenCV的编译环境。

完成算法移植之后,需要利用NDK的JNI对JAVA和C/C++进行相互调用和交叉编译,并且打包成apk程序。由于使用了OpenCV开放库,因此在手机上运行体感程序需要安装OpenCV Manager程序。

最后的运行效果如图4~5。

图4 识别手的位置

图5 手势识别

4 结束语

本文通过OpenCV开放库结合Android SDK开发实现了Android平台的体感手势识别的应用程序,重点研究通过骨架的提取与动作识别,实现解析用户指令的方法,研究开发体感游戏平台,并开放程序API,开展基于该平台的典型示范应用,具有一定的研究价值和市场推广前景。

[1]曾健平,邵艳洁.Android系统架构及应用程序开发研究[J].微计算机信息,2011,27(9):1-3.

[2]李文新,王姜博,慕德俊,等.Android系统Rootkit技术综述[J].微处理机,2011,32(2),68-72.

[3]孟小华,黄宗轩.Android系统非标准设备驱动程序设计[J].微型机与应用,2011,30(14):7-12.

[4]伍传敏,张帅,邱锦明.基于Unity3D的FPS游戏设计与开发[J].三明学院学报,2012,29(2):35-40.

[5]杨科选.人工智能寻路算法及其在游戏中的应用研究[D].长沙:中南大学,2009.

[6]倪乐波,戚鹏,遇丽娜,等.Unity3d产品虚拟展示技术的研究与应用[J].数字技术与应用,2010(9):54-55.

[7]梁毅,周刚.基于定位点和路径复用的大型多人在线游戏寻路算法[D].成都:四川大学,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].计算机工程与设计,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

国家级大学生创新创业训练计划项目(201211311019,201211311006);福建省大学生创新创业训练计划项目(201311311050,201311311044);福建省教育厅自然科学研究项目(JA13295)

林宏弘,男,福建福州人,大学生;通讯作者:伍传敏,男,福建将乐人,讲师。研究方向:软件开发。

猜你喜欢

体感手势应用程序
体感交互技术在脑卒中康复中的应用
人体体感感知机械手设计与实现
挑战!神秘手势
删除Win10中自带的应用程序
V字手势的由来
谷歌禁止加密货币应用程序
非触控式的体感机械臂交互控制系统研究
胜利的手势
体感语境下的交互行为设计
三星电子将开设应用程序下载商店