現在如果要使用 Microsoft Kinect 或是 Asus Xtion 這類的深度感應器,來做體感程式的開發的話,基本上大多都是使用 Kinect for Windows SDK,或是 OpenNI NiTE 的方案;不過如果真的有在開發的話,應該也都會注意到,實際上這兩個方案、主要都是以人體的全身動作為主,並沒有提供類似 Leap Motion 那樣、針對雙手做細部偵測的功能。
不過,現在在 OpenNI 的 middleware 下載頁面(連結)裡面,現在也有一些針對手部做處理的函式庫(註 1)了~而 Heresy 這次介紹的,就是 OpenNI 上的「Finger-Precise Tracking」這個項目;他是一套由 3Gear System(官網)所開發的手指操作系統,算是滿早就開始開發、而且感覺完成度相對高的一套系統(之前的介紹)。
首先,下面是他的官方展示影片:
它的系統設計,主要是透過把感應器架設在正上方、往下拍,來抓到雙手的動作、並進行追蹤(下左圖);而目前雖然是以單感應器版本為主,不過早期他其實是以雙感應器為主、來進行設計的(下右圖,以前的介紹影片)。
準備檔案
而目前 3Gear 這套系統,基本上是可以免費下載的,他的下載頁面是:
目前有提供 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.pdf、4×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 的這套系統起來;而至於要怎麼去寫他的程式,就等到之後再說了。
整體來說,個人是覺得如果是以要用手勢來做操作來說,這套系統雖然不能算是完美,不過應該也算是堪用了。它的優點,包括了:
- 基本上可以免費使用,而且不需要依賴 NiTE。
- 雖然沒有辦法很好地抓到手的細部動作,不過基本上 pinch 這個主要的手勢,還有不差的偵測效果。(註 5)
- 使用 TCP Socket Server 來提供資料,理論上可以用任何語言來使用它的結果。(註 6)
而他的缺點,在 Heresy 來看,主要在於:
- 硬體環境需要讓感應器由上往下拍,而且還需要事先校正,要建置會比較麻煩。
- 手部動作還是沒辦法抓得很好。
- 礙於感應器的使用距離限制,手部活動範圍有限(不管是往上,還是左右)。
至於到底時不實用,應該也是見仁見智了~
附註:
-
OpenNI 網站上,其他和手部相關的 middleware 有:3D Hand Tracking Library、Tiptep Skeletonzer、PrimeSense Grab Detector;另外 CodePlex 上的 Candescent NUI 也可以看看。
-
如果該視窗已被關閉,請自己開啟一個新的,但是記得要有係統管理員權限,不然校正完的資料會因為沒有權限寫入、而無法存下來的。
另一種解決方法,則是把整個 GesturalUserInterface 移到 Program files 以外的資料夾,這樣就沒有寫入權限的問題了。 -
雖說感覺他的手指沒有抓得很好,不過實際上他的 API(網頁)是有提供每一個手指關節的位置的,所以實際上他應該還是有去估算每根手指的位置才對。
-
Heresy 也不知道第二個圓代表什麼,至少到目前都沒觸發成功過…有人知道的話也麻煩告知一下。
-
根據視角,可能會變得不是那們容易偵測成功,不過手的角度調整一下,大多可以成功。
-
他的同訊協議定義:http://www.threegear.com/latest/doc/protocol.html。
針對 C 和 Java,3Gear 有提供封包好的函式庫,可以較簡單地使用。 -
這套系統也可以針對每個使用者,進行個別的手做資料庫的紀錄,理論上會有更好的效果。這部分的說明請參考 \doc\handcalibration.html 這份文件。