用Scratch玩手势控制(上)

2015-06-01 14:20谢作如
中国信息技术教育 2015年9期
关键词:体感斯蒂芬渔网

谢作如

科幻电影中最吸引注意力的界面基本是用手势操作的。2002年拍摄的电影《少数派报告》中预防犯罪小组的警察使用的界面就是如此,挥挥手就能够控制屏幕上的内容,确实很震撼。后来其具有的开创性的经典场面,也成为科幻片和其他影视作品争相模仿的桥段。

十多年过去了,这一手势控制技术也逐步飞入寻常百姓家。从理论上说,只要有一款摄像头,就能够编写程序体验简单的手势识别。如果拥有Kinect和Leap Motion之类的体感传感器,你也能像《少数派报告》中男主角一样,用最自然的手势和电脑进行交互。例如,你可以用手在空中翻动你的音乐专辑,竖起大拇指它就会为你播放;你只要做出开车的手势就可以在极品飞车中自由驰骋;你用手指做出手枪的形状就可以代替鼠标来操纵游戏中的枪;你还可以用它画画、玩纸牌等。

当然,只要你会编程,哪怕仅仅懂得最简单的图形化编程软件——Scratch,也能够编个小游戏,用手势来控制角色运动,够酷吧!考虑到Kinect体积比较大,需要在较大的空间才能使用,我选择了Leap Motion来介绍如何实现手势控制。

● Leap Motion简介

Leap Motion是体感控制器制造公司Leap生产的体感控制器。当Leap Motion首次亮相之时,外界认为它承载了一个新颖而独特的计算机用户体验──通过挥舞手指或拳头来和计算机进行交互,甚至有媒体认为可用Leap Motion替换传统的鼠标。Leap Motion的体积小,仅一包口香糖大小,通过USB连接电脑后,它会创造出一个4立方英尺的工作空间。在这个空间里,10个手指的动作都会被即时追踪,误差在0.01毫米以内,最大频率是每秒钟290帧,精确度相当于Kinect的200倍(如图1)。这样的精准程度足够保证用户顺利完成如pinch-to-zoom或控制3D渲染物体等操作。

● Leap motion编程环境配置

1.安装Leap motion的驱动程序

首先要安装Leap motion的驱动程序。访问https://www.leapmotion.com/setup,下载驱动。驱动安装成功后,还要注册并登录Leap motion的网站,具体过程这里不再赘述。

2.安装Scratch 2.0 Plug-in for Leap Motion

Scratch 2.0 Plug-in for Leap Motion是一位名叫斯蒂芬·豪威尔的爱尔兰老师开发的插件。这位老师先后为Kinect和Leap motion编写了for Scratch的插件程序,为Scratch的功能扩展做了很多有趣的工作。

点击Leap motion官网的“APPS”栏目,在搜索框中输入关键词“Scratch”,就能找到斯蒂芬·豪威尔编写的插件“Scratch 2.0 Plug-in for Leap Motion”。登录网站即可免费安装,只是服务器在国外,安装速度有点慢。

插件安装地址:https://apps.leapmotion.com/apps/scratch-2-0-plug-in-for-leap-motion/windows#,插件安装成功后,Leap Motion App Home中会出现一个新的应用,如图2所示。

3.安装Scratch 2.0并载入相关脚本

顾名思义,“Scratch 2.0 Plug-in for Leap Motion”是Scratch2.0的插件,要先安装Scratch2.0。在插件的安装页面中,作者还提供了Scratch2.0的脚本文件“LeapMotion.json”。打开Scratch2.0,按住“Shift”键点击程序上方的“文件”,弹出的下拉菜单中将多出一项命令“Import experimental HTTP extension”(如图3)。载入“LeapMotion.json”文件后,Scratch的“更多模块”中就能看到Leap Motion的专属指令了(如图4)。

从原理看,“Scratch 2.0 Plug-in for Leap Motion”相当于是一个桥梁,将Leap Motion和Scratch联系起来。当电脑接入Leap Motion,并且Scratch正常运行时,Scratch 2.0 Plug-in for Leap Motion的界面会显示如图5的提示。

● 编一个手势控制的程序

Leap Motion能够精确识别双手,提供一系列和手势相关的信息,如每一个手指的X、Y、Z的坐标位置等。其遵循右手坐标系,坐标系中单位与物理世界中的一毫米相对应,坐标原点是设备的中心。X、Z轴组成水平的一个平面,X轴指向设备的长边,Y轴竖直向上为正方向,Z轴相对屏幕向外是正方向,建议通过Leap Motion的观察器来熟悉操作(如图6)。

Scratch 2.0 Plug-in for Leap Motion并没有提供Leap Motion的全部SDK数据,而是提供了其中最常用的几类数据,如手和手指的坐标。手势方面也仅仅提供了是否可见以及手掌是否张开。

为了帮助大家理解这些指令,我进行了分类整理,并进行说明(如下页表1)。

1.小试身手:用手“抓”住小猫

首先用手势控制一个角色“hand_open”,当“hand_open”角色遇到小猫角色的时候,用“Hand-1 open”判断是否处于“抓”的动作。如果是,小猫角色的坐标就跟随手的坐标移动(如图7)。

具体的程序代码说明如表2。

2.自由创意:用手势控制的“捕鱼游戏”

这是五年级小学生编写的一个小游戏,小作者设计了如下功能:渔网在默认情况下是关闭的,随着手的运动而移动坐标。当张开手掌时,渔网张开,小鱼碰到就被捕。一秒钟后,渔网自动收回。其中每撒一次网,就要扣除一定的金币,而捕到的鱼可以换金币(如图8)。

考虑到LeapMotion的Y轴是手的高度,在电脑前操作容易遮住显示屏。小作者用Z轴的数据来作为Scratch的Y轴数据。其实代码还是很简单,如图9所示。

通过这两个范例,大家可能对Scratch2.0加上Leap Motion来玩手势控制有了一定的了解。斯蒂芬·豪威尔老师在插件页面中提供了他的几个简单范例,值得初学者参考。一般而言,我们很难用Scratch2.0编写很复杂的手势控制的程序。但是,只要有足够的创意和算法基础,仅仅“Scratch 2.0 Plug-in for Leap Motion”提供的功能,就可以让中小学生编写出很酷的手势控制方面的应用来。如果具有足够的数学功底,完全可以试试一些简单的手势识别。如果你对Leap Motion手势控制编程感兴趣,请关注下一篇,跟我一起继续研究更加有趣的作品。

如果对相关内容感兴趣,请关注主持人博客。

猜你喜欢
体感斯蒂芬渔网
斯蒂芬·金的退稿信
小鱼和网
透视渔网
命悬一线
美女与野兽
为"渔网袜”时髦正名
踮起脚尖,接近阳光
知乎
独创的渔网
电动车体感防盗系统