Scratch2.0视频感知技术教学应用实践

2015-07-20 23:42许凯
中国信息技术教育 2015年11期
关键词:大饼数值指令

许凯

Scratch2.0发布以来,利用第三方提供的离线版,众多学校已经在信息技术课堂中积极跟进和普及了新版本的教学。Scratch2.0最能引起学生直观感受的功能莫过于新生的“视频感知”技术,在实际应用中学生多以身体动作来与程序产生交互,因此这一功能也常被冠以“体感”之名。准确来说Scratch2.0的视频感知仅仅是识别画面中物体的灰度变化,而不能识别人体或颜色,因此以“体感”技术来定义是有失偏颇的。Scratch2.0的视频技术相对简单,这是它的劣势,但从信息课堂的教学来说又是很大的优势。正因为门槛低,只要在普通信息技术教室中配备一个二三十元的摄像头就可以开展教学,如笔者所在学校的机房配置的带摄像头的笔记本电脑,就可以实现零成本、零准备的Scratch2.0教学。而像Kinect这类的设备可以在一些创客工作室或工坊中配备,但出于成本和维护等原因不太可能在整班教学中实现。

Scratch2.0关于视频的新增指令只有3个:①开启/关闭视频Turn Video ();②设置视频透明度Set Video Transparency to ()% ;③视频感知Video () on ()。其中第1和第2条为属性设置类指令,功能一目了然。真正在实际应用中起作用的是源代码仅有2个单词的第3条指令,看似十分简单明了,笔者在刚接触Scratch2.0时误以为这个视频感知技术属于“银样镴枪头”的鸡肋功能。然而在经过一段时间的实践后,发现在“光流”这一原理的“枷锁”下,我们仍然可以设计一些简洁而实用的课堂教学案例,让学生在实践中感受视频感知技术的魅力,体验传感技术和人工智能的有趣互动。

感知整个舞台的光流变化

此实验中以这个指令为核心。该指令的作用是识别整个舞台上所发生的动作的幅度,也就是光流的变化。事实上根据光流原理,如果颜色(灰度)相近的物体在舞台中迅速移动,即使速度很快,但由于光流变化很小,也很难被识别,因此在教学设计中应尽量避免这种情况的发生。我们可以设计一个入门小游戏,需要非常“缓慢”完成的游戏如同学的头部从舞台一侧“缓缓”移动到另一侧,速度需要非常慢,一旦摄像头侦测到的动作达到某数值,就发出声音警报。程序如图1所示。

在完成该任务时,由于程序对光流的识别十分敏感,舞台中略有动作侦测到的数值就会达到上限100,因此学生在实践中要自行探究并掌握一些技巧,学生未必需要懂得“光流”工作的原理,只需要直观地感受视频运动变化的规律,掌握技巧。例如,横移动作需要极为平缓,实践中学生也惊奇地发现远离摄像头的镜头,增加距离也可以提高成功率(实际是镜头中的人体变小了,光流变化的范围也随之变小了)。还有学生发现用与背景相同颜色的遮挡物挡在脸部再运动也有帮助,如很多同学背后是白色的墙壁,他们就用白色的书本、纸张或衣物挡住脸部,来“欺骗”程序减少视频侦测到的运动数值。

感知单一或多个角色上的光流变化

此实验中以

这个指令为核心。

相对于上一个实验侦测整个舞台的光流变化,这个指令的作用是仅仅侦测某一设定角色上的光流变化。借用我们非常熟悉的“翻饼”游戏为例,一只以速度为“-2”缓缓下降的大饼,一旦用手托住就会以“25”的速度上升,程序如图2所示。

学生通过程序解析发现,实际上这个游戏的交互并不是发生在“大饼”角色与摄像头中的“手”相互“碰到”的一瞬间,而是必须发生在两者“重叠”的一瞬间。学生发现因为程序是针对“大饼”角色设定的,只有“大饼”与“手”两者相互重叠,“大饼”角色上的光流才会发生变化,其运动数值才会被程序侦测到并触发大饼y轴增加的程序。而临界值“20”决定了交互发生的敏感度,数值越低越容易被触发,如手一碰到“大饼”就会上升。学生在实践中也会发现,如果临界值设得过低有可能因为“大饼”角色受其他因素的干扰而产生误判,造成触发条件过于敏感产生程序的不稳定。

在这个实验中,笔者引导学生明确如果设定同时侦测多个角色上的动作,就可以实现更多有意思的功能。例如,笔者在后续的教学中让学生把以前完成的“按键控制”的飞机大战升级成了“体感控制”版,在游戏中实现了类似“热区”的功能。

