用手勢控制電腦:HandGKET


之前在 OpenNI 1 的時候,有一套名為 FAAST 的軟體,可以把人體的全身動作,對應成 Windows 的鍵盤滑鼠訊號,讓使用者可以透過肢體動作,來完成電腦的操作(請參考《用 FAAST 把 Kinect 當 Windows 鍵盤用!》);不過感覺上,該團隊似乎停止開發了,所以當 OpenNI 改版到 OpenNI 2 之後,FAAST 也不能用了。

不過現在,又有一套名為「HandGKET」(Hand Gesture Key Emulation Toolkit)的軟體,可以透過 OpenNI 2 做到類似的事情了~

它的官方網站是:https://sites.google.com/site/kinectapps/handgket
下面則是官方的展示影片:

如果想玩的話,可以在該頁面最下方,找到檔案的下載;只要點選「HandGKET_v0.9.2(Distribution).zip」這個檔案右方的向下箭頭,就可以下載此程式的壓縮檔了。而解壓縮後,裡面有兩個資料夾,分別是 32 位元和 64 位元的版本,可以視需要使用。而另一個「HandGKET_manual.pdf」的檔案,則是這套軟體的使用說明,建議也下載來看看。

由於他是基於 OpenNI 2 和 NiTE 2 來開發的,所以要使用的話,可能會需要安裝 OpenNI 2 和 NiTE 2(不過實際上他有附上對應的 dll,理論上只要有驅動程式應該可以不用裝);而如果是使用 Microsoft Kinect 感應器的話,則需要安裝 Kinect for Windows SDK 或 Kinect for Windows Runtime(連結),才能正常使用。

而由於此程式沒有用來做設定的圖形介面,所以所有的設定,都是要靠一個純文字檔來完成;詳細的設定說明,請參考官方的文件。


和 FAAST 使針對全身骨架來做處理不一樣,HandGKET 只有針對手的位置來做處理,所有的鍵盤滑鼠對應,都是靠雙手來觸發的。

HandGKET 使用上分為「單手模式」和「雙手模式」兩種;「單手模式」可以用來對應鍵盤和滑鼠,「雙手模式」則只能對應鍵盤。而由 HandGKET 應該是使用 NiTE2 來做手的追蹤的,所以在執行起來後,要先透過 NiTE 的 Wave(揮手)或 Click(往前伸再縮回)來完成手的定位。

而在程式執行中,螢幕中間應該會出現顯示目前狀態的小視窗,裡面的圖示各自代表不同的意義如下:

基本上,都是要等到綠色的手出現,才能開始進行手勢的。


在單手模式下,他支援六種手勢,代表了手往六個不同的方向移動,也就是「HAND_LEFT」、「HAND_RIGHT」、「HAND_UP」、「HAND_DOWN」、「HAND_PUSH」和「HAND_BACK」;而他的手勢的定義,就是先往其中一個方向,然後在一定的時間內、再移回原來的位置,就算是完成了一個手勢。

下圖就是程式執行後的畫面,在手的位置會有一個綠色方框(如果是滑鼠模式,會是一個圓);當手移動動的時候,他不會立刻跟著動,只要先移到別邊,在馬上移回這個方框,就算是完成一個手勢了。

每個方向也都可以設定不同的移動距離條件(TRHESHOLD),所以其實是可以根據手移動的距離,來決定要做的事情的。


在雙手模式下,他則提供了下列的十種手勢,一樣可以各自設定不同的條件,來對應到不同的鍵盤事件。

  • TWO_HANDS_PUSH
  • TWO_HANDS_BACK
  • TWO_HANDS_UP
  • TWO_HANDS_DOWN
  • TWO_HANDS_OPEN
  • TWO_HANDS_CLOSE
  • LEFT_HAND_PUSH
  • RIGHT_HAND_PUSH
  • TURN_LEFT
  • TURN_RIGHT

而要使用雙手模式,則是要先靠 Wave 或 click 的手勢,來讓程式能追到兩隻手,然後擺出下面的初始化姿勢、來進行接下來的操作。

而一樣,只要做出上面定義的動作,就可以送出對應的鍵盤事件了。


而在設定檔的部分,官方有提供一個「gesture_event.txt」的檔案,裡面就是範例的設定。有興趣的話,就玩看看吧~真的有需要的話,也是可以根據這個檔案、再參考文件來做修改的。

至於完整的設定教學?說實話,Heresy 可能不會下去寫了…如果有人有比較詳細的教學,也歡迎提供。


