3Gear Systems 手部操作系統(設定教學)


現在如果要使用 Microsoft Kinect 或是 Asus Xtion 這類的深度感應器,來做體感程式的開發的話,基本上大多都是使用 Kinect for Windows SDK,或是 OpenNI + NiTE 的方案;不過如果真的有在開發的話,應該也都會注意到,實際上這兩個方案、主要都是以人體的全身動作為主,並沒有提供類似 Leap Motion 那樣、針對雙手做細部偵測的功能。

不過,現在在 OpenNI 的 middleware 下載頁面(連結)裡面,現在也有一些針對手部做處理的函式庫(註 1)了~而 Heresy 這次介紹的,就是 OpenNI 上的「Finger-Precise Tracking」這個項目;他是一套由 3Gear System(官網)所開發的手指操作系統,算是滿早就開始開發、而且感覺完成度相對高的一套系統(之前的介紹)。

首先,下面是他的官方展示影片:

它的系統設計,主要是透過把感應器架設在正上方、往下拍,來抓到雙手的動作、並進行追蹤(下左圖);而目前雖然是以單感應器版本為主,不過早期他其實是以雙感應器為主、來進行設計的(下右圖,以前的介紹影片)。

 


準備檔案

而目前 3Gear 這套系統,基本上是可以免費下載的,他的下載頁面是:

https://threegear.com/download.html

目前有提供 Windows 7 x64 和 Mac OS X 64 位元的版本(很遺憾,沒有 32 位元的版本),可以直接下載。裡面除了它的系統、以及範例程式外,也包含了上面的組裝規格與教學、以及必要的文件。

另外,由於 3Gear 的程式都是用 Java 開發的,所以如果電腦上沒有安裝 Java 的話,也需要先去下載 64 位元的 Java SE 來安裝(連結)(應該是 JRE、Java Runtime Environment 就可以了)。

下載、安裝了「gestural_user_interface_x64.exe」了這個檔案後,在預設的狀況下,所有相關的檔案都會在「C:\Program Files\GesturalUserInterface」目錄裡。而安裝程式安裝完成後,會開啟一個系統管理員權限的命令提示字元視窗,由於這個視窗之後還有用,所以建議先不要關掉。

而由於 3Gear 也有把文件一起安裝,所以接下來的步驟,就可以參考 \doc\installation-win64.html 這份說明文件了~

不過,雖然檔案可以直接下載,但是真的要使用的話,是需要向 3Gear 申請 license 的。針對個人使用者、學術研究、或是小型的商業公司,都可以申請免費的授權;詳細的說明,可以參考其官方網站的《Licensing》頁面。基本上,只要寄一封信到指定的信箱、並說明來意,應該很快就可以收到「license.yml」這樣的授權文件了~(Heresy 隔天就收到了、一年期的學術授權)

在取得 license.yml 這個檔案後,只要把他放到安裝目錄(C:\Program Files\GesturalUserInterface)下,就可以了


硬體環境建置

東西都準備好後,接下來要先建置整個硬體的環境。在程式安裝完成後,\doc\camera_frame_assembly.pdf 這份文件裡面,有提供 3Gear 建議的單一感應器架設方法。另外也可以參考 \doc\installation-win64.html 這份說明文件。

不過,如果只是測試的話,其實也不一定要真的弄一個固定的支架出來,其實這套系統只要能由上往下,讓深度感應器拍到雙手的樣子,就可以做到一定程度了~所以像 Heresy 自己其實就是單純把 Xtion Pro 在螢幕上架高(用厚紙板做的東西…)、往下拍而已;下面就是 Heresy 的建置方法:

 

不過這樣的配置,其實感應器並沒有固定住,所以使用時得小心震動到、引起山崩了。 ^^"


初始環境設定

接下來,第一次執行時,則是要進行第一次的環境初始化設定。由於 3Gear 的這套系統是採用需要預先校正、定位的設計,所以並不是把硬體架設好、就可以馬上使用的。首先,必須要先印出校正用的圖案、用來做校正的參考;他拿來校正的,是一張黑白的棋盤紙,在 doc 資料夾下,也有提供兩種大小的 PDF 檔(4×5-1.5.pdf4×5-1.5-A4.pdf),可以用來列印。這邊就請自行選一張來列印,作為校正時的參考。

當上述的東西都準備好後,接下來是要使用系統管理員權限,來執行 camerasetup.bat 這個程式,進行初次的環境設定。這邊是建議使用之前安裝程式開啟的、有系統管理員權限的命令提示字元視窗,在裡面輸入「camerasetup」,來執行感應器的校正程式。(註 2)

