謝作如
科幻電影中最吸引注意力的界面基本是用手勢(shì)操作的。2002年拍攝的電影《少數(shù)派報(bào)告》中預(yù)防犯罪小組的警察使用的界面就是如此,揮揮手就能夠控制屏幕上的內(nèi)容,確實(shí)很震撼。后來其具有的開創(chuàng)性的經(jīng)典場(chǎng)面,也成為科幻片和其他影視作品爭(zhēng)相模仿的橋段。
十多年過去了,這一手勢(shì)控制技術(shù)也逐步飛入尋常百姓家。從理論上說,只要有一款攝像頭,就能夠編寫程序體驗(yàn)簡單的手勢(shì)識(shí)別。如果擁有Kinect和Leap Motion之類的體感傳感器,你也能像《少數(shù)派報(bào)告》中男主角一樣,用最自然的手勢(shì)和電腦進(jìn)行交互。例如,你可以用手在空中翻動(dòng)你的音樂專輯,豎起大拇指它就會(huì)為你播放;你只要做出開車的手勢(shì)就可以在極品飛車中自由馳騁;你用手指做出手槍的形狀就可以代替鼠標(biāo)來操縱游戲中的槍;你還可以用它畫畫、玩紙牌等。
當(dāng)然,只要你會(huì)編程,哪怕僅僅懂得最簡單的圖形化編程軟件——Scratch,也能夠編個(gè)小游戲,用手勢(shì)來控制角色運(yùn)動(dòng),夠酷吧!考慮到Kinect體積比較大,需要在較大的空間才能使用,我選擇了Leap Motion來介紹如何實(shí)現(xiàn)手勢(shì)控制。
● Leap Motion簡介
Leap Motion是體感控制器制造公司Leap生產(chǎn)的體感控制器。當(dāng)Leap Motion首次亮相之時(shí),外界認(rèn)為它承載了一個(gè)新穎而獨(dú)特的計(jì)算機(jī)用戶體驗(yàn)──通過揮舞手指或拳頭來和計(jì)算機(jī)進(jìn)行交互,甚至有媒體認(rèn)為可用Leap Motion替換傳統(tǒng)的鼠標(biāo)。Leap Motion的體積小,僅一包口香糖大小,通過USB連接電腦后,它會(huì)創(chuàng)造出一個(gè)4立方英尺的工作空間。在這個(gè)空間里,10個(gè)手指的動(dòng)作都會(huì)被即時(shí)追蹤,誤差在0.01毫米以內(nèi),最大頻率是每秒鐘290幀,精確度相當(dāng)于Kinect的200倍(如圖1)。這樣的精準(zhǔn)程度足夠保證用戶順利完成如pinch-to-zoom或控制3D渲染物體等操作。
● Leap motion編程環(huán)境配置
1.安裝Leap motion的驅(qū)動(dòng)程序
首先要安裝Leap motion的驅(qū)動(dòng)程序。訪問https://www.leapmotion.com/setup,下載驅(qū)動(dòng)。驅(qū)動(dòng)安裝成功后,還要注冊(cè)并登錄Leap motion的網(wǎng)站,具體過程這里不再贅述。
2.安裝Scratch 2.0 Plug-in for Leap Motion
Scratch 2.0 Plug-in for Leap Motion是一位名叫斯蒂芬·豪威爾的愛爾蘭老師開發(fā)的插件。這位老師先后為Kinect和Leap motion編寫了for Scratch的插件程序,為Scratch的功能擴(kuò)展做了很多有趣的工作。
點(diǎn)擊Leap motion官網(wǎng)的“APPS”欄目,在搜索框中輸入關(guān)鍵詞“Scratch”,就能找到斯蒂芬·豪威爾編寫的插件“Scratch 2.0 Plug-in for Leap Motion”。登錄網(wǎng)站即可免費(fèi)安裝,只是服務(wù)器在國外,安裝速度有點(diǎn)慢。
插件安裝地址:https://apps.leapmotion.com/apps/scratch-2-0-plug-in-for-leap-motion/windows#,插件安裝成功后,Leap Motion App Home中會(huì)出現(xiàn)一個(gè)新的應(yīng)用,如圖2所示。
3.安裝Scratch 2.0并載入相關(guān)腳本
顧名思義,“Scratch 2.0 Plug-in for Leap Motion”是Scratch2.0的插件,要先安裝Scratch2.0。在插件的安裝頁面中,作者還提供了Scratch2.0的腳本文件“LeapMotion.json”。打開Scratch2.0,按住“Shift”鍵點(diǎn)擊程序上方的“文件”,彈出的下拉菜單中將多出一項(xiàng)命令“Import experimental HTTP extension”(如圖3)。載入“LeapMotion.json”文件后,Scratch的“更多模塊”中就能看到Leap Motion的專屬指令了(如圖4)。
從原理看,“Scratch 2.0 Plug-in for Leap Motion”相當(dāng)于是一個(gè)橋梁,將Leap Motion和Scratch聯(lián)系起來。當(dāng)電腦接入Leap Motion,并且Scratch正常運(yùn)行時(shí),Scratch 2.0 Plug-in for Leap Motion的界面會(huì)顯示如圖5的提示。
● 編一個(gè)手勢(shì)控制的程序
Leap Motion能夠精確識(shí)別雙手,提供一系列和手勢(shì)相關(guān)的信息,如每一個(gè)手指的X、Y、Z的坐標(biāo)位置等。其遵循右手坐標(biāo)系,坐標(biāo)系中單位與物理世界中的一毫米相對(duì)應(yīng),坐標(biāo)原點(diǎn)是設(shè)備的中心。X、Z軸組成水平的一個(gè)平面,X軸指向設(shè)備的長邊,Y軸豎直向上為正方向,Z軸相對(duì)屏幕向外是正方向,建議通過Leap Motion的觀察器來熟悉操作(如圖6)。
Scratch 2.0 Plug-in for Leap Motion并沒有提供Leap Motion的全部SDK數(shù)據(jù),而是提供了其中最常用的幾類數(shù)據(jù),如手和手指的坐標(biāo)。手勢(shì)方面也僅僅提供了是否可見以及手掌是否張開。
為了幫助大家理解這些指令,我進(jìn)行了分類整理,并進(jìn)行說明(如下頁表1)。
1.小試身手:用手“抓”住小貓
首先用手勢(shì)控制一個(gè)角色“hand_open”,當(dāng)“hand_open”角色遇到小貓角色的時(shí)候,用“Hand-1 open”判斷是否處于“抓”的動(dòng)作。如果是,小貓角色的坐標(biāo)就跟隨手的坐標(biāo)移動(dòng)(如圖7)。
具體的程序代碼說明如表2。
2.自由創(chuàng)意:用手勢(shì)控制的“捕魚游戲”
這是五年級(jí)小學(xué)生編寫的一個(gè)小游戲,小作者設(shè)計(jì)了如下功能:漁網(wǎng)在默認(rèn)情況下是關(guān)閉的,隨著手的運(yùn)動(dòng)而移動(dòng)坐標(biāo)。當(dāng)張開手掌時(shí),漁網(wǎng)張開,小魚碰到就被捕。一秒鐘后,漁網(wǎng)自動(dòng)收回。其中每撒一次網(wǎng),就要扣除一定的金幣,而捕到的魚可以換金幣(如圖8)。
考慮到LeapMotion的Y軸是手的高度,在電腦前操作容易遮住顯示屏。小作者用Z軸的數(shù)據(jù)來作為Scratch的Y軸數(shù)據(jù)。其實(shí)代碼還是很簡單,如圖9所示。
通過這兩個(gè)范例,大家可能對(duì)Scratch2.0加上Leap Motion來玩手勢(shì)控制有了一定的了解。斯蒂芬·豪威爾老師在插件頁面中提供了他的幾個(gè)簡單范例,值得初學(xué)者參考。一般而言,我們很難用Scratch2.0編寫很復(fù)雜的手勢(shì)控制的程序。但是,只要有足夠的創(chuàng)意和算法基礎(chǔ),僅僅“Scratch 2.0 Plug-in for Leap Motion”提供的功能,就可以讓中小學(xué)生編寫出很酷的手勢(shì)控制方面的應(yīng)用來。如果具有足夠的數(shù)學(xué)功底,完全可以試試一些簡單的手勢(shì)識(shí)別。如果你對(duì)Leap Motion手勢(shì)控制編程感興趣,請(qǐng)關(guān)注下一篇,跟我一起繼續(xù)研究更加有趣的作品。
如果對(duì)相關(guān)內(nèi)容感興趣,請(qǐng)關(guān)注主持人博客。