擬真棒球-Kinect 體感辨識 -...

70
資訊傳播工程學系 專題研究總審報告 擬真棒球-Kinect 體感辨識 指導教授:葉正聖 老師 專研學生:李宗樺 劉孝皇 劉健興 陳柏榮

Transcript of 擬真棒球-Kinect 體感辨識 -...

資訊傳播工程學系

專題研究總審報告

擬真棒球-Kinect 體感辨識

指導教授:葉正聖 老師

專研學生:李宗樺 劉孝皇 劉健興 陳柏榮

中 華 民 國 一 百 年 十 二 月

i

擬真棒球-Kinect 體感辨識

摘要

現今的 3D 動畫或 3D 遊戲,是先捕捉真人的動作後再套到模型上,

可節省大量的時間及人力成本,但傳統的動作捕捉器(Motion Capture)在

設備的成本及空間需求上不是一般人可以負擔起的。

因此我們要降低使用動作捕捉器的門檻,利用 Xbox360 的 Kinect

裝置搭配 Microsoft Kinect SDK 製作出一套可以偵測骨架與動作姿勢的

辨識系統,以此來取代傳統動作捕捉器,在研究方法上以深度值及骨架

辨識相互結合來做出與動作捕捉器類似的效果。

我們先建立 Microsoft Visual C#的 XNA Windows Game 專案,再將

C#的 WPF 帶入專案裡,而 WPF 主要是將 Kinect SDK 的彩色影像、深

度灰階影像以及骨架資訊顯示在畫面上,然後把在 Maya 中繪製好含骨

架的 3D 模型匯入到 XNA 中,而深度值與骨架資訊如何呈現出操控三維

空間物體則是本研究的重點。

本研究利用到 Kinect 的優點,做出一套偵測骨架變化的動作辨識系

統,成果透過 Kinect 硬體裝置來呈現出對使用者揮棒動作加以辨識的系

統。未來藉由基本的動作辨識效果延伸至其他應用,例如安全防盜、居

家看護、醫療復健、交通意外等,將專題研究實作的成果對社會有所貢

獻。

關鍵詞:Kinect、XNA、Motion Capture、Depth、Skeleton

ii

目錄

摘要 ...................................................................................................... i

目錄 ..................................................................................................... ii

表目錄 ..................................................................................................v

圖目錄 .................................................................................................vi

第一章 緒論 ........................................................................................1

第一節 研究動機與目的 .............................................................1

第二節 專案介紹 .........................................................................2

第二章 文獻探討 .................................................................................4

第一節 類似遊戲探討 .................................................................4

第二節 硬體技術 .........................................................................5

第三節 深度 .................................................................................7

第四節 骨架 .................................................................................9

第五節 運動辨識 ....................................................................... 10

第六節 繪圖呈現 ....................................................................... 11

第三章 Kinect 優勢分析 ................................................................... 12

第一節 Kinect 與 Wii Remote 比較 ........................................... 12

第二節 Kinect 與 Wii 的軟體比較 ............................................ 13

第三節 Kinect 與 PS3 週邊硬體的比較 .................................... 14

iii

第四節 Kinect 與 PS3 的軟體比較 ............................................ 15

第四章 工具介紹 ............................................................................... 17

第一節 OpenGL/OpenCV .......................................................... 17

第二節 OpenNI/NITE ................................................................ 18

第三節 Kinect SDK ................................................................... 21

第四節 Kinect SDK 與 OpenNI ............................................... 23

第五節 Autodesk Maya .............................................................. 24

第六節 Motion Capture 與 Kinect ............................................ 27

第五章 實作方法 ............................................................................... 28

第一節 透過三維資訊偵測骨架變化並操控模型 .................... 28

第二節 利用 Kinect SDK 操控自創模型 ................................. 30

第三節 打擊及投球動作辨識 ................................................... 32

第四節 系統分析運動姿勢 ....................................................... 34

第五節 繪製畫面呈現動作辨識的效果 .................................... 35

第六章 專題研究成果 ....................................................................... 36

第一節 程式輔助介面 ............................................................... 36

第二節 程式完整畫面 ............................................................... 38

第三節 程式功能介紹 ............................................................... 39

第四節 辨識數據分析 ............................................................... 40

iv

第七章 結論與未來展望 ................................................................... 42

第一節 結論 ............................................................................... 42

第二節 未來展望 ....................................................................... 43

參考文獻 ............................................................................................ 44

附錄一 實作關係示意圖 ........................................................... 附錄-1

附錄二 展示場地示意圖 ........................................................... 附錄-2

附錄三 工作分配 ....................................................................... 附錄-3

附錄四 實際展示記錄 ............................................................... 附錄-4

實際展示............................................................................. 附錄-4

專研總審............................................................................. 附錄-4

資傳展 ................................................................................ 附錄-6

資訊展 ................................................................................ 附錄-8

2011 ICDC 數位內容學術研討會 ....................................附錄-10

附錄五 發表論文 ......................................................................附錄-12

附錄六 組員心得 ......................................................................附錄-13

李宗樺 ...............................................................................附錄-13

劉孝皇 ...............................................................................附錄-14

劉健興 ...............................................................................附錄-15

陳柏榮 ...............................................................................附錄-16

v

表目錄

表 1:Kinect 與 Wii Remote 之比較表 ............................................. 12

表 2:Kinect 與 PlayStation3 週邊設備之比較表 ............................ 14

表 3:Kinect SDK 與 OpenNI 優缺點比較表 ................................... 24

表 4:Motion Capture 與 Kinect 之比較表 ....................................... 28

表 5:辨識數據分析表 ..................................................................... 41

vi

圖目錄

圖 1:Kinect 裝置說明圖 .................................................................... 6

圖 2:Kinect 取得資訊解說圖 ............................................................ 6

圖 3:Kinect 裝置架構圖 .................................................................... 7

圖 4:深度計算示意圖 ....................................................................... 8

圖 5:骨架辨識圖 ............................................................................... 9

圖 6:辨識骨架角度與關節點 .......................................................... 10

圖 7:Wii Remote 與 Kinect 的硬體圖 ............................................. 12

圖 8:Wii 遊戲軟體-大棒球聯盟 2 (The Bigs 2) ........................... 13

圖 9:Kinect Sports Season 2 ............................................................ 13

圖 10:PS3 硬體相關圖 .................................................................... 15

圖 11:PS3 用 PlayStation® Move 進行遊戲 .................................... 16

圖 12:OpenGL 圖形處理流程圖 ..................................................... 17

圖 13:cvLine 骨架繪製圖 ............................................................... 18

圖 14:OpenNI 架構圖 ..................................................................... 18

圖 15:Sample Read 程式執行圖 ..................................................... 19

圖 16:Stick Figure 程式執行結果圖 ............................................... 20

圖 17:分辨不同的玩家影像............................................................ 22

圖 18:追蹤玩家骨架與繪圖............................................................ 23

vii

圖 19:Maya 製作的骨架 ................................................................. 25

圖 20:Maya 的材質球 ..................................................................... 25

圖 21:骨架完成圖 ........................................................................... 26

圖 22:加上 Blinn 材質球的小方塊人 ............................................. 27

圖 23:打擊動作示意圖 ................................................................... 32

圖 24:投球動作示意圖 ................................................................... 33

圖 25:程式輔助介面 ....................................................................... 36

圖 26:程式場景畫面 ....................................................................... 38

圖 27:空手揮棒效果 ....................................................................... 40

圖 28:專題畫面成果 ................................................................ 附錄-5

圖 29:專題動作效果 ................................................................ 附錄-5

