李海翔
(河南教育学院 艺术学院,河南 郑州 450046)
基于Flash技术的手势输入模型
李海翔
(河南教育学院 艺术学院,河南 郑州 450046)
用Action Script 3.0建立了手势输入模型.详细分析了手势图像获取、图像差值混合技术运用、运动区域分析、控制信号产生及输出过程.讨论了为保证控制信号可靠性而采取的一系列措施.
手势输入;视频处理;运动区抽取;人机交互;Flash
手的运动是手势的表现形式. 用户的操作意图是用户要完成任务的内容, 即用户心理活动(概念手势)经过运动控制(变换) , 用手势运动表达.经由感受设备(变换)将手的运动变换为系统的输入信息[1].本文仅讨论手势控制在电子出版物阅读翻页中的应用,即利用手势动作引导读者参与到交互中而建立的手势输入模型.手势控制作为人机交互的一种方法,是当今人们研究的一个重要课题.手势控制是指人的手部做出各种形状、姿势,通过某种媒介实现对计算机的指令输入并产生不同的反馈.在传统的人机交互中,手势的运用仅限于对鼠标和键盘的操作,没有充分发挥其优点.从手势以及更多的输入通道获得用户更丰富的交互意图是当前人机交互技术发展的新动向、新课题(图1).
图1 手势输入模型图Fig.1 The model diagram of gesture input
基于视觉的手势识别技术,涉及图像处理、模式识别和计算机视觉等研究内容,是当前的热点研究课题,国内外学者在基于手语手势的识别领域,已开展了诸多研究工作[2].本文研究的手势控制电子出版物阅读翻页是基于Flash开发语言Action Script 3.0技术.Flash是Adobe公司的以时间轴为开发基点、以帧频为依托的图形软件,主要用于创建演示文稿、应用程序和其他交互内容.Flash制作成本相对于受益群体来说较为低廉,操作简单,通过其制作的动画在各平台上都能使用,可以用插件方式播放动画,克服了Java 每次都要启动虚拟机的缺点[3].Flash的图形主要使用矢量图,是以数学公式而不是大型数据集表示的,与位图图形相比,矢量图形需要的内存和存储空间小很多,方便与网路传播.Flash中可以插入图形、动画、视频和声音,形成了一个多种形式兼容的软件.
手势模型沿用人们的交流习惯动作,也就是通常所说的肢体语言的一部分,在语言不能表达的时候,手势动作就会成为主要的交互行为.在电子出版物的交互中使用手势动作,是在屏幕中出现读者自己的图像,根据图像位置,向左摆手,杂志就会向左翻一页,向右摆手杂志就会向右翻页.这种现实生活中的动作被沿用到电子出版物的交互中,会增加读者的好奇心,而且可以省去鼠标的使用.
电子出版物的手势输入是利用摄像头摄下物体运动情况,通过像素差识别物体运动,根据各种运动情况发出不同的控制信号.摄像头成为手势运动与计算机交互的媒介,是人机交互的桥梁.摄像头把手势的运动轨迹记录下来,并通过数据分析得到像素差判断是否运动.通过Video对象查看摄像头输入,并可以利用Video对象对视频处理,如滤镜、变换、混合模式等方式.利用Video对象向BitmapData对象绘制视频,可以逐像素逐帧地分析图像,将图像不同的区域进行比较,或者将两帧不同图像进行比较,从而找出视频中不同的运动区域.
1) 摄像头的获取.在Action Script3.0中,使用Camera类来处理计算机的视频内容,通过Camera类的方法getCamera()获取与计算机关联的摄像头的一个引用.获取本地计算机的默认摄像头,如果计算机上没有安装摄像头,则返回 .在默认情况下,应用程序不能使用摄像头,如果使用摄像头必须得到用户允许.摄像头的模式设置需要调用Camera对象的setMode()方法完成,主要包括4个参数,分别是视频捕捉宽度和高度、捕捉时使用的帧频以及与物理摄像头的匹配模式.
2)摄像头输出视频.获取摄像头之后,要输出视频,需要把摄像头关联到一个Video实例.Video类是显示对象.创建一个video对象,并利用attachCamera()方法为关联摄像头,在屏幕上就可以看到摄像头输出视频.
3)获取图像信息.要获取和处理图像信息,必须用到Bitmap类和BitmapData类,其中Bitmap类用于位图图像的显示.Bitmap对象是一个可视对象,具有可视对象的一般特性,可以加入到可视对象列表并在Flash Player上显示. BitmapData类用于表现和处理内存中的位图数据,创建并操作任意大小的透明或不透明的位图图像.
建立一个BitmapData对象newFrame,引用draw方法将视频vid 绘制在newFrame对象上.建立一个Bitmap对象bitm,用newFrame对象作为它的参数,将bitm添加到显示列表.BitmapData中的3个参数分别表示位图的宽度、高度以及指定位图图像是否支持每个像素具有不同的透明度.
BitmapData对象的draw方法将视频绘制在newFrame对象上,以便于对图像进行数据处理,其中在矩阵Matrix中可调整图像在水平方向的大小,只将其水平翻转,矩阵Matrix 中newFrame width是把图像水平移动的距离.因为摄像头中看图像与实际物体方向相反,所以加载图像时应该把图像水平翻转.矩阵内其他0值不会对图像做任何操作.
当物体在视频区域中运动时,随着物体运动区域变化,可以获得不同的控制信号,也就是把控制信号和运动区域对应起来.为此,可以比较两个连续的帧,如果物体没有运动,则两帧图像的像素完全相同;如果物体发生运动,则两帧图像必然有不同的像素区域,把这个区域提取出来,转化成控制信号,就达到了目的.
具体的做法是建立3个BitmapData对象,分别对应新帧图像、原帧图像和混合帧图像:
1)先把原帧图像复制到混合帧;
2)把新帧图像复制到原帧,再把视频图像绘制到新帧;
3)最后把新帧图像输送到混合帧,与混合帧中的图像进行差值混合,提取运动区域(图2).
图2 提取运动区域流程图Fig.2 Flow chart of extracting movement area
在新帧图像与混合帧差值混合中,注意draw函数的参数中有BlendMode.DIFFERENCE,这是两个图像的混合模式.抽取运动区域的工作要使用BitmapData的getColorBoundsRect()内置方法.程序的最后要绘制一个矩形,利用sprite对象的graphics属性.为了准确地提取运动矩形,再引用另一个位图工具threshold.它的基本作用是检查一个位图,将它的各个像素与阈值进行比较,通常采用算术比较操作符小于、大于、等于和不等于等,如果对一个特定像素的比较计算为真,则将该像素设置成所选颜色.另外,它还可以指定一个掩码,从而只查看单个颜色通道.
在前面程序段中引用的threshold方法,从参数上可以看出,检查对象是混合图像.检查整个位图并把结果放在(0,0)开始的位置上,掩码0x00ff0000指定的是红色通道,当该通道值<0x00330000,则将其设置为黑色(0 x00ff0000).所以threshold方法实现了对混合图像的检查,如果像素接近黑色,就将其设置为全黑色.
通过以上的配合,成功地实现了运动区域探测问题:哪些区域中有物体运动,就可以在该区域中画出一个运动矩形.
注意到检查程序都放在onEnterFrame(event:Event)函数中,使用格式如下,
addEventListener(Event.ENTER_FRAME, onEnterFrame);//注册函数
private function onEnter_Frame(event:Event):void{} //事件帧听函数
onEnterFrame(event:Event)是事件帧听函数,对应事件Event.ENTER_FRAME,该事件是以帧频触发调用.使二者联系到一起的是addEventListener(),该函数注册了事件帧听函数onEnterFrane,使得按帧频进行调用,检测视频中的运动区域.
以下讨论如何得到控制信号.
简单起见,讨论输出两个控制信号的情况,即把视频区域分成两部分,哪一部分有物体运动,就输出对应的控制信号.很容易理解,两个信号控制电子书翻页,可以控制前翻和后翻,但连续动作容易出现问题,如连续向前翻页或向后翻页,或者连续前翻后翻,亦即控制信号不稳定.
不稳定信号问题产生的原因有二,一是物体在某一区域运动时,连续读出同一控制信号,这样引起连续前翻页或后翻页;二是当运动物体(比如说手和胳膊)稍不小心由一区域跨过边界,会出现连续前翻后翻问题.可使用计时器作为辅助工具解决这些问题.
设置计时长度为1 s,计时间隔为1 s,TimerEvent.TIMER为计时事件,每一秒发出一个.onTick是计时事件侦听函数.minuteTimer.addEventListene是注册事件侦听函数,将计时事件联系起来.开始计时1 s后,设置S=0.
输出控制信号程序的设计说明如下.
由语句If(S==0)和计时事件处理函数稳定输出,只有S=0,才能改变输出控制信号index的值,但是改变一次值,S就不为0了,计时函数ShortTimer() 1 s后才能设置S=0 .因此,在1 s之内,输出控制信号是稳定不变的.
所以,使用计时器工具能保证控制信号的稳定性和不连续性.由多次实验结果看,的确达到了要求.
主程序流程图、帧调用函数流程图和输出函数流程图分别如图3~图5所示.
图3 主程序流程图Fig.3 Flow chart of main program
图4 帧调用函数流程图 Fig.4 Flow chart of frame call function
图5 输出函数流程图Fig.5 Flow chart of output function
通过以上方法编制程序,获取手势图像,确定运动区域,并根据对应关系获得控制信号,取得了良好的阅读效果,证实了这种方法的可行性.
[1]曾芬芳,林剑柠,陈晓军.3D交互输入新技术——手势识别[J].信息与控制,2001,30(7);719-722.
[2]冯志全,蒋彦.手势识别研究综述[J]. 济南大学学报:自然科学版,2013,27(4):336-341.
[3]胡顺,覃基笙.基于FLASH 技术的高校教学应用探讨[J].中国成人教育,2013(4):143-145.
The Gesture Input Model Based on Flash Technology
LI Hai-xiang
(SchoolofArt,HenanInstituteofEducation,Zhengzhou450046,China)
The Action Script 3.0 is used to setup gesture input model. Gesture image acquisition is analyzed in detail, as well as image subtraction mixed techniques, motion area, control signals and output processes. A series of measures are discussed in order to ensure the reliability and control signals.
gesture input; video processing; moving area extracting; human-interactive; Flash
2014-10-22
河南省教育厅科学技术研究重点项目(13B520976);河南省教育厅人文社会科学研究项目(2013-GH-620)
李海翔(1980—),男,河南武陟人,河南教育学院艺术学院讲师.
10.3969/j.issn.1007-0834.2015.01.011
TP311
1007-0834(2015)01-0035-04