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