圖 30:專題道具效果 ................................................................ 附錄-5

圖 31:專題打擊動作辨識 ........................................................ 附錄-5

圖 32:資傳展示攤位 ................................................................ 附錄-6

圖 33:打擊動作示範 ................................................................ 附錄-7

圖 34:專題介紹照片 ................................................................ 附錄-7

圖 35:資訊展示攤位 ................................................................ 附錄-8

圖 36:使用者實際測試 ............................................................ 附錄-9

圖 37:資訊展獎項 .................................................................... 附錄-9

viii

圖 38:ICDC 現場展示 ............................................................ 附錄-10

圖 39:ICDC 展示與解說 ........................................................ 附錄-11

圖 40:ICDC 論文發表 ............................................................ 附錄-11

圖 41:ICDC 論文發表 Cover ................................................. 附錄-12

圖 42:ICDC 論文發表 Outline ............................................... 附錄-12

1

第一章 緒論

第一節 研究動機與目的

目前傳統的動作捕捉器[1]設備相當昂貴所以並不普遍,而最近微軟

Xbox360 的 Kinect[2]可利用紅外線裝置取得深度資訊,相較目前市面上

普及的 Webcam,將更能準確快速的分割前景與背景[3],加上深度值與

骨架的搭配,對於動作的辨識上將比以往的研究更加準確[4-6]。此外微

軟 Xbox360 的 Kinect 裝置是運用在遊戲上,所以售價上將會比相同效果

的硬體偵測裝置便宜,使研究動作捕捉技術夠容易發展,本研究利用簡

單的硬體設備讓做出的虛擬角色能和使用者表現出一樣動作的效果。

我們將利用運動的動作來呈現系統辨識的效果,在多種運動中具有

攻守位置與特定動作的棒球運動,是我們系統實作的運動辨識項目。棒

球這項運動的打擊與投球動作較為制式化,適合用來做動作辨識。

2

第二節 專案介紹

由本節來介紹我們專案進行的流程與呈現的方式,我們會使用棒球

攻守互動來呈現動作偵測與骨架變化的測試效果,透過運動比賽的方式

來達到動作捕捉的呈現,並由人體的動作來操作我們繪製的 3D 人物模

型,使用現行市面上相當普及的微軟 Xbox360 Kinect 來做動作捕捉的硬

體器材。我們的目的是使用簡單的操作環境與價位合理的硬體裝置來做

出動畫公司所使用的動作捕捉器(Motion Capture)的效果。

在我們的專題中會以棒球運動來呈現動作捕捉的效果,藉由打擊與

投球這兩項主要的姿勢來做辨識,針對人體的骨架變化來對應我們所設

計的 3D 人物模型關節點,由真人的動作來進行操作,我們程式執行的

流程主要為真人操控對鍵盤操控,分別是一位使用者透過 Kinect 來操控

打擊或是投球,而另一位使用者則是經由鍵盤進行操控。

使用者進入 Kinect 的偵測範圍後,我們可選取目前為打擊或是投球

狀態,再來另一位使用者則是利用鍵盤進行相對應操作。在打擊方面是

透過球進壘時右手揮動的時間點來決定是否打到球,其中有計算打擊率

(AVG)以及連續擊中次數(combo)來增加趣味性。投球則是右手揮動後,

球會飛向好球帶,其中球的進壘位置以及球速都是的。

3

在目前的動作捕捉技術上[1],利用到傳統動作捕捉器需感應全身的

感應點來做偵測,因此要做出這方面的動作呈現往往需要很大的空間與

昂貴的資金。所以我們是要以現在微軟 Xbox360 Kinect 來做動作捕捉的

設備,在精確度上達到可以完成大部分的動作辨識,使得動作捕捉技術

更容易入門與發展。

4

第二章 文獻探討

第一節 類似遊戲探討

目前的三大體感遊戲平台都有一些運動類型的遊戲,針對各家廠商

的體感裝置來設計不同的玩法,目的都在於要跳脫一般用把手或搖桿的

傳統遊戲裝置。從第一個推出的 Wii Remote[7]遊戲開始,市場上就掀起

了體感裝置的開發與競爭熱潮。雖然不同於傳統的按鍵把手,但需要一

個控制器卻是他的缺點之一。直到微軟推出的 Xbox360 Kinect 體感裝置

[8],才達到了真正身體控制的擬真體感裝置,Kinect 也是目前大家競相

研究的熱門裝置。

不過擬真性跟遊戲上的娛樂性還是有一些區別,雖說是體感遊戲,

也會依需求來簡化操作的方式,因此目前在棒球運動上的體感遊戲,大

多經過簡化才能兼具娛樂與體感的訴求。我們的專題則是使用 Kinect 做

出 Motion Capture[9]的效果,因此捕捉人體動作來呈現在棒球運動上。

主要是在真實性跟一般市面上的產品作區隔,以及我們要著重於動作辨

識[4-5]的準確性上。

5

第二節 硬體技術

Kinect 的運作技術[10]可以一次取得三種資訊,其中有一般 Webcam

的彩色影像、具有 3D 紅外線的深度資料、最後是聲音訊號。在 Kinect

機器上一共有三顆鏡頭,位於中間的是一般 Webcam 的 RGB 彩色鏡頭,

兩側分別是紅外線的發射器,以及紅外線 CMOS 攝影機的鏡頭,由這兩

個裝置來構成 3D 深度感應器。主要會由深度資訊來辨識動作,因此不

同於其他主機所用的手持式操作裝置。

彩色的 Webcam 鏡頭主要用來辨識使用者身份,使用人臉或是身材

特徵來做辨識。除此之外也可應用在擴增實境(Augmented Reality[11])

上的遊戲,同時 Xbox LIVE 有視訊通話的功能。並搭配底座的馬達可做

追蹤技術,隨著物體垂直轉動鏡頭位置,來尋找最適合的物體畫面。

在 Kinect 內建的陣列式麥克風系統,可以有多組麥克風同時收音,

因此能做到比對音訊去雜音的效果,達到降低環境噪音的功能。

6

圖 1:Kinect 裝置說明圖

資料來源:Microsoft Kinect 網站

圖 2:Kinect 取得資訊解說圖

資料來源:Prime Sense 網站

7

圖 3:Kinect 裝置架構圖

資料來源:Prime Sense 網站

第三節 深度

深度資訊取得的技術主要來自於紅外線的發射器與紅外線攝影機

的接收,由此來知道與物體的距離。微軟使用的 3D 偵測技術來自於與

一家以色列公司 Prime Sense 的合作。Prime Sense 提供了動作感測技術

以及感測晶片 PS1080,並使用 Light Coding 技術[10]。

Light Coding 技術的理論主要是運用連續光,在此是利用紅外線對

物體的空間距離進行測量編碼,經由感應器讀取距離光線編碼,並由晶

片進行解碼來計算生成一張具有深度資訊的圖像。在 Light Coding 技術

的關鍵技術是 Laser Speckle 雷射光散斑,當雷射在不同的材質表面上或

8

是穿透具有透明度的物體時,會形成隨機的反射斑點,而這些斑點就稱

之為散斑。因為散斑有著高度的隨機性,也因距離而呈現不同的圖案,

因此可由散斑在空間加上標記,只要物體在該空間中有移動變化,都可

以完整紀錄下位移的變化量。前述提到的對空間測量進行編碼,就是指

產生散斑的技術[10]。

Kinect 以人眼看不見的紅外線,透過位在鏡頭前的光柵(Diffuser),

將紅外線均勻分散於測量空間中,並由紅外線攝影機來紀錄下每個散

