觸發機制是很有意思的一章
與觸摸屏的Tap、鼠標的Click不同,體感沒有特定的觸發動作,換言之我們需要自行設計一個合理的觸發動作。
如果設計不合理,就會造成誤觸發,無法觸發或者用戶不願意去使用等問題。
常用的觸發機制有語音、以及不同的手勢,接下來我們將一起探討這些設計以及背後潛在的問題。
—我是目錄—
動作識別
手勢
|- 觸碰
|- 揮動
|- 觸發機制
|- 雙手縮放
姿勢
|- 關鍵知識
|- 設計方案
|- 前景與限制
—目錄結束—
語音
語音是一種非常有效的室內控制方式,特別是在封閉環境內。我們不再需要擺一些姿勢來完成觸發(幾乎所有的非自然手勢都需要用戶學習,有研究顯示,大部分用戶,無論是手指、手臂或者是其他動作的姿勢,常用的能記住的手勢不超過5個,這與人的短期記憶數7±2基本相符)。
“發送的手勢是什麼來着?我想想…”
例如我們對着設備說“XBOX”、“Kinect”,表示觸發。
風險在於不適合在吵雜的環境中應用,儘管Kinect的麥克風陣列有指向性以及能大概的識別用戶,實際使用中,識別率仍會受到影響。一個可行的方案是不使用Kinect的麥克風陣列輸入聲音,而轉用藍牙耳機(例如具有頜骨技術的設備,較單純的雙麥克風耳機,能消除更多的噪音,提高識別率),這種方案比較適合用於演講時。
“用好耳機,效果不錯,妥妥的”
語音識別的第二個風險在於可能降低用戶的羣體舒適度(如在辦公室中大聲使用語音命令),所以我們建議,語音很好,但不應作爲唯一的輸入途徑,並且應該提供開啓選項給用戶按需選擇。
動作觸發
常見的動作方案有:關節進入指定區域、抓握拳頭。
關節進入指定區域通常用於起到一個告訴Kinect “我需要操作”的作用(Engage)
例如shoulderCenter或者hipCenter的z軸在2米以內時,用戶可以觸發,這種情況常用於戶外環境,讓路人和你的應用開始交互。
又或者是當用戶的手擡起時(即hand的Y軸大於elbow)、手進入特定的區域時(上一章提到的藍色的手臂活動空間),用戶獲得光標。
抓握拳頭常用於拖拽(Drag)等動作,OpenNI可以很好的判定,但是Microsoft的SDK中缺乏該動作。
爲此我們可以使用一些簡單的判斷,例如先以關節中心(如handRight)截取一個感興趣區域(即ROI),然後統計ROI中,屬於用戶的像素點數佔總像素點數的比例,當小於一個闕值時(如25%),就認爲用戶握拳了。這樣的方法實現起來速度快。
缺點是會把“手刀”的情況也誤認爲是握拳。單獨作爲判斷依據的話,往往容易誤判。然而考慮到開發效率、運算效率以及用戶日常使用習慣而言,這種方法仍是一種不錯的選擇。在優化方面,可以以handRight到wristRight爲邊長的一半,取正方形ROI(圓形計算較慢),以匹配不同遠近大小的手型;也可以配合上面的“關節進入指定區域”輔助判定。
當然,有時爲了達到更高的識別率,可以酌情使用OpenCV等輔助SDK進行識別,或者乾脆改用OpenNI
值得注意的是機器學習型的識別,對於應用開發者來說往往需要耗費大量精力去訓練樣本,以提高識別率,故應慎重。
小結
觸發機制大體須要注意:
1. 必須容易達成(例如單手動作顯然比雙手動作簡單)
2. 長期使用不會造成負擔(如小幅度的動作不容易讓用戶疲勞)
3. 不容易誤判
轉載自http://www.kinectutorial.com/?p=1200本人純粹是收藏,方便以後查看~