許凱
Scratch2.0發(fā)布以來,利用第三方提供的離線版,眾多學校已經(jīng)在信息技術課堂中積極跟進和普及了新版本的教學。Scratch2.0最能引起學生直觀感受的功能莫過于新生的“視頻感知”技術,在實際應用中學生多以身體動作來與程序產(chǎn)生交互,因此這一功能也常被冠以“體感”之名。準確來說Scratch2.0的視頻感知僅僅是識別畫面中物體的灰度變化,而不能識別人體或顏色,因此以“體感”技術來定義是有失偏頗的。Scratch2.0的視頻技術相對簡單,這是它的劣勢,但從信息課堂的教學來說又是很大的優(yōu)勢。正因為門檻低,只要在普通信息技術教室中配備一個二三十元的攝像頭就可以開展教學,如筆者所在學校的機房配置的帶攝像頭的筆記本電腦,就可以實現(xiàn)零成本、零準備的Scratch2.0教學。而像Kinect這類的設備可以在一些創(chuàng)客工作室或工坊中配備,但出于成本和維護等原因不太可能在整班教學中實現(xiàn)。
Scratch2.0關于視頻的新增指令只有3個:①開啟/關閉視頻Turn Video ();②設置視頻透明度Set Video Transparency to ()% ;③視頻感知Video () on ()。其中第1和第2條為屬性設置類指令,功能一目了然。真正在實際應用中起作用的是源代碼僅有2個單詞的第3條指令,看似十分簡單明了,筆者在剛接觸Scratch2.0時誤以為這個視頻感知技術屬于“銀樣镴槍頭”的雞肋功能。然而在經(jīng)過一段時間的實踐后,發(fā)現(xiàn)在“光流”這一原理的“枷鎖”下,我們?nèi)匀豢梢栽O計一些簡潔而實用的課堂教學案例,讓學生在實踐中感受視頻感知技術的魅力,體驗傳感技術和人工智能的有趣互動。
感知整個舞臺的光流變化
此實驗中以這個指令為核心。該指令的作用是識別整個舞臺上所發(fā)生的動作的幅度,也就是光流的變化。事實上根據(jù)光流原理,如果顏色(灰度)相近的物體在舞臺中迅速移動,即使速度很快,但由于光流變化很小,也很難被識別,因此在教學設計中應盡量避免這種情況的發(fā)生。我們可以設計一個入門小游戲,需要非?!熬徛蓖瓿傻挠螒蛉缤瑢W的頭部從舞臺一側“緩緩”移動到另一側,速度需要非常慢,一旦攝像頭偵測到的動作達到某數(shù)值,就發(fā)出聲音警報。程序如圖1所示。
在完成該任務時,由于程序對光流的識別十分敏感,舞臺中略有動作偵測到的數(shù)值就會達到上限100,因此學生在實踐中要自行探究并掌握一些技巧,學生未必需要懂得“光流”工作的原理,只需要直觀地感受視頻運動變化的規(guī)律,掌握技巧。例如,橫移動作需要極為平緩,實踐中學生也驚奇地發(fā)現(xiàn)遠離攝像頭的鏡頭,增加距離也可以提高成功率(實際是鏡頭中的人體變小了,光流變化的范圍也隨之變小了)。還有學生發(fā)現(xiàn)用與背景相同顏色的遮擋物擋在臉部再運動也有幫助,如很多同學背后是白色的墻壁,他們就用白色的書本、紙張或衣物擋住臉部,來“欺騙”程序減少視頻偵測到的運動數(shù)值。
感知單一或多個角色上的光流變化
此實驗中以
這個指令為核心。
相對于上一個實驗偵測整個舞臺的光流變化,這個指令的作用是僅僅偵測某一設定角色上的光流變化。借用我們非常熟悉的“翻餅”游戲為例,一只以速度為“-2”緩緩下降的大餅,一旦用手托住就會以“25”的速度上升,程序如圖2所示。
學生通過程序解析發(fā)現(xiàn),實際上這個游戲的交互并不是發(fā)生在“大餅”角色與攝像頭中的“手”相互“碰到”的一瞬間,而是必須發(fā)生在兩者“重疊”的一瞬間。學生發(fā)現(xiàn)因為程序是針對“大餅”角色設定的,只有“大餅”與“手”兩者相互重疊,“大餅”角色上的光流才會發(fā)生變化,其運動數(shù)值才會被程序偵測到并觸發(fā)大餅y軸增加的程序。而臨界值“20”決定了交互發(fā)生的敏感度,數(shù)值越低越容易被觸發(fā),如手一碰到“大餅”就會上升。學生在實踐中也會發(fā)現(xiàn),如果臨界值設得過低有可能因為“大餅”角色受其他因素的干擾而產(chǎn)生誤判,造成觸發(fā)條件過于敏感產(chǎn)生程序的不穩(wěn)定。
在這個實驗中,筆者引導學生明確如果設定同時偵測多個角色上的動作,就可以實現(xiàn)更多有意思的功能。例如,筆者在后續(xù)的教學中讓學生把以前完成的“按鍵控制”的飛機大戰(zhàn)升級成了“體感控制”版,在游戲中實現(xiàn)了類似“熱區(qū)”的功能。
如圖3所示,原本用左右按鍵控制的飛機,我們增加了左邊的紅色方塊和右邊的綠色方塊,并在程序一開始設置為完全透明。當學生身體往左側移動時,左側紅色方塊角色上偵測到動作,這時就發(fā)廣播給飛機角色,讓它往左側移動;反之右側綠色方塊偵測到動作,就讓飛機往右邊移動。實際操作中由于兩塊“熱區(qū)”完全透明,不會對舞臺效果產(chǎn)生任何阻擋和影響。學生在完成左右的控制后,大呼神奇,還舉一反三,制作了位于舞臺上方的兩個小方塊“熱區(qū)”。向上揮手時接觸到上方兩個“熱區(qū)”,就會激活不同的特殊攻擊能力。學生發(fā)現(xiàn)顏色沒有實際意義,僅僅為了編寫程序過程中便于進行區(qū)分而已。
我們以圖3中右側綠色方塊的程序截圖(如下頁圖4)為例,當右側方塊發(fā)生光流變化偵測到運動后,發(fā)送一個廣播控制角色往右側移動。
感知光流的方向
接下來,筆者帶領學生測試的這一功能更是令人振奮,也是筆者認為真正使得Scratch2.0視頻感知技術擺脫雞肋功能的關鍵性技術。Scratch2.0除了可以偵測光流在舞臺或角色上的變化之外,也實現(xiàn)了對“運動方向”的偵測,偵測方向也同樣有偵測“舞臺”和“角色”兩種方法,在這個實驗中我們以偵測舞臺的光流方向為例,以這個指令為核心。
事實上這是一個功能相當強大而又不好掌握的指令,目前使用到該功能指令的優(yōu)秀教學實例也較為少見。確實有Scratch愛好者利用該功能實現(xiàn)了非常精準的“人體跟蹤”效果,即讓程序中的角色跟隨攝像頭前人物的運動而運動。用此功能實現(xiàn)的“人體跟蹤”要比前面例子中用“熱區(qū)”實現(xiàn)的體感控制更為先進和準確,但由于數(shù)據(jù)的計算相當復雜并不適合小學課堂教學,筆者在課堂中以一個簡單的教學設計帶領學生體驗了一下該指令的功能,起到拋磚引玉的作用,在課后確實有學有余力的學生實現(xiàn)更優(yōu)秀的方案。程序如圖5所示。
以飛機大戰(zhàn)游戲的左右控制為例,學生在測試中發(fā)現(xiàn),Scratch中光流往右測運動會得到一個正值,反之則為負值。視頻偵測動作在舞臺上大于30才觸發(fā)后續(xù)程序,這樣可以屏蔽掉一些干擾性的微小動作。偵測到的方向數(shù)值除以50是學生經(jīng)過反復測試的結果,是因為需要適配X軸左右移動的數(shù)值而進行的數(shù)值縮小,否則方向數(shù)值過大會使角色在短時間內(nèi)移動過大。
無關光流的視頻取色另類應用與局限
接觸過機器人傳感技術的同行應該對光反射傳感很熟悉,現(xiàn)在的RGB色彩傳感技術也已經(jīng)相當精準,也經(jīng)常應用于諸多實用和高效的教學實踐。筆者在Scratch2.0視頻感知技術的教學設計中突然想起《三國演義》中黃忠與法正計奪定軍山的情節(jié)。于是讓學生嘗試了用視頻中獲取的顏色來實現(xiàn)交互并控制角色運動的案例,如我們對攝像頭出示紅色,角色前進;出示白色,角色后退。程序如圖6所示。
該程序實質與視頻偵測獲取的光流數(shù)值無任何關系,僅僅把取色的來源改成了攝像頭獲取的視頻內(nèi)容,因此筆者把這個功能視為“另類”應用,學生覺得非常有意思。只是經(jīng)過了大量的實驗學生發(fā)現(xiàn)這種玩法在目前的Scratch版本中只是“看起來很美”,在實際操作過程中限制很多。例如,取色時色源的距離不同會產(chǎn)生顏色誤差,很難在控制時獲得完全一致的色源。學生采用了很多辦法如通過“或”邏輯關系設定多個偵測的顏色(如多次取色),增加觸發(fā)的命中率;或者人為地制作漸變色源,如直接打印了從淺到深的紅色紙條,有學生做成了紅色紙卷(紙卷也可以使角色在同一時間接觸多種漸變的紅色),但實際操作效果仍然不夠理想。參加了機器人社團的學生反映,為什么Scratch在偵測的時候無法設定一個閥值范圍?一語激起千重浪,歸根結底是Scratch2.0雖然可以通過數(shù)值設定得到不同的顏色,但是仍然無法將顏色轉變?yōu)閿?shù)值。而如果僅僅獲得灰度值,學生就可以利用Scratch實現(xiàn)更豐富更有趣的應用,不需要任何額外的輔助設備就可以把攝像頭當成光感來應用,完成很多傳感實驗。
綜上所述,Scratch2.0基于光流原理的視頻感知技術可謂簡潔不簡單,原生的硬件支持使得不再需要任何擴展板或第三方軟件支持,簡化了操作的門檻,這一點看似微小的完善卻可以讓學生在課堂上接觸和嘗試傳感技術和人工智能變得更易于實現(xiàn);同時,簡潔的指令又讓學生在課堂中衍生出多種多樣的實踐,筆者本文涉及的僅僅是在課堂中實現(xiàn)的幾種入門的教學案例。作為教學,我們讓學生以體驗為主,可以知其然不必知其所以然;作為教師,我們不僅是軟件的使用者,也是教學的設計者,掌握更多核心技術和原理可以幫助我們在教學應用設計中如虎添翼。