斑,由此原始資料透過晶片計算成具有 3D 深度的圖像資料。

圖 4:深度計算示意圖

資料來源:Prime Sense 網站

9

第四節 骨架

將前一節的深度資訊轉換成深度圖像,接著尋找圖像中較可能是人

體的移動物體並把圖像傳入辨別人體部位的機器學習系統中,由此可追

蹤到 20 個關節點並生成骨架追蹤系統。該系統最多可以同時偵測到 6

個人出現在測量空間中,另外可同時分辨出 2 個人的動作。而針對每個

人的特徵可紀錄下多組關節資料[10],內含身體軀幹、手腳四肢與手指

等追蹤範圍,由這些資料來做到全身體感操作。

Kinect 最佳的偵測距離約為 1.2 公尺到 3.6 公尺間,水平視野為 57

度,垂直視野為 43 度,若是超出最佳偵測範圍,Kinect 的底座馬達也可

驅動旋轉,來做自動追蹤系統校正。

圖 5:骨架辨識圖

資料來源:Prime Sense

10

圖 6:辨識骨架角度與關節點

資料來源:Ubisoft Your Shape 網站

第五節 運動辨識

我們實作的主題是運用骨架變化來做動作辨識,並針對使用者的姿

勢去加以矯正。而關於以上幾點,我們找了有關手勢辨識[12]、利用骨

架的動作自動辨識[4]、人體比對視覺系統[5]等等。

關於手勢辨識系統的那篇文獻把系統分為追蹤、輪廓分離和手勢辨

識三個模組, 而在骨架動作的自動辨識的文獻中,提到使用星狀骨架

來捕捉使用者的動作,上述研究所提到的內容對提升研究中動作辨識的

效能與即時性有一定的幫助。

而關於人體比對視覺系統相關的文獻中提及到利用將兩台攝影機

所得到的二維骨架模型利用正向動力學(Forward Kinematics)推算出三維

骨架的各關節點,而由於 Kinect 所捕捉到的畫面有深度值,再利用

11

OpenNI[13]與 Prime Sense[14]的 NITE 所抓取到二維骨架做出與上述文

獻中類似的效果,而在 OpenNI 的人體骨架的構成[15]基本上是由關節

(Joint),每個關節都有位置和方向兩種資料,且這兩者包含信賴度

(Confidence)這個值,而利用 Confidence 可以判斷出關節的可信度,再結

合 Kinect 本身有的深度值,就可以不需要處理兩台攝影機交叉比對的麻

煩問題。

第六節 繪圖呈現

我們使用 OpenCV 與 OpenGL 來呈現運動辨識的結果,與我們操作

3D 模型人物的方法,在 OpenCV 上主要是應用於繪製骨架的部分,骨

架是經過 Kinect 取得關節點後利用 OpenCV 中的 cvLine 函式來繪製。

OpenGL 則是圖像的輔助繪製以及記錄動作腳本,使用以上兩種程式環

境來處理我們專案呈現的效果。

12

第三章 Kinect 優勢分析

第一節 Kinect 與 Wii Remote 比較

Wii 所使用的是 Wii Remote,與 Kinect 類似攝影機的裝置不同,

Wii Remote 是以類似遙控器的感應棒形式來進行操作。Wii Remote 具有

體感操作的功能,能夠藉由感應棒的旋轉、移動以及上方的按鈕來進行

操作。而 Kinect 則是紅外線與影像來辨別人體的形狀、位置。

表 1:Kinect 與 Wii Remote 之比較表

攝影機 價錢 距離偵測 骨架辨識

Kinect IR Camera 高 紅外線 有

Wii Remote IR Camera 低 無 無

圖 7:Wii Remote 與 Kinect 的硬體圖

資料來源:台灣任天堂網站、Kinect–Xbox.com

13

第二節 Kinect 與 Wii 的軟體比較

Wii 的軟體可以透過感應棒來進行操作。拿棒球類的遊戲軟體來

說,透過轉動感應器上的旋轉鈕並同時揮動感應棒,可以控制打擊的形

式與力道,或是按下感應器上的按鈕並同時揮動或轉動感應棒,則可以

進行投球與控制球的類型。[17]

圖 8:Wii 遊戲軟體-大棒球聯盟 2 (The Bigs 2)

資料來源:2K Sport The Big2 網站

圖 9:Kinect Sports Season 2

資料來源:Xbox 360 網站

14

而我們可以利用 Kinect 來進行人體的偵測骨架、深度值,再依據骨

架變化的資訊來判斷投球與打擊。此外還可以依照手指的姿勢來進行手

勢的偵測,藉以達到球種的判斷,再依照手的深度值改變速率來當作球

速的判斷。

第三節 Kinect 與 PS3 週邊硬體的比較

PS3 所使用的是 PlayStation®Move[18],並搭配 PlayStation

®Eye 來進

行動作的辨識。與 Kinect 不同的是,除了透過 PlayStation®

Eye 來偵測使

用者三維空間位置外,還要透過使用者手上所拿的 PlayStation®Move 動

態感應器與巡覽控制器來辨識手部的動作、空間的深度。而 Kinect 則可

以在不用其他設備的支援下,去抓取使用者全身的形狀、骨架、深度、

動作以及其身處的三維空間位置。

表 2:Kinect 與 PlayStation3 週邊設備之比較表

攝影機 價錢 距離偵測 骨架辨識

Kinect 彩色與紅外線 高 紅外線 有

PS Eye

PS Move

彩色 低 影像中圓球的

大小決定距離

無 低 無

15

圖 10:PS3 硬體相關圖

資料來源:PlayStation 亞洲–Taiwan-網站

第四節 Kinect 與 PS3 的軟體比較

在軟體的操作方面,PS3 的 PlayStation®Move 及 Kinect 皆不需要通

過姿勢校正這一項動作即可在軟體的選單畫面 操作,然而

PlayStation®Move 雖然不需要姿勢的校正,仍需要對 PlayStation

®Eye 進

行校準。在遊戲的進行方面,PS3 能靠著單一的動態感應器或是搭配巡

覽控制器來達成擊球,射箭、持盾與劍的使用動作。

16

如果我們使用 Kinect 的話,可以在不需要雙手握有感應器與控制器

的情況下做出類似動作,與 PS3 比起來較有臨場感。

圖 11:PS3 用 PlayStation® Move 進行遊戲

資料來源:Move - GDC 2010: PlayStation Move Trailer

17

第四章 工具介紹

第一節 OpenGL/OpenCV

OpenGL 全名為 Open Graphics Library,為一個跨程式語言、跨平台

的函式庫,用於生成二維、三維圖像,常用於虛擬實境、遊戲等等程式

開發上面。

圖 12:OpenGL 圖形處理流程圖

資料來源:OpenGL – Wikipedia

OpenCV 全名為 Open Source Computer Vision Library,是由 Intel 公

司所授權發行,為 Open Source 的電腦視覺函式庫,可用於影像處理、

電腦視覺等等的處理。

另外在骨架繪製的部份我們也利用 OpenCV 中的 cvLine 函式來繪

製,原本 NITE 中的 Stick Figure 是使用 OpenGL 來繪製,程式碼較為繁

瑣,所以我們在此用 OpenNI 取得的 15 個關節點經由 cvLine 來畫出骨

架圖,以下程式執行的圖片。

18

圖 13:cvLine 骨架繪製圖

第二節 OpenNI/NITE

OpenNI 全名為 Open Natural Interaction,它定義了語音、手勢、身

體動作等等的自然操作,可讓使用者以較直覺的操作方式,而不需使用

