摘要:現在的家庭對于孩子的早教越來越重視,市面上大量的早教啟蒙書籍、玩具、應用程序被開發出來,幫助孩子“認字閱讀”、“啟蒙算數”、“增長知識”、“培養興趣”等,因此體感交互設備也應運而生。基于此,本文圍繞基于體感交互的兒童認知類應用進行了分析。
關鍵詞:兒童;體感交互;設備;應用
一、 引言
隨著技術的發展和生活方式的改變,計算機或移動設備輔助兒童教育,變得越來越普遍。而與這些設備之間的交互,一直受限于鼠標鍵盤或者觸摸屏這些傳統輸入設備。同時,兒童容易對數字設備過于迷戀,長時間面對屏幕、保持不動的姿勢、長期封閉在數字世界中不與外界接觸,都會對兒童的身心健康帶來不良的影響。而如果采用體感交互方式,讓兒童像做游戲一樣,可以在一個多人的環境中,用一種簡單、自然、基于身體動作的方式來參與互動,對于一款面向兒童的娛樂認知類應用來說,會是非常適合的解決方案。
二、 體感交互概述
體感交互,起源于游戲行業,顧名思義,就是通過肢體動作、語言等來和系統進行互動的交互方式。作為一個革命性的技術,正在提供一種新的人機交互方式,為兒童應用軟件設計打開了一個新的類型。隨著健康生活的理念日益深入人心,這種自然、新穎、容易上手、結合娛樂與運動的交互方式,脫離了鼠標鍵盤和觸摸屏的限制,打開身心,把身體從數字設備的束縛中解放出來,能夠讓兒童產生更高的學習積極性。因此,將體感交互技術融入到兒童認知類軟件,具有非常重要的意義。
三、 案例構思
本文將列舉的一款基于體感交互技術的兒童認知類應用,是一款以森林及其中各種動物為主題的互動游戲應用。游戲的設計思路是:投影在墻上的畫面,展現出一個卡通風格的森林的景象,森林中隱藏著各種小動物,需要兒童站在大屏幕前,通過做一些動作來模仿某種動物的某個特征,如果動作做對了,就能將它們召喚出來,來到小朋友跟前和小朋友進行互動。這款應用的場景、動畫、音樂,特別是交互方式,都大大增加了兒童學習的樂趣,減輕了兒童的認知負擔,幫助兒童了解這些動物和植物,在娛樂的同時獲得知識,達到寓教于樂的目的。借助肢體動作,擺脫了傳統輸入設備的限制,并能多人在大屏幕前同時參與,滿足了兒童好動的天性,降低傳統數字設備對兒童的身心傷害,使兒童無需坐在電腦前,減輕電腦輻射的同時實現了一定程度的運動健身效果。
四、 開發環境
在體感設備方面,早期的體感交互一般需要借助數據手套、3D頭盔等穿戴式設備來實現。但隨著機器視覺識別技術的發展,出現了直接利用深度攝像頭獲取人體骨骼和運動數據來實現人機交互的方法。其中之一有微軟開發的體感設備Kinect。Kinect是微軟在2010為XBOX360游戲機開發的體感外設。它具有即時動態捕捉、影像辨識、麥克風輸入、語音辨識、社群互動等功能。它不需要用戶接觸任何控制器,僅依靠相機捕捉三維空間中玩家的運動,還能辨認聲音以接受語音指令。它的主要部件有:一個彩色攝像頭、一個紅外攝像頭、一個紅外投影儀、一組麥克風列陣列。彩色攝像頭,用于獲取視角范圍內的彩色視頻數據流;紅外投影儀,用以投射波長為830納秒的肉眼不可見空間結構光,只要向視角范圍內的空間中打上這種結構光,整個空間就都被做了標記,把一個物體放進這個空間,只要看看物體上面的散斑圖案,就可以知道這個物體在什么位置。紅外攝像頭則專門用于接受紅外投影儀所投射出的這種結構光。麥克風陣列,由左邊一個和右邊三個獨立的微型麥克風組成,主要用于捕捉外界的立體聲,實現聲音辨識,識別語音指令。由于Kinect一開始是作為XBOX360專用外設而開發,需要驅動程序和相關軟件開發工具包的支持才能在PC上運行。可用的類庫有Openni,KinectSDK,手勢庫NITE,Kinectmssdk等。我們使用的是微軟官方提供的驅動程序和Kinect SDK v2.0。通過Kinect SDK能獲取的數據包括:語音,彩色圖像,深度圖像,骨骼和關節數據(對每個人追蹤25個關節點,可同時追蹤6人)。
在開發引擎方面,目前主流的游戲開發引擎,有Cocos2D、Unity3D、虛幻等。每一款游戲開發引擎都有其獨特的優缺點,只有深入了解引擎的開發環境和技術特點以及產品的表現力需要,并通過詳細的分析和充分的比較后,才能選出一款合適的游戲引擎軟件,來進行接下來的開發。首先本款應用的畫面風格是2D卡通風格,另一個需要滿足的需求是:能便利地接入Kinect SDK。而Unity3D恰好能很好地滿足這兩點。并且,Unity3D是一個非常成熟的游戲開發引擎,擁有大量的開發者,意味著有大量的討論、學習資料、活躍的技術社區,還有大量的第三方插件和資源。Unity3D是一個原生三維引擎,但用它來制作2D游戲也是完全無障礙。因為在Unity中,2D和3D只是一種視角上的轉換,所有的物體都是有3D坐標信息的,在Vector3轉為Vector2,并且視圖方式由透視變為正交的時候,Z軸信息就沒有意義了,也就從3D變為了2D。在2D模式下,層級視圖中只有一個正交攝像機(Projection選擇的是Orthographic)。Unity3D還為提供了專門用于2D模式的Sprite和SpriteRenderer組件,來使用圖片資源。Unity3D可使用C#來作為編程語言。調用Kinect方面,在正確安裝好Kinect官方驅動和SDK后,可到微軟官方網站下載最新的For Unity3D示例封包,里面如有必需的支持文件和示例場景,在新建項目中引入封包后,就可以打開示例場景測試了。接下來,按照示例中的相關代碼,很容易就懂得了Kinect SDK的主要API的用法。
五、 動作識別機制
首先需要定義一個標準動作。我們先考慮如何定義一個特定動作。從Kinect我們可以取得的數據有:關節點定位,即判斷相關的關節點是否落在一定的范圍內;骨骼角度,即判斷相關骨骼的角度是否處于一定范圍內,這個需要通過兩端關節的定位計算出來;關節角度,這是在看MSDN的Kinect SDK文檔時發現的,關節角度值就是該關節和下一關節的夾角。關節角度非常適合用來判斷特定動作,其無關于個體身高體型、站位遠近。那么不同的動作可以很方便地通過累計相關關節角度與標準動作關節角度的差值來評價。
在此項目中,用以召喚動物的動作,可以選取與特定動作相關的幾個關節用以評價,而不需要評價全身關節,否則反而容易因次要關節數據造成動作誤判。比如,兔子選取了:左右腕、左右肘、左右肩共6個關節。我們寫了一個程序可以方便地輸出指定關節的定義文件。由于在不同的環境下,Kinect獲取的數據總會有一定的抖動噪音,因此我們會先記錄一個較長時間范圍的數據然后取其平均值以消除抖動。
現在,我們有了一組關節的定義,在游戲中,只需要取得用戶對應關節的角度數據,將其依次與標準動作數據比較,累計下它們的差值,最后得到全部定義關節的差值總量,就可以判斷目標動作是否與標準動作匹配了。當然,也需要用平均值消除抖動。這是比較簡便、粗淺的評價方法,對所有關節同等對待,并沒有考慮給不同關節不同加權。
六、 最終效果
在交互區邊上,有一張動作示意海報,上面展示了動物的種類以及可以召喚出它們的肢體動作。比如,雙手支在耳朵上模仿兔子,用手遮在眉毛上模仿猴子,雙手上舉張開手指模仿雄鹿等。玩家走到投影屏幕前,做出預設的動作,位于前方的Kinect捕捉玩家人體骨架數據。通過比較若干關鍵骨骼的角度,如果玩家動作與預設動作相匹配,畫面中會出現一個該動物的識別圖標,提示玩家已識別出有效動作;同時圖標外會出現一個環形進度條,提示玩家保持這個動作一定時間。當玩家持續保持動作幾秒鐘,就能召喚出這種動物。首先是從森林中傳來該動物的叫聲,然后可以看到該動物緩步從森林中走出,來到玩家所在位置跟前。此時玩家可以通過一些動作與動物互動,如引起動物注視、讓動物跟隨等。隨后,該動物回到森林,自行離去。玩家可以進行下一個動作的識別。為了增加多人合作的趣味性,培養孩子的互相溝通與交流,游戲中設置了一些需要兩人合作完成的動作,作為獎賞,合作召喚出的動物在形象和出場氣氛上都更激動人心。
從最終的現場展示效果來看,該應用系統色彩明快、形象生動,交互方式新穎有趣,深受小朋友們的歡迎和喜愛。體感交互讓兒童以非接觸的自然方式與數字世界進行交流,使他們在游戲中獲得認知,達到了寓教于樂的目的。
作者簡介:
孫一帆,江蘇省蘇州市,蘇州工藝美術職業技術學院。