如图3所示,原本用左右按键控制的飞机,我们增加了左边的红色方块和右边的绿色方块,并在程序一开始设置为完全透明。当学生身体往左侧移动时,左侧红色方块角色上侦测到动作,这时就发广播给飞机角色,让它往左侧移动;反之右侧绿色方块侦测到动作,就让飞机往右边移动。实际操作中由于两块“热区”完全透明,不会对舞台效果产生任何阻挡和影响。学生在完成左右的控制后,大呼神奇,还举一反三,制作了位于舞台上方的两个小方块“热区”。向上挥手时接触到上方两个“热区”,就会激活不同的特殊攻击能力。学生发现颜色没有实际意义,仅仅为了编写程序过程中便于进行区分而已。

我们以图3中右侧绿色方块的程序截图(如下页图4)为例,当右侧方块发生光流变化侦测到运动后,发送一个广播控制角色往右侧移动。

感知光流的方向

接下来,笔者带领学生测试的这一功能更是令人振奋,也是笔者认为真正使得Scratch2.0视频感知技术摆脱鸡肋功能的关键性技术。Scratch2.0除了可以侦测光流在舞台或角色上的变化之外,也实现了对“运动方向”的侦测,侦测方向也同样有侦测“舞台”和“角色”两种方法,在这个实验中我们以侦测舞台的光流方向为例,以这个指令为核心。

事实上这是一个功能相当强大而又不好掌握的指令,目前使用到该功能指令的优秀教学实例也较为少见。确实有Scratch爱好者利用该功能实现了非常精准的“人体跟踪”效果,即让程序中的角色跟随摄像头前人物的运动而运动。用此功能实现的“人体跟踪”要比前面例子中用“热区”实现的体感控制更为先进和准确,但由于数据的计算相当复杂并不适合小学课堂教学,笔者在课堂中以一个简单的教学设计带领学生体验了一下该指令的功能,起到抛砖引玉的作用,在课后确实有学有余力的学生实现更优秀的方案。程序如图5所示。

以飞机大战游戏的左右控制为例,学生在测试中发现,Scratch中光流往右测运动会得到一个正值,反之则为负值。视频侦测动作在舞台上大于30才触发后续程序,这样可以屏蔽掉一些干扰性的微小动作。侦测到的方向数值除以50是学生经过反复测试的结果,是因为需要适配X轴左右移动的数值而进行的数值缩小,否则方向数值过大会使角色在短时间内移动过大。

无关光流的视频取色另类应用与局限

接触过机器人传感技术的同行应该对光反射传感很熟悉,现在的RGB色彩传感技术也已经相当精准,也经常应用于诸多实用和高效的教学实践。笔者在Scratch2.0视频感知技术的教学设计中突然想起《三国演义》中黄忠与法正计夺定军山的情节。于是让学生尝试了用视频中获取的颜色来实现交互并控制角色运动的案例,如我们对摄像头出示红色,角色前进;出示白色,角色后退。程序如图6所示。

该程序实质与视频侦测获取的光流数值无任何关系,仅仅把取色的来源改成了摄像头获取的视频内容,因此笔者把这个功能视为“另类”应用,学生觉得非常有意思。只是经过了大量的实验学生发现这种玩法在目前的Scratch版本中只是“看起来很美”,在实际操作过程中限制很多。例如,取色时色源的距离不同会产生颜色误差,很难在控制时获得完全一致的色源。学生采用了很多办法如通过“或”逻辑关系设定多个侦测的颜色(如多次取色),增加触发的命中率;或者人为地制作渐变色源,如直接打印了从浅到深的红色纸条,有学生做成了红色纸卷(纸卷也可以使角色在同一时间接触多种渐变的红色),但实际操作效果仍然不够理想。参加了机器人社团的学生反映,为什么Scratch在侦测的时候无法设定一个阀值范围?一语激起千重浪,归根结底是Scratch2.0虽然可以通过数值设定得到不同的颜色,但是仍然无法将颜色转变为数值。而如果仅仅获得灰度值,学生就可以利用Scratch实现更丰富更有趣的应用,不需要任何额外的辅助设备就可以把摄像头当成光感来应用,完成很多传感实验。

综上所述,Scratch2.0基于光流原理的视频感知技术可谓简洁不简单,原生的硬件支持使得不再需要任何扩展板或第三方软件支持,简化了操作的门槛,这一点看似微小的完善却可以让学生在课堂上接触和尝试传感技术和人工智能变得更易于实现;同时,简洁的指令又让学生在课堂中衍生出多种多样的实践,笔者本文涉及的仅仅是在课堂中实现的几种入门的教学案例。作为教学,我们让学生以体验为主,可以知其然不必知其所以然;作为教师,我们不仅是软件的使用者,也是教学的设计者,掌握更多核心技术和原理可以帮助我们在教学应用设计中如虎添翼。

猜你喜欢
大饼数值指令
秦九韶与高次方程的数值解法
一样,不一样
《单一形状固定循环指令G90车外圆仿真》教案设计
新机研制中总装装配指令策划研究
改进明托热机的数值模拟研究
改进明托热机的数值模拟研究
偷吃了大饼的贼
香喷喷的绮园大饼
基于有限差分法的边坡治理数值分析
基于有限差分法的边坡治理数值分析