其他裝置;目前支援的硬體有 3D Sensor、RGB Camera、IR Camera、Audio

Device 這四類,而 OpenNI 也可使用在 Kinect 上。

NITE 由 Prime Sense 提供給 OpenNI 的中介軟體,其功用為分析

Kinect 所抓到的資料轉換為骨架、手勢等資料。

圖 14:OpenNI 架構圖

資料來源:Heresy’s Space

19

我們利用 OpenNI 中的 Sample Read 來抓取深度值 (Depth

Generator),經由上述測試得知 Kinect 可判斷的範圍有 50CM~2.5M 左

右,而且畫面更新速度還算不錯,約 30FPS。圖片左上方會顯示圖片中

所有點的深度值,並以不同的顏色進行表示。右上方為一般 Webcam 所

能拍攝的影像畫面,由這兩張影像來顯示深度的對比。最下方有 Frame

顯示第幾張影格的深度是多少,以 30FPS 作更新。接著印出的數值會是

圖片中心點的深度值,深度數值單位約為 0.1 公分。以下是程式執行結

果:

圖 15:Sample Read 程式執行圖

20

我們利用 NITE 中的 Stick Figure 來做骨架抓取的動作,其流程為先

判斷有沒有使用者進入,如果有就新增使用者,在使用者確定後就要求

擺出校正姿勢來抓取關節點,在抓取關節點後就利用 GL 的函式來把關

節點做連線產生骨架圖,而在 Stick Figure 中抓出來的骨架是 2D 的。在

出現骨架圖後我們可以搭配OpenNI中的深度值(Depth Generator)來做手

勢的控制項目,包括 Wave(揮手)、Click(點,手往前)、Raise Hand(舉手)、

Moving Hand(移動手),經由這些手勢我們就可以選取項目及其他操控

了。以下是 Stick Figure 的圖。

圖 16:Stick Figure 程式執行結果圖

資料來源:Heresy’s Space

21

第三節 Kinect SDK

Kinect for Windows SDK 是微軟提供給非商業開發者使用的,開發

上使用 Microsoft Visual C# 2010,Kinect SDK 也有內建的部分技術及說

明文件來輔助開發。Kinect SDK 包含深度感應器(Depth Sensor)、彩色攝

影機感應器(Color Camera Sensor)、骨骼追蹤(Skeletal Tracking)以及語音

辨識(Speech Recognition)。

利用深度感應器得到的 Depth Map 來判斷前景及背景,透過深度值

資訊可以尋找圖像中可能是人體的移動物體,並傳入辨別人體部位的機

器學習系統中判斷是否為人體,因此可以辨別出玩家的位置。玩家編號

會儲存起來並給予顏色,如果當有另一位玩家進入時就會判斷為不同玩

家給予不同的顏色且記錄新的玩家編號。[19]

22

圖 17:分辨不同的玩家影像

在 NUI 的骨架 API 中提供最多兩位玩家的骨架位置與方向資訊,在

程式中會取得骨架座標的集合,其中每一個關節都有一個對應狀態,分

別是 Tracked、PositionOnly、NotTracked 三種狀態。而 Tracked 表示被

追蹤到了,PositionOnly 表示被遮蔽難以辨識,NotTracked 表示沒有被

追蹤到。得到上述資訊後就可以藉此來主動追蹤玩家骨架並繪製。

23

圖 18:追蹤玩家骨架與繪圖

關於語音辨識方面,目前 Kinect SDK 支援英文的語音操控,使用者

也能夠自行錄製音效及撥放,而在聲音處理能力上也有使用噪音抑制及

雜音消除來確定當前的聲音來源。

第四節 Kinect SDK 與 OpenNI

在我們使用過Kinect SDK以及OpenNI後發現到,在安裝方面Kinect

SDK 相較於 OpenNI 的多個安裝檔及繁瑣的安裝過程更為方便快速。

而在我們安裝完成後進行骨架擷取時又發現到 Kinect SDK 有利用

到人體追蹤演算法(human tracking algorithms),所以不需要像 OpenNI 一

樣擺出「Psi (Ψ)」的姿勢,非常的直接方便。

另外在技術方面,Kinect SDK 除了有提供較多的範例程式與應用外

還有提供詳細的說明文件來讓開發者能夠更有效的編寫程式。

24

最後是聲音方面,Kinect SDK 支援英文語系的聲控,而且使用了噪

音抑制及迴聲消除來提升聲音接收的品質,此外開發者除了可以使用原

先內建的聲控指令外也可以自行錄製。

表 3:Kinect SDK 與 OpenNI 優缺點比較表

Microsoft Kinect SDK PrimeSense OpenNI

優點 1. 支援聲控

2. 不需校正姿勢

3. 單一安裝套件

1. 可計算關節旋轉

2. 可商業使用

3. 可在 XP 與 Vista 中使用

缺點 1. 無關節旋轉計算

2. 限制非商業使用

3. 限 Win7 配 VC2010 使用

1. 不支援聲控

2. 需要校正姿勢

3. 多個安裝套件

第五節 Autodesk Maya

Autodesk Maya 為一款可以製作 3D 模組的軟體,除了一般的建立模

組之外,還擁有製作 3D 動畫、模型物體的紋理與貼圖、骨架的設置、

特效(例如:光線、火光、玻璃的反射)、力場(如重力、物體的碰撞)之類

的功能。我們運用它來建立所需要的人物模組、場景以及相關的特效。

25

圖 19:Maya 製作的骨架

圖 20:Maya 的材質球

26

我們用 Autodesk Maya 來製作一個簡單的小方塊人,並為他加上骨

架。首先將畫面換成 Front View,之後在 Animation 中選擇 Skeleton→

Joint Tool 即可繪製骨架。在繪製的過程中,可使用 Mirror Joint 來在對

稱的位置上進行骨架的複製。最後,當骨架完成後,選取骨架與小方塊

人,再選擇 Skin → Bind Skin → Smooth Bind 將骨架與人物綁住,之

後就完成了骨架的設置。

圖 21:骨架完成圖

幫小方塊人上色。開啟面板左側的材質球庫,先新增一個材質球

後,再去選取想要上材質的部分,然後再對材質球按住右鍵,選擇 Assign

Material To Selection,之後再去調整該材質球的顏色,即可完成。

27

圖 22:加上 Blinn 材質球的小方塊人

第六節 Motion Capture 與 Kinect

動作捕捉器(Motion Capture)[9]是利用許多攝影機去抓取反光點來

拍攝建製的,前期作業非常繁瑣(攝影機架置、T 棒校正,T POSE 錄製

與校正、設定骨架、伸展動作的修正)需要耗費非常多的時間,然後經由

攝影機讀取到的資訊回傳給電腦放到 3D 空間中。

在Kinect的部份是利用紅外線的發接收裝置及一台彩色攝影機來抓

取人物,前期需安裝相關軟體(OpenNI、NITE、Prime Sense),安裝完畢

後只需要開啟程式並擺出校正姿勢及可抓取骨架。

28

表 4:Motion Capture 與 Kinect 之比較表

Motion Capture Kinect

價錢 價格約百萬到千萬台幣 價格約五千台幣

設置 需要大空間 使用空間較小

方便性 需要許多事前準備 只需安裝些許軟體

成果細節程度 較為精細準確 較為粗糙

第五章 實作方法

第一節 透過三維資訊偵測骨架變化並操控模型

在 NITE 的 Stick Figure 中可以找到使用者的二維座標點,再加上

OpenNI 所提供的深度值就可以產生整體的三維座標。其做法為先在我