校正程式開啟後,會像下圖的樣子;上面的影像,是感應器及時偵測到的紅外線影像,左下方的影像,則是操作的示意圖。

開啟程式後,把棋盤紙放到操作區域的中央、並且平行於感應器;如果程式有正確偵測到棋盤紙的話,應該可以看到畫面內的棋盤紙內會出現各種顏色的點(上圖就有),這時候按下中央的「Calibrate to Checkboard」按鈕,就可以開始進行感應器的校正了。

在經過一連串的計算、經過一小段時間後,系統會顯示類似下面的畫面,中央下方有一個格狀的平面;這就代表已經完成校正了~而如果把手移到操作區內的話,就可以看到手的 point cloud 了~

而確認沒問題後,就可以把程式關掉了。


執行 Server 程式

到上面為止,基本上算是完成所有的前置作業了。而實際要執行這套系統的時候,該怎麼做呢?

3Gear 的這套系統,基本上是採用 Server – Client 的架構,要使用的時候,需樣先執行一個 server 起來,透過這個 server 來讀取感應器的畫面、並進行分析;而其他的應用程式則是透過內部的網路連線,來向 Server 端要到分析完成的結果。

所以如果是要使用這套系統的程式,在執行前都必須要先把他的 server 程式跑起來才行;而要把 Server 執行起來的話,就是去執行「handdriver.bat」這個批次檔就可以了。
(HandDriver 直接點兩下執行就可以了,不需要有系統管理員的權限。)

他執行起來後,會有一個像是右圖的視窗,下面會顯示深度圖、以及用顏色標示出來的分析結果(右手是藍色、左手是紅色);而上方則是兩隻畫出來的手部示意圖,只要手動、這邊的 3D 手部模型也會跟著動。這個時候,就可以來試試看這套系統的分析、追蹤效果了~

不過,以 Heresy 自己的測試結果,感覺上他似乎還是沒有辦法很好地去追蹤每個手指的動作,感覺上比較接近在幾種不同的狀態間做切換(註 3)。而在上方的手部示意圖內,左下角可以看到「Left」和「Right」各有兩個圓圈,其中第一個圓圈,在手的食指和拇指併攏的時候,會變成實心的,這就代表他有成功地偵測到「Pinch」這個手勢(註 4);實際上,「pinch」這個手勢,應該也就是 3Gear 這套系統裡面,最重要的一個手勢了~之後的範例程式,基本上大多也都是靠這個手勢來做控制的。

另外由於 Kinect 或 Xtion 這類的深度感應器都有最短距離的限制,所以手不能抬得太高、否則可能會因為進入過近的範圍內、導致他無法抓到深度;這個問題,如果是使用短距離版的 CARMINE 1.9,應該會好一點。

而如果要結束 Server 的話,除了把視窗關閉,還要記得到他的命令提示字元視窗,按下鍵盤的 Ctrl + C,這樣才能強制把程式結束,這點也是稍微要注意一下的。


範例程式

而在 Server 跑起來之後,接下來就可以來執行他給的範例程式了。基本上,他給了好幾個可以拿來玩的範例,其中,Heresy 覺得可以試試看的,包括了:

  • assembly_trainer.bat
    一個 3D 組裝的範例,透過 pinch 這個手勢,可以移動場景中的物體、到指定的地方、完成組裝。

  • heart_demo.bat
    可以控制心臟、以及切平面的展示範例,一樣是透過 pinch 這個手勢來做操作。如果兩手同時捏住心臟的話,則可以旋轉心臟。按鍵盤的「t」有簡單的教學。

  • rotation_trainer.bat
    透過兩手同時捏住左右兩側的把手,來旋轉一隻兔子的範例。

  • xylophone.bat
    木琴的範例程式,把食指伸直後,透過移動食指來敲打木琴、發出聲音。

  • slingshot.bat
    一個拉彈弓、打方塊的小範例。

下面左圖,就是 assembly_trainer.bat 這隻程式的樣子,而下方右圖,則是 heart_demo.bat 的樣子。

 

除了簡單的操作範例外,他也有提供一些小遊戲,可以試著玩看看:

  • cricket_defender.bat
    透過 pinch 這個手勢、捏住 3D 的劍(?),把炸彈打掉。

  • dino_eggs.bat
    撿恐龍蛋的小遊戲,一樣是用 pinch 這個手勢來操作。

另外,他也還提供了 dashboard.bat 這隻程式,算是一個簡單的鍵盤滑鼠模擬器,有興趣的話也可以玩看看。