最後,下面則是用這套軟體來玩 Need for Speed 這款賽車遊戲的展示:

對「用手勢控制電腦:HandGKET」的想法

  1. 不好意思,想請問一下。
    如何切換keyboard mode 到mouse mode?
    在操作時,顯示的永遠都是方形,要如何才能顯示圓形的滑鼠模式呢QQ

    • 您好。
      Heresy 自己並沒有認真使用這套軟體, 建議有問題可以直接詢向 HandGKET 的開發人員詢問。

  2. 你好!
    你做"用手勢控制電腦:HandGKET"很神奇!我官方網站下載,但是..我沒有[箭頭],我看你的youtube有[箭頭]耶!!謝謝

    • 您好。
      YouTube 的影片是官方提供的示意影片,有可能他的游標是靠其他軟體加上去的。
      建議有問題可以直接詢向 HandGKET 的開發人員詢問。

    • 技術上做得到,但是由於 OpenCV 沒有直接可以拿來馬上用的模組,所以必須要自己寫。
      當然,也要看你要做到什麼程度。

        • 個人只能說,建議你先想好,你希望怎麼把動作對應到滑鼠的各項功能。
          要把手勢當滑鼠用,真要做得好,一點都不簡單…
          有很多地方都有可能出問題,也不會像實體滑鼠那麼準確、穩定。

          參考:
          OpenNI 的手部追蹤、外加簡單的滑鼠模擬
          https://kheresy.wordpress.com/2011/09/14/hand_tracking_in_openni/

          使用 PrimeSense NiTE 和 GrabDetector 的簡易版滑鼠模擬器
          https://kheresy.wordpress.com/2013/08/22/simple-mouse-simulator-with-primesense-nite2-and-grabdetector/

          OpenNI/Kinect 的手部追蹤、處理
          https://kheresy.wordpress.com/2012/08/23/hand-processing-with-openni/

          • Heresy你好~
            請問我有問題?我先下載[Kinect SDK],我安裝[OpenNI-Windows-x86-2.2],我看你有[基本使用],我都用你的[基本使用]。我用你的範例程式[使用PrimeSense NiTE 和 GrabDetector 的簡易版滑鼠模擬器]!但…有一點點bug(我安裝visual studio2008寫Visual C++),bug是[語法錯誤!]!是不是沒有安裝[vcredist_x86]呢?還有你的範例程式有參數是[#include ]!我不瞭解參數?請你可以解釋?謝謝!

          • 不知道你是否有學過 C/C++ 的程式開發?
            如果沒有,建議先學習一下 C/C++ 的基礎、以及 Visual Studio 的基本操作。
            (至少先了解 include 的意義)

            再者,你所提供的訊息,並沒有完整的錯誤訊息,僅有「語法錯誤」這項資訊,是無法判斷到底是什麼問題的。。

          • Heresy你好:
            我抱歉!實在是對C/C++程式一點點陌生,我是電機系出
            生,從工作是硬體工程師。讀書時候,對C/C++學一點點!
            現在是研究所研究生,對程式~我真的是[進階版]吧!!@@
            因為…我的指導教授做[手勢滑鼠]!我幫助請教你程式。對
            [手勢滑鼠]非常陌生。請教你怎麼樣可以開發程式進行呢?謝謝!

    • Heresy 這邊只能說,如果你想要學 OpenNI、OpenCV,會建議你先把 C++ 學好一點,至少要能理解基本的語法、關鍵字的意義和用途。

      另外,這邊也和你確認,Heresy 這邊收集、用手勢模擬滑鼠的方法,基本上前提都是要有深度攝影機(MS Kinect、ASUS Xtion);所以也請確認你有對應的攝影機可以用。

  3. 請問只要點開HandGKET.exe就可以運作了嗎?
    我把OpenNI2、NiTE等等都安裝好了,也將關於Kinect V2 有關的所有SDK都安裝好了,應該設定的去掉分號的也完成了,但點開HandGKET.exe時,數秒後即自動關閉,無法直接操作,為什麼呢?

    • 請確認你的感應器是哪一款。
      HandGKET 是搭配 OpenNI 2 和 NiTE2 來使用的。

      但是如果你是使用第二代的 Kinect 感應器的話,由於 OpenNI 沒有支援,所以是無法使用的。

      而如果你是使用第一代的 Kinect 的感應器,請安裝 Kinect for Windows 1.x,他不能搭配 Kinect for Windows 2.x 使用。

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料