們所改寫的 Stick Figure 中加上 OpenNI 所抓到的深度值設定為 Z 軸資訊

並加上原有的二維座標資訊,再來把座標由影像的座標系統轉換到 3D

座標上,主要是用 DepthGenerator 的 ConvertProjectiveToRealWorld()這

個函式;而它的使用方法只要告訴他要轉換的點的數量(uPointNum)、把

要轉換的點用陣列的形式傳(const XnPoint3D*)進去,並給他一塊已經

分配好的 XnPoint3D 陣列(p3DPointSet)就可以進行轉換了。最後是把深

29

度為 0 的點給去掉(因為那些點是代表 Kinect 沒有辦法判定深度的部份)

並和顏色的資訊一起轉換後儲存起來。

經由上述的方式可以得到每個關節點的三維座標,我們利用

OpenCV 的 cvLine 把有關連性的關節點連在一起後即可得到使用者的骨

架圖,其中在關節的部份裡分別有位置(Position)和方向(Orientation)兩種

資料。骨架的架構細節為先判斷是否有使用者進入,再來當 Pose

Detection 偵測到使用者擺出「Psi (Ψ)」這個姿勢後,他就會去呼叫自己

的 PoseDetected 這個 Callback Function、以進行下一階段的動作,Pose

Detected 會去做兩件事,一個是去呼叫自己的 Stop Pose Detection 來停止

繼續偵測使用者的動作、另一個則是去呼叫 xn::SkeletonCapability 的

RequestCalibration 函式,開始進行人體骨架的校正、分析。

OpenNI 有限制特定動作,校正姿勢是為了正確找到關節位置。若

部分遮蔽會有座標錯亂的情形。當骨架校正及辨識結束後會去呼叫

CalibrationEnd 這個 Callback Function。當 Calibration End 被呼叫的時候,

只代表骨架的校正、辨識的階段工作結束了,並不代表骨架辨識一定成

功的,也有可能是會失敗。成功的話,就是要進入下一個階段、呼叫

xn::SkeletonCapability 的 StartTracking 函式,讓系統開始去追蹤校正成

功的骨架資料;而如果失敗的話,則是要重新偵測校正姿勢,等到有偵

測到校正姿勢後,再進行一次骨架校正。而在骨架校正成功、並開始進

30

行追蹤骨架後,只要呼叫 xn::SkeletonCapability 用來讀取關節資料的函

式(例如 GetSkeletonJoint),就可以讀取到最新的關節相關資訊,並建立

整個人體的骨架資料了。

當骨架偵測完成後,我們可將先前 Kinect 抓到的骨架套用到利用

Maya 建立的模型上,經由 Kinect 來帶動整個模型的骨架動作。其過程

是經由 MayaOpenNIServer 這隻程式在 Maya 中產生一個骨架控制器,再

來我們只要把模型的骨架名稱更改到控制器中,這樣我們只要做動作就

可以讓 Maya 中的控制器依照 Kinect 讀取到的資訊進行動作。

第二節 利用 Kinect SDK 操控自創模型

我們利用微軟所提供的 Kinect SDK 在 XNA 上進行開發,其中使用

UseColor 來取得彩色影像、UseDepth 取得深度影像,然後可以經由

UseDepthAndPlayerIndex 取得骨架追蹤系統產生玩家編號的深度資訊,

再來透過 UseSkeletalTracking 使用骨架位置資訊。透過深度資訊,程式

可以追蹤使用者的動作以及標示出背景物件加以省略,其陣列是由左上

角開始先從左到右在從上到下,在取得深度資訊後會紀錄玩家及背景編

號,程式透過 Player Segmentation Data 來取得單一使用者的彩色影像及

深度資訊。

31

另外 Kinect SDK 是利用人體追蹤演算法來主動追蹤人體骨架,因

此不需要擺校正姿勢,我們在程式中會得到很多骨架關節位置的座標集

合,而骨架座標系統使用的是右手座標系統,目前最多可依照玩家編號

來追蹤兩個人的骨架資訊,其編號是獨一無二的,只有當玩家離開偵測

範圍改追蹤另一位玩家或是玩家離開偵測範圍後又回來才會改變編

號。在程式中就是利用 nui_SkeletonFrameReady 函式來取得骨架資訊,

再經過 GetDisplayPosition 將關節座標轉換為螢幕座標,然而我們在測試

中發現到關節會產生微小但高頻率的抖動或是大跳動,因此使用了

nui.SkeletonEngine 裡面的 TransformSmooth 及 SmoothParameters 透過

參數調整來使關節平滑化。還有 Kinect 中有一個三軸的重力感應器,透

過 SkeletonFrame.NormalToGravity 可取得重力法向量來做傾斜補償。

再來把在 Maya 中畫好的模型給予骨架後匯出 FBX 檔放到程式中,

先宣告 Skeleton.Joint 後透過 Model.Bones[Name].Index 來取得關節 ID 並

經由 animationPlayer.BoneTransforms 的方式來計算旋轉角度,另外再利

用 animationPlayer.GetSkinTransforms()使匯入的模型顯示在畫面中,場

景也是同樣的作法。經過以上過程我們就能利用 Kinect SDK 來讓身體操

控自己製作的模型。

32

第三節 打擊及投球動作辨識

在打擊方面會利用抓取骨架的方式來進行玩家肢體偵測與動作判

斷,這部分我們先使用 Prime Sense 提供的 OpenNI 的中介軟體,負責

分析 Kinect 抓到的資料,轉換為人體骨架來加強對骨架的偵測,再來

揮棒時會利用雙手交疊的中心作為放置球棒的位置(把球棒模型放在雙

手交疊的中心上),球棒會因為玩家手部位置移動而跟著改變,打擊時當

玩家並沒有將雙手交疊便無法打擊。在擊球後會依照打擊的方向及與球

棒的切面來做反彈動作。

圖 23:打擊動作示意圖

在投球方面我們有分以下幾種,第一種為判斷手勢[6](手指),利用

手指的姿勢來判斷球種[20],不過這需要非常快速及精確的判斷(手勢辨

識[21]及圖像辨識),再來利用手的深度值改變速率當作球速(或是採用隨

機產生的速度,如:90~160KM/H)。

33

第二種為判斷暗號(手勢),如同捕手比暗號給投手告知球路及球

種,在這邊玩家本身先比一種想投的球種及球路後再將球投出,以此折

衷第一種方式,在球速部分一樣是採用深度值的變化或是隨機產生球

速。

第三種為玩家可扮演捕手,讓畫面中的投手投出自己所比的球路與

球種,在球速方面則是採用隨機。

我們藉由 Kinect 的深度測試來找出手部位置,並由深度值判斷投球

的瞬間,當深度值有變化時表示目前正在進行投球,且由深度值達當最

小值時,表示投球點的位置。

圖 24:投球動作示意圖

34

第四節 系統分析運動姿勢

我們可以透過系統來分析運動姿勢是否正確,投球動作由關鍵的手

部移動路徑來辨識使用者的姿勢是否正確,由動作辨識來找出關鍵影

像,並由一連串的關鍵影像來辨識目前使用者的動作是否相同。由於使

用者身高體型等差異,我們會需要多個不同體型的標準關鍵影像來做比

對,其中藉由影像相似度最高的體型來當我們辨識的樣本。

打擊動作會需要全身的影像辨識,因此會比投球動作需要更大的影

像資料庫檔案,留下全身的關鍵影像來減少資料庫容量,在辨識的即時

度上將略遜於投球辨識。