這篇就先寫道這了。基本上,這篇算是簡單地介紹,要怎樣去建置、執行 3Gear 的這套系統起來;而至於要怎麼去寫他的程式,就等到之後再說了。

整體來說,個人是覺得如果是以要用手勢來做操作來說,這套系統雖然不能算是完美,不過應該也算是堪用了。它的優點,包括了:

  1. 基本上可以免費使用,而且不需要依賴 NiTE。
  2. 雖然沒有辦法很好地抓到手的細部動作,不過基本上 pinch 這個主要的手勢,還有不差的偵測效果。(註 5)
  3. 使用 TCP Socket Server 來提供資料,理論上可以用任何語言來使用它的結果。(註 6)

而他的缺點,在 Heresy 來看,主要在於:

  1. 硬體環境需要讓感應器由上往下拍,而且還需要事先校正,要建置會比較麻煩。
  2. 手部動作還是沒辦法抓得很好。
  3. 礙於感應器的使用距離限制,手部活動範圍有限(不管是往上,還是左右)。

至於到底時不實用,應該也是見仁見智了~


附註:

  1. OpenNI 網站上,其他和手部相關的 middleware 有:3D Hand Tracking LibraryTiptep SkeletonzerPrimeSense Grab Detector;另外 CodePlex 上的 Candescent NUI 也可以看看。

  2. 如果該視窗已被關閉,請自己開啟一個新的,但是記得要有係統管理員權限,不然校正完的資料會因為沒有權限寫入、而無法存下來的。
    另一種解決方法,則是把整個 GesturalUserInterface 移到 Program files 以外的資料夾,這樣就沒有寫入權限的問題了。

  3. 雖說感覺他的手指沒有抓得很好,不過實際上他的 API(網頁)是有提供每一個手指關節的位置的,所以實際上他應該還是有去估算每根手指的位置才對。

  4. Heresy 也不知道第二個圓代表什麼,至少到目前都沒觸發成功過…有人知道的話也麻煩告知一下。

  5. 根據視角,可能會變得不是那們容易偵測成功,不過手的角度調整一下,大多可以成功。

  6. 他的同訊協議定義:http://www.threegear.com/latest/doc/protocol.html
    針對 C++ 和 Java,3Gear 有提供封包好的函式庫,可以較簡單地使用。

  7. 這套系統也可以針對每個使用者,進行個別的手做資料庫的紀錄,理論上會有更好的效果。這部分的說明請參考 \doc\handcalibration.html 這份文件。

對「3Gear Systems 手部操作系統(設定教學)」的想法

  1. Heresy大大您好,我是輔大資工系四年級的大學生,有幾個問題像請教前輩。目前還有什麼類似這樣子(單純手部細微偵測)的middle lib嗎?有上網找過許多資料,最符合我目前需求的就是這個lib,可惜因為他賣給oculus了,所以目前束手無策,想請問一下Heresy有沒有什麼好的想法或是文章、lib能提供研究。另外提供一下我目前在作的東西的想法,我現在目前就是將kinect 或是 kinectv2 倒掛像是您架設3-gear system 一樣,我們原本想法是要將一個感興趣的區域圈起來,然後將在該區域並且深度剛剛好是碰到桌子上的面積做計算,接者只要面積大過一個程度就會視為按下的狀態,但是kinect或是 kinectv2 有時候會判斷錯深度,導致明明該深度沒有面積但還是計算進去,導致按鈕錯亂,所以接下來就想到說可以使用先偵測手的骨架,再判斷手指末端的深度判斷按下狀態,但是目前找了很多資料,也在github上看了很多有關手部骨架的專案,但是不是效率(fps)太差就是良率(偵測骨架)差,想說有沒有類似的專案或是開源lib或是Heresy大大有沒有任何想法可以提供的,謝謝。

  2. 您好,现在3gear好像已经关闭了license的发放,但是我现在非常非常需要使用一下,不知道能不能帮一下忙,让我用一下您的license,真的万分感谢

  3. 我去申请了license,可以一直没有给我回复,是我的申请时写的有问题吗?能够把你的发给我一份呢?或者告我应该怎么去申请呢?谢谢了

    • 他不同的授權是要寄到不同的信箱的,有沒有可能是寄錯地方了?
      另外,可能也要確認一下內容的英文文法或用字有沒有問題?可能可以考慮盡量明確、簡單一點。

  4. 之前有用Kinect XBox 360裝來玩了一下,
    可能是沒有near mode的關係,
    真的蠻容易偵測不太到手。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.