【Alex專欄】Kinect應用設計5

觸發機制是很有意思的一章

與觸摸屏的Tap、鼠標的Click不同,體感沒有特定的觸發動作,換言之我們需要自行設計一個合理的觸發動作。

如果設計不合理,就會造成誤觸發,無法觸發或者用戶不願意去使用等問題。

常用的觸發機制有語音、以及不同的手勢,接下來我們將一起探討這些設計以及背後潛在的問題。

—我是目錄—

動作識別

手勢

|- 觸碰

|- 揮動

|- 觸發機制

|- 雙手縮放

姿勢

|- 關鍵知識

|- 設計方案

|- 前景與限制

—目錄結束—

語音

語音是一種非常有效的室內控制方式,特別是在封閉環境內。我們不再需要擺一些姿勢來完成觸發(幾乎所有的非自然手勢都需要用戶學習,有研究顯示,大部分用戶,無論是手指、手臂或者是其他動作的姿勢,常用的能記住的手勢不超過5個,這與人的短期記憶數7±2基本相符)。

headache

“發送的手勢是什麼來着?我想想…”

例如我們對着設備說“XBOX”、“Kinect”,表示觸發。

風險在於不適合在吵雜的環境中應用,儘管Kinect的麥克風陣列有指向性以及能大概的識別用戶,實際使用中,識別率仍會受到影響。一個可行的方案是不使用Kinect的麥克風陣列輸入聲音,而轉用藍牙耳機(例如具有頜骨技術的設備,較單純的雙麥克風耳機,能消除更多的噪音,提高識別率),這種方案比較適合用於演講時。

noiseblock

“用好耳機,效果不錯,妥妥的”

語音識別的第二個風險在於可能降低用戶的羣體舒適度(如在辦公室中大聲使用語音命令),所以我們建議,語音很好,但不應作爲唯一的輸入途徑,並且應該提供開啓選項給用戶按需選擇。

 

動作觸發

常見的動作方案有:關節進入指定區域、抓握拳頭。

關節進入指定區域通常用於起到一個告訴Kinect “我需要操作”的作用(Engage)

例如shoulderCenter或者hipCenter的z軸在2米以內時,用戶可以觸發,這種情況常用於戶外環境,讓路人和你的應用開始交互。

distance

又或者是當用戶的手擡起時(即hand的Y軸大於elbow)、手進入特定的區域時(上一章提到的藍色的手臂活動空間),用戶獲得光標。

image

抓握拳頭常用於拖拽(Drag)等動作,OpenNI可以很好的判定,但是Microsoft的SDK中缺乏該動作。

爲此我們可以使用一些簡單的判斷,例如先以關節中心(如handRight)截取一個感興趣區域(即ROI),然後統計ROI中,屬於用戶的像素點數佔總像素點數的比例,當小於一個闕值時(如25%),就認爲用戶握拳了。這樣的方法實現起來速度快。

缺點是會把“手刀”的情況也誤認爲是握拳。單獨作爲判斷依據的話,往往容易誤判。然而考慮到開發效率、運算效率以及用戶日常使用習慣而言,這種方法仍是一種不錯的選擇。在優化方面,可以以handRight到wristRight爲邊長的一半,取正方形ROI(圓形計算較慢),以匹配不同遠近大小的手型;也可以配合上面的“關節進入指定區域”輔助判定。

fist

當然,有時爲了達到更高的識別率,可以酌情使用OpenCV等輔助SDK進行識別,或者乾脆改用OpenNI 大笑

值得注意的是機器學習型的識別,對於應用開發者來說往往需要耗費大量精力去訓練樣本,以提高識別率,故應慎重。

 

小結

觸發機制大體須要注意:

1. 必須容易達成(例如單手動作顯然比雙手動作簡單)

2. 長期使用不會造成負擔(如小幅度的動作不容易讓用戶疲勞)

3. 不容易誤判


轉載自http://www.kinectutorial.com/?p=1200本人純粹是收藏,方便以後查看~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章