動作偵測主要是硬體上傳回的資訊,我們藉由程式回傳可以清楚知

道全身 20 個 Joint 的三維座標。動作辨識上我們主題為擬真棒球,會有

棒球攻守互動的主要流程,並透過這些的 Joint 座標來辨識出目前是打擊

動作或是投球動作,透過座標範圍與移動速度來定義不同的動作與力

道。

35

第五節 繪製畫面呈現動作辨識的效果

我們可以利用 OpenGL 繪製畫面呈現動作辨識的效果,透過前述幾

項方法找出人體動作辨識,再使用 OpenGL 繪製畫面呈現辨識效果,會

呈現出三種模式,第一個使用者對電腦(Player vs. Computer)中,利用隨

機變數產生不同的電腦配球,加上各種判斷式,例如投球數與使用者打

擊表現來調整球速,由此來完成電腦投手的基本 AI 設定。在電腦扮演

打者時,根據使用者的投球動作來紀錄,例如慣用左手或是右手,由此

變化揮棒時機的掌握。並根據壘上有無跑者,使用不同的短打戰術,由

此完成推進的 AI 戰術。

使用者的呈現方式,在投球部分會依深度值的變化量來決定投球

點,我們依照深度最小值出現的時機,也就是手在最前端時當作投球

點。並依照骨架變化來比對我們準備的動作資料庫,姿勢將會影響球速

變化,藉此提升辨識的真實感。打擊部份是由前述第四節來辨識揮棒的

時機與虛擬球棒的範圍,透過 OpenGL 繪圖產生畫面中的虛擬球棒,讓

使用者能清楚知道握棒的方式。最後是透過靜態的手勢辨識來完成捕手

的暗號辨識,使用前述的輪廓辨識與 Threshold 辨識膚色來找出暗號的

手勢輪廓,經過資料庫來做影像比對並進行電腦投手的配球。

36

第六章 專題研究成果

第一節 程式輔助介面

圖 25:程式輔助介面

Kinect 硬體可以讀取畫面中的 3D-depth map 將資訊傳給軟體作處

理,軟體部分會將深度資訊轉換成深度圖像,接著尋找圖像中較可能是

人體的移動物體,來區分人體與背景物體,並把圖像傳入辨別人體部位

的機器學習系統中,由此可追蹤到 20 個關節點並生成骨架追蹤系統。

我們加入偵測輔助畫面在專題畫面右側,四種畫面輔助偵測效果,

同時可確認主畫面目前動作是否正常。由上至下分別是加入「灰階深度

辨識圖」、「同深度範圍彩色分佈圖」、「關節連線骨架圖」、「彩色

攝影機影像」。

37

「灰階深度辨識圖」原圖為灰階影像,灰階程度表示不同的深度

值,當辨識到人體輪廓時會顯示彩色範圍,如圖中顯示綠色人形。

「同深度範圍彩色分佈圖」包含固定四種顏色,每種顏色都代表不

同的深度距離,距離 900mm 以內為藍色、距離 900mm~2000mm 為綠色、

2000mm 以上為紅色、偵測到人體時為黃色。

「關節連線骨架圖」是由 Kinect 找到人體關節後,由各關節連線而

成的骨架圖。可用來確認硬體是否有正確讀到人體資訊,若有外界干擾

會讓骨架資訊被其他移動物體牽引,在我們的輔助圖中就會看到關節圖

扭曲,而在主畫面中會因為關節資訊錯誤而讓動作停止。

「彩色攝影機影像」有特別做一次鏡射,讓使用者舉起右手時,畫

面上也是右邊的手舉起來,方便使用者做即時的運動反應。

38

第二節 程式完整畫面

圖 26:程式場景畫面

音效方面使用 SoundEffect、SoundEffectInstance、Song 等方式,來

做出背景音樂與動作音效可同步發聲,彼此互不干擾。可以對背景音效

做重複不間斷的播放,與動作事件發生時的單次音效播放。

場景方面我們使用 Maya 繪製的球場模型套用在程式上的效果,在

XNA 中有限制單一 FBX 模型檔案最多為 65535 個面,程式最多可開啟

655350 個面數的模型檔。在使用多個打散的 FBX 檔案匯入時,會有前

後圖層顯示上的問題,我們使用 DepthBuffer 來呈現模型間重疊的遮蔽

效果,會根據各個檔案匯入順序來呈現彼此遮蔽的視角,因此會有更自

然的視野畫面。

39

第三節 程式功能介紹

打擊動作辨識:使用者呈現身體半蹲以及兩手握棒,當預備打擊出

現後,會在好球帶方框中呈現「打擊準心」,準心位置由兩手向上延伸

至球棒上方位置。

投球動作辨識:因為投手沒有固定的預備動作,所以假設兩手靠近

時為預備動作,用來模擬右手持球藏入手套的動作。當預備投球出現

後,在打者前呈現「好球帶方框」,直到投球動作完成,棒球運動軌跡

進壘之後,好球帶方框消失。

使用者介面設計:combo 為連續擊中球數,當超過 5 時就會有歡呼

聲;hit 為累積擊中球數;total 為總投球數;AVG 為打擊率,及計算方

式為 AVG = hit / total。

玩家雙打設計:玩家 A 以 Kinect 進行遊戲,玩家 B 以 Keyboard 進

行遊戲。可分成單純投打對決與正式比賽類型,在比賽模式中規劃每一

局。交換玩家 AB 的遊戲方式,最後第九局為上下半局交換遊戲方式。

使用 Kinect 進行遊戲的玩家,打擊時會站在我們規劃的本壘兩側。

位於打擊區進行遊戲,可選擇空手進行或是使用球棒造型氣球道具進

行,道具有無並不影響程式辨識效果,純粹增加遊戲趣味性。

40

加入偵測輔助畫面:四種畫面輔助偵測效果,同時可確認主畫面目

前動作是否正常。加入「同深度範圍彩色分佈圖」、「灰階深度辨識圖」、

「關節連線骨架圖」、「彩色攝影機影像」。

音效設計:我們準備一個可以持續播放的背景音樂,以及配合各種

不同動作效果的音效播放,當動作與遊戲進行到特殊條件時會有不同的

音效。

第四節 辨識數據分析

Kinect 優勢在於完全由人體操作,針對兩種操作方式進行辨識數據

分析。分成有無使用道具來增加遊戲性,並用不同大小與顏色的道具來

分析辨識效果。

圖 27:空手揮棒效果

41

表 5:辨識數據分析表

total 空手

小型道具 大型道具

淺色 深色 淺色 深色

50 hit 34 30 29 27 25

AVG 0.68 0.6 0.58 0.54 0.5

100 hit 67 59 53 53 51

AVG 0.67 0.59 0.53 0.53 0.51

150 hit 131 115 104 101 93

AVG 0.87 0.77 0.69 0.67 0.62

200 hit 173 155 141 137 119

AVG 0.87 0.78 0.7 0.69 0.62

在辨識數據分析表中,我們測試多組數據發現到辨識效果會隨樣本

數而增加。在表中 total 為總球數,hit 為成功擊出的球數,AVG 表示打

擊率,AVG 的計算方式為 AVG = hit / total。透過不同的 total 次數、打

擊方式以及道具差異來做效果分析。

由辨識數據分析表可以歸類以下幾點分析:

1. 遮蔽:空手的 AVG 優於道具,小型道具的 AVG 則優於大型道具

2. 顏色:淺色道具的 AVG 優於深色,對紅外線區分較佳

3. 學習:total 次數越多 AVG 越高

42

第七章 結論與未來展望

第一節 結論

由第三章比較 Kinect 與其他平台差異,因為 Kinect 有紅外線深度偵

測與骨架辨識的應用,在做運動辨識上具有相當高的可行性。我們目前

已經實作了深度偵測與骨架辨識,以及骨架偵測套用在 Maya 環境的操

作,透過這幾項技術來完成人體操作 Maya 模型的動作,接下來是辨識

棒球打擊與投球動作,來完成我們的擬真棒球-Kinect 體感辨識專題研

究。

使用棒球運動辨識有幾項優點,棒球的動作有一定的規則,尤其是

打擊與投球動作,針對這兩種動作,同樣具有全身性運動且不同於其他

球類運動需要有快速跑動的性質,可以藉此來做運動辨識。我們在擬真

性上會不同於現有的棒球模擬效果,使用全身性運動來做打擊與投球,

我們的擬真性強調在動作辨識上,畫面呈現的場景與人物則使用簡單明

亮的風格,由此來突顯擬真動作辨識的效果。

43

第二節 未來展望

我們研究的方向為動作辨識,並希望使用簡單普及的硬體設備,藉

此來降低使用門檻,可以用來做其他應用,例如安全防盜、居家看護、

醫療復健、交通意外等。如醫療復健系統。運用動作辨識來提醒患者做

出正確的復健動作,並使用簡單輕鬆的畫面來減輕持續做同一動作的厭

倦感,由此系統來幫助患者快速恢復健康。使用運動辨識的技術來達到

大眾醫療的進步,希望能將專題研究實作的成果對社會有所貢獻。

44

參考文獻

[1] Wikipedia. (2011, Feb 28). Motion capture - Wikipedia. Available:

http://en.wikipedia.org/wiki/Motion_capture

[2] Wikipedia. (2010, Feb 01). Kinect - Wikipedia. Available:

http://en.wikipedia.org/wiki/Kinect

[3] 洪濤. (2011, Feb 21). 微軟官方博客揭秘 Kinect 工作原理. Available:

http://tjgame.big5.enorth.com.cn/system/2011/01/08/005543571.shtml

[4] 陳宣勝, "使用星狀骨架作人類動作自動辨識," 碩士論文, 資訊科學

與工程研究所, 國立交通大學, 2009.

[5] 陳稔, "追蹤人體單純運動支多項機模式比對視覺系統," 行政院國

家科學委員會專題研究計畫, 資訊工程學系, 交通大學, 2004.

[6] 傅智銘. (2005, Feb 03). 技術報導-淺談手勢追蹤與辨識. Available:

http://www.csie.nuk.edu.tw/~tkyin/2009Spring/ImageProcessing2009S

pring/Slides/1/Hand.htm

[7] Wikipedia. (2011, Feb 27). Wii 遙控器 - Wikipedia. Available:

http://zh.wikipedia.org/wiki/Wii_Remote

[8] J. Shotton, et al., "Real-time human pose recognition in parts from

single depth images," in Computer Vision and Pattern Recognition

(CVPR), 2011 IEEE Conference on, 2011, pp. 1297-1304.

[9] T. B. Moeslund, A. Hilton, and V. Kruger, "A survey of advances in

vision-based human motion capture and analysis," Computer Vision and

Image Understanding, vol. 104, pp. 90-126, 2006.

[10] sugizo. (2010, Feb 14). 身體就是控制器,微軟 Kinect 是怎麼做到的? . Available:

http://www.techbang.com.tw/posts/2936-get-to-know-how-it-works-kin

ect

[11] Wikipedia. (2011, Feb 07). 擴增實境 - Wikipedia. Available:

http://zh.wikipedia.org/wiki/%E6%93%B4%E5%A2%9E%E5%AF%A

6%E5%A2%83

[12] 張國君, "基於電腦視覺的手勢辨識系統," 碩士論文, 電機工程學系,

國立清華大學, 2005.

[13] Wikipedia. (2011, Feb 07). OpenNI - Wikipedia. Available:

http://en.wikipedia.org/wiki/OpenNI

[14] Wikipedia. (2010, Feb 07). PrimeSense - Wikipedia. Available:

http://en.wikipedia.org/wiki/PrimeSense

[15] Heresy. (2011, Feb 01). 透過 OpenNI/NITE 分析人體骨架. Available:

http://kheresy.wordpress.com/2011/01/28/detecte_skeleton_via_openni

_part1/

45

[16] Wikipedia. (2011, Feb 24). YCbCr - Wikipedia. Available:

http://en.wikipedia.org/wiki/YCbCr

[17] david7979797. (2008, Mar 29). wii 職棒大聯盟玩法 . Available:

http://bbs.tvgame360.com.tw/read.php?tid-66825.html

[18] Playstation.com(Asia)Taiwan. (2010, Apr 03). 什 麼 是PlayStation® Move? Available: http://asia.playstation.com/move/tw/

[19] 曹祖聖 . (2011, Oct 04). Kinect 應用程式開發入門 . Available:

http://msdn.microsoft.com/zh-tw/hh367958

[20] 洛克馬. (2008, Feb 12). 棒球:投手(投球).捕手(手勢). Available:

http://tw.group.knowledge.yahoo.com/baseball-empire/listitem/view?iid

=78

[21] W. T. Freeman and M. Roth, "Orientation histograms for hand gesture

recognition,"Citesteer, 1995, pp. 296-301.

附錄-1

附錄一 實作關係示意圖

專案討論

Kinect

硬體測試Maya

模型測試

安裝驅動程式

執行範例程式

基本人物建模

骨架關節點

Kinect

軟體測試

紅外線深度偵測

骨架辨識

OpenCV

繪製骨架OpenNI

關節辨識

產生3D

骨架運動

建立專案模型

場景模型 人物模型道具模型

操作虛擬角色

辨識打擊動作

辨識投球動作

完成擬真棒球-Kinect體感辨識

附錄-2

附錄二 展示場地示意圖

我們規劃的場地佈置主要是要預留空間給 Kinect 作辨識之用,其中

為了減少其他觀眾走動造成誤判,會在使用者背後放置海報隔板來做區

隔,而使用者會站在圖中的綠色打擊區域來做動作辨識。畫面位置為背

牆,可做投影或螢幕擺放,在附錄四中將會有詳細的實際展示與照片說

明。

附錄-3

附錄三 工作分配

李宗樺 劉孝皇 劉健興 陳柏榮

專題文件 ● ● ● ●

3D 模型 ● ●

專案企劃 ● ●

OpenCV/GL ● ●

OpenNI/NITE ● ●

Kinect SDK ● ● ●

專案音效 ● ●

介面設計 ● ● ●

動作辨識 ● ●

展示規劃 ● ●

附錄-4

附錄四 實際展示記錄

實際展示

我們共有四次的公開展示,依序為 2011 年 10 月中旬的專研總審、

11 月中旬的資傳展、12 月初的資訊展以及 12 月底的 ICDC 數位內容學

術研討會。發表範圍從資傳系上同學、全資訊學院、全校師生、數位內

容領域研究學者,每次的展示都讓我們提升實作能力、視野更為寬廣。

專研總審

在 2011.10.15 時是我們第一次的公開展示,當時就已經可以讓使用

者操控 3D 模型,並有使用背景音樂與動作音效,不過模型還沒有顏色

且使用者介面的設計也較為簡單。如圖 28 中,在左圖為實際畫面,右

圖為程式畫面,可以看到程式畫面中的輔助視窗顯示實際的對應畫面。

圖 29 為使用者舉起腳時程式畫面中的 3D 模型也抬起腳。圖 30 為使用

者手拿道具依然可以操控程式中的 3D 模型。圖 31 中,左圖為實際上使

用者拿取道具進行打擊時,可以看見右圖中的 3D 模型也呈現一樣動作。

附錄-5

圖 28:專題畫面成果

圖 29:專題動作效果

圖 30:專題道具效果

圖 31:專題打擊動作辨識

附錄-6

資傳展

在 2011.11.16-11.17 時我們於 S 棟中庭公開展示,這時原先的 3D 模

型透過貼圖解決顏色問題,並增加投球效果。圖 32 中,螢幕畫面為總

審時的 Demo 影片。圖 33 為打擊動作示範以及螢幕畫面中可看見彩色人

物。圖 34 為介紹專題流程給系上評分老師以及實作方法與專題特色。

圖 32:資傳展示攤位

附錄-7

圖 33:打擊動作示範

圖 34:專題介紹照片

附錄-8

資訊展

在 2011.11.30-12.02 時我們佈置的主題式攤位,並有前兩次的專業

建議及市場賣點回饋,作為此次呈現的重點。透過資傳展經驗,可以知

道使用者對專題介面回饋的重要性,我們增加許多數據說明於畫面中,

並有連續擊中五球以上的歡呼音效來增加遊戲性。圖 35 為攤位佈置與

使用者實際測試。圖 36 為使用者與不同道具的實際打擊效果。圖 37 為

資訊展獲獎後的團隊合照。

圖 35:資訊展示攤位

附錄-9

圖 36:使用者實際測試

圖 37:資訊展獎項

附錄-10

2011 ICDC 數位內容學術研討會

在 2011.12.27-12.28 時我們專題的第一篇論文發表,在 2011 ICDC

數位內容學術研討會上台發表,並有來自數位內容領域的研究學者與業

者交流。圖 38 及圖 39 為論文發表會場外的小型展示與實作技術解說。

圖 40 為現場論文發表。

圖 38:ICDC 現場展示

附錄-11

圖 39:ICDC 展示與解說

圖 40:ICDC 論文發表

附錄-12

附錄五 發表論文

2011 ICDC 數位內容學術研討會。Track:數位遊戲與電腦動畫。

圖 41:ICDC 論文發表 Cover

圖 42:ICDC 論文發表 Outline

附錄-13

附錄六 組員心得

李宗樺

專研開始前我有參與小葉老師的程式集訓與比賽練習,覺得有一定

的程式能力,可以用在將來的畢業專題上。在經過兩年的訓練後就開始

要找專研組員,從兩年來的課程中,我會觀察班上同學在課堂上學習的

態度與責任心,包含出缺席、到班時間、上課座位與作業討論等方向,

藉由這幾點來看哪些同學是未來一年多可以一起完成所有挑戰的夥伴。

專研進行期間,我們一一克服了許多難關與挑戰,大家一起解決問

題與分工合作。除了專研的研究活動,還有國科會大專生計畫、微軟創

意盃、CGW 電腦圖學研討會、ICDC 數位內容學術研討會、PTC 國際大

專院校程式設計競賽、NCPC 全國軟體設計、ACM-ICPC 國際程式設計。

我們一起面對種種挑戰,也在其中學習團隊合作、認真負責的人格特質。

專研的尾聲也是收穫的開始,經過這段時間來的訓練與老師的指

導。將研究成果在各項展示中呈現,在系上進行專研總審,資傳展中介

紹給資訊學院的同學們,資訊學院的資訊展攤位向全校老師同學展示,

數位內容學術研討會中發表成果給與會的數位內容領域研究學者。一步

一腳印的成長,有這段難能可貴的研究經驗,非常感謝葉正聖老師給予

的指導,以及組員們的協助與鼓勵,讓我能有今天的成果與難忘的經驗。

附錄-14

劉孝皇

在開始進行專研之前有利用課餘時間加強自己的程式設計能力,其

中除了 C 跟 C++外也還有包括可能會在專研過程中用到的程式語言,例

如 OpenCV 以及 OpenGL,此外當時也對製作 3D 模型相當感興趣,而

且在專研中也需要用到 3D 模型,所以有尋找相關的書籍以及資料來輔

助練習 3D 模型的建置。而在加強程式設計能力時是所有組員一起練習

寫程式,之後不論是寫文件或是程式撰寫都是所有組員在一起討論,也

因為如此讓我們合作更為緊密。

在專研進行的過程中因為實際需求而使用了 C#以及 XNA 來撰寫主

程式,在這時候就很慶幸之前有好好練習程式能力,讓我在撰寫程式的

過程中能夠很快上手並且進行開發,也藉由這機會讓我又熟悉了另一種

程式語言。在撰寫專研文件時經由大家分工寫好各自負責的部份後合併

起來,然後大家一起逐字閱讀並修正其中有問題的地方,透過這個過程

讓我對其他組員所撰寫的部份更加熟悉了解。

在專研的尾聲中,雖然程式的功能或是文件的撰寫不是非常完善,

然而不論是程式設計或是團隊合作,透過專研使我們專業及溝通能力有

所提升,最後也感謝葉正聖老師對我的幫助。

附錄-15

劉健興

從大二下學期開始到大四專研結束的這段日子,我從中學到許多東

西,在專研開始前,我就對寫程式這方面抱著濃厚的興趣,同時也期許

可以藉著製作專研的這個機會,加以磨練自己的程式能力。而除了程式

方面的能力之外,也期許可以藉由與其他組員之間的配合,學習到與他

人分工合作的方法及其他組員的長處。

在參與專研的這段期間,不論在專研方向或者是程式方面,我們遇

到了許許多多的難題,為了解決這些困難,我學習到了對一件事情的多

方面思考並找出合適解決方法的能力,同時也藉著與組員們合力把問題

解決,理解到了分工的重要性,也藉著解決許多程式上的難題,在程式

碼的閱讀及撰寫上都有所成長。

在大四的現在,我們的專研之路即將結束,雖然最後的結果與一開

始的預期的成果還有一段差距,有許多的想法與未完成的內容並未在我

們最後的成品內呈現,但我從中所學習到的是在大學生活中的四年以

來,最珍貴且無可取代的能力,在這四人一組的專題研究中,我要感謝

其他組員們,與你們的合作的這段期間,讓我受益良多,最後我要感謝

一直指導我們的葉正聖老師,在專研的過程中所提供給我們的指導及教

誨。

附錄-16

陳柏榮

在專研前,因為上過了 Maya的課程,發覺自己對那方面比較在行,

也滿有興趣的,所以感覺自己應該能負責 3D 建模的部分。另外當時覺

得如果程式碼是用 C++的話,應該能幫忙看一點。對於 C#的程式碼,雖

然有嘗試著去看其他組員寫的程式碼,不過也只能看得懂基本的幾行程

式而已。

經過了一年多的專研,感覺自己學到了很多方面的東西。像是遇到

困難時,比以前更會有效的運用身邊的資源去查詢解決的方法,而為了

使自己做的東西能弄得更好,也漸漸的會運用其他的東西來輔助目前所

做的事物。在團隊合作方面,自己也有在慢慢的進步,也確實的了解到

了團隊合作的重要。

最後,對於自己的評價,覺得沒有到達當初預期的標準。在建模的

部分,雖然說想要的東西是有做出來,但跟當初預想的有點差距,總覺

得應該可以做的更好、更精緻一點,這樣或許能多吸引一些看的人的目

光吧。在程式方面,因為是用自己完全不熟的 C#來寫,感覺幫不上什麼

忙。如果說下次還有類似機會的話,希望可以做得比現在更好。