Top Banner
Kinect 2.0 Programming (1) Kinect01 FELab 2015/01/01 (2015/12/12 Rev.) 1
77

Kinect 2.0 Programming

Jul 16, 2015

Download

Technology

IngChyuan Wu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Kinect 2.0 Programming

Kinect 2.0 Programming (1)

Kinect01

FELab

2015/01/01 (2015/12/12 Rev.)

1

Page 2: Kinect 2.0 Programming

Kinect 2.0 程式從零開始

Color Basics-WPF 範例程式

Kinect01 目標、開發、執行

Kinect01 畫面規劃

Kinect01 實作

Kinect01 解說

2

Page 3: Kinect 2.0 Programming

3

Page 4: Kinect 2.0 Programming

4

Page 5: Kinect 2.0 Programming

5

Page 6: Kinect 2.0 Programming

6

Page 7: Kinect 2.0 Programming

7

Page 8: Kinect 2.0 Programming

8

Page 9: Kinect 2.0 Programming

9

Color Basics-WPF 範例程式

執行「Kinect for Windows SDK v2.0 \ SDK Browser

(Kinect for Windows) v2.0」→「Color Basics-WPF」

→「Run」

執行 Install則可將整個專案安裝於指定目錄,做為

自行開發程式的參考,或以此程式當樣本,修改為自

己想要的功能。

Page 10: Kinect 2.0 Programming

10

Page 11: Kinect 2.0 Programming

11

Page 12: Kinect 2.0 Programming

12

Kinect01 程式顯示 Kinect One 持續傳入的彩色影像

(1920x1080 @30fps),提供影像分色處理選項與影像

存檔功能,並顯示已存檔數目。

開發工具為Windows 10 加上 Visual Studio 2015 環境

之 C# + WPF + Kinect for Windows SDK 2.0

程式執行時需將 Kinect One 接上電腦之 USB 3.0 插

Kinect01 目標、開發、執行

Page 13: Kinect 2.0 Programming

13

建議將螢幕解析度調為 1920x1080或以上

Kinect01專案下載 (Kinect01.zip)

https://onedrive.live.com/redir?resid=AB6DA2015C8C4A60!2307&

authkey=!ABC9MN8j_jtzCfU&ithint=file%2czip

Page 14: Kinect 2.0 Programming

14

視窗大小為 1440x810

一個 Image控制項顯示 1280x720 @30fps 即時影像

四個 Button控制項分別做為影像分色處理的選項

(Red、Green、Blue、Color)

一個 Button控制項自動將畫面影像以 jpg 格式,存

檔於 Kinect01 專案之與 Kinect01.exe 相同檔案夾,檔

名預設為 color000001.jpg、、、color999999.jpg。

Kinect01 畫面規劃

Page 15: Kinect 2.0 Programming

15

一個 Label控制項顯示已儲存影像檔案數目

利用WriteableBitmap類別配置記憶體區塊,將記憶

體區塊的影像即時顯示在 Image控制項

每個 Kinect One 傳入的彩色影像 (Frame),存入指定

的記憶體區塊,經影像處理後,傳至 Image 控制項

呈現出來。

一個 KinectSensor類別的物件代表一台 Kinect One

(一台電腦只能接一台設備)

Page 16: Kinect 2.0 Programming

16

視窗大小為 1440x810 (Kinect01)

Image控制項顯示 1280x720圖像 (ColorImage)

Button控制項操控紅色影像 (Red)

Button控制項操控綠色影像 (Green)

Button控制項操控藍色影像 (Blue)

Button控制項操控回復彩色影像 (Color)

Button控制項操控影像存檔 (Save)

Label控制項顯示已存檔影像數目 (Count)

Page 17: Kinect 2.0 Programming

17

建立 Kinect01 方案

起動 Visual Studio Professional 2015

點選「檔案(F)」→「新增(N)」→「專案(P)…」→「Visual

C#」→「WPF 應用程式」

「名稱(N)」填入 Kinect01 (原來是WpfApplication1)

「位置(L)」利用瀏覽(B)… 選定目錄

點選「確定」

Kinect01 實作

Page 18: Kinect 2.0 Programming

18

填入專案名稱利用瀏覽選定目錄

選擇 Kinect01方案儲存位置為 D:\Win10\檔案夾

Page 19: Kinect 2.0 Programming

19

現在畫面如下,如果不是,請按「視窗(W) 」→「重設視窗配置(R) 」

Page 20: Kinect 2.0 Programming

20

專案名稱為 Kinect01

自動產生MainWindow.xaml和MainWindow.xaml.cs檔案

Page 21: Kinect 2.0 Programming

21

Title、Height、Width三個屬性都有預設的屬性值

MainWindow.xaml檔案控制

MainWindow 視窗的外觀

MainWindow 視窗配置設計區

Page 22: Kinect 2.0 Programming

22

專案名稱為 Kinect01,所以自動產生 namespace Kinect01

MainWindow.xaml.cs 檔案控制MainWindow

視窗的執行

Page 23: Kinect 2.0 Programming

23

加入Microsoft.Kinect組件使 SDK 可以被專案使用

在『參考』處按右鍵,點選『加入參考(R)』

點選「擴充功能」→挑選「Microsoft.Kinect 2.0.0.0」

→ CheckBox 處點一下使出現打勾

點選「確定」

Page 24: Kinect 2.0 Programming

24

在『參考』處按右鍵,點選『加入參考(R)…』

Page 25: Kinect 2.0 Programming

25

『擴充功能』之Microsoft.Kinect

2.0.0.0 打勾

Page 26: Kinect 2.0 Programming

26

專案多出這一項,表示Kinect SDK 2.0 可以使用了

Page 27: Kinect 2.0 Programming

27

在視窗設計區的MainWindow處點一下

叫出Window 的屬性視窗 (二種方式皆可)

Page 28: Kinect 2.0 Programming

28

在MainWindow.xaml 檔案內容的Window 處點一下

Page 29: Kinect 2.0 Programming

29

透過Window 的屬性視窗修改Window 的屬性值

顯示屬性(property)

顯示事件(event)

Page 30: Kinect 2.0 Programming

30

將Window 屬性修改為

名稱:Kinect01

FontSize:20

Height:810

ResizeMode:CanMinimize

Title:Kinect ColorFrame

Width:1440

程式執行時,視窗只可縮至最小,無法放大

Page 31: Kinect 2.0 Programming

31

將 Kinect01 視窗加入一個 Image控制項

滑鼠在工具箱的 Image點一下,然後在視窗設計區點一下

名稱:ColorImage

將 ColorImage屬性修改為

Height:720

Margin:70 0 0 0

Width:1280

Page 32: Kinect 2.0 Programming

32

將 Kinect01視窗加入四個 Button控制項

名稱:Red

將 Red屬性修改為

Background:單色筆刷 (R:255 G:0 B:0 A:100%)

Content:RED

FontSize:32

Height:45

Margin:70 725 0 0

Width:150

Page 33: Kinect 2.0 Programming

33

名稱:Green

將 Green屬性修改為

Background:單色筆刷 (R:0 G:255 B:0 A:100%)

Content:GREEN

FontSize:32

Height:45

Margin:250 725 0 0

Width:150

Page 34: Kinect 2.0 Programming

34

名稱:Blue

將 Blue屬性修改為

Background:單色筆刷 (R:0 G:0 B:255 A:100%)

Content:BLUE

FontSize:32

Height:45

Margin:430 725 0 0

Width:150

Page 35: Kinect 2.0 Programming

35

名稱:Color

將 Color屬性修改為

Background:漸層筆刷 (放射漸層 R:160 G:160 B:80

A:100%)

Content:COLOR

FontSize:32

Height:45

Margin:610 725 0 0

Width:150

Page 36: Kinect 2.0 Programming

36

將 Kinect01視窗加入一個 Button控制項

名稱:Save

將 Save屬性修改為

Background:單色筆刷 (R:180 G:100 B:220 A:100%)

Content:SAVE

FontSize:32

Height:45

Margin:860 725 0 0

Width:150

Page 37: Kinect 2.0 Programming

37

將 Kinect01視窗加入一個 Label控制項

名稱:Count

將 Count屬性修改為

Background:單色筆刷 (R:210 G:140 B:70 A:100%)

Content:存檔影像:000000

FontSize:32

Height:45

Margin:1040 725 0 0

Width:310

Page 38: Kinect 2.0 Programming

38

透過事件視窗建立Window 的事件處理方法(函式)

點擊 Kinect01 事件的Icon,切換至事件視窗

事件

Page 39: Kinect 2.0 Programming

39

滑鼠雙擊 Kinect01 事件視窗的 Loaded右邊空白欄位

此動作表示專案要處理Window 的 Loaded事件,Visual Studio 系統自動為我們指定 Loaded 事件的處理方法為 Kinect01_Loaded( ) 函式

雙擊之後系統自動產生

Page 40: Kinect 2.0 Programming

40

滑鼠雙擊 Kinect01 事件視窗的 Unloaded右邊空白欄位

此動作表示專案要處理Window 的 Unloaded事件,Visual Studio 系統自動為我們指定 Loaded 事件的處理方法為 Kinect01_Unloaded( ) 函式

雙擊之後系統自動產生

Page 41: Kinect 2.0 Programming

41

滑鼠雙擊 Red事件視窗的 Click右邊空白欄位

滑鼠雙擊 Green事件視窗的 Click右邊空白欄位

滑鼠雙擊 Blue事件視窗的 Click右邊空白欄位

滑鼠雙擊 Color事件視窗的 Click右邊空白欄位

滑鼠雙擊 Save事件視窗的 Click右邊空白欄位

Red的 Click事件處理函式為 Red_Click( )Green的 Click事件處理函式為 Green_Click( )

Blue的 Click事件處理函式為 Blue_Click( )Color的 Click事件處理函式為 Color_Click( )Save的 Click事件處理函式為 Save_Click( )

Page 42: Kinect 2.0 Programming

42

現在MainWindow.xaml 檔案如下

Page 43: Kinect 2.0 Programming

43

Page 44: Kinect 2.0 Programming

44

Page 45: Kinect 2.0 Programming

45

現在MainWindow.xaml.cs 檔案如下

Page 46: Kinect 2.0 Programming

46

視窗載入 (Loaded事件)

視窗關閉 (Unloaded事件)

Visual Studio 2015 自動幫我們產生。視窗Loaded和 Unloaded時要做的事情,就寫在此二方法(函式)內

Page 47: Kinect 2.0 Programming

47

Red被按了 (Click事件)

Green被按了 (Click事件)

Blue被按了 (Click事件)

Color被按了 (Click事件)

Page 48: Kinect 2.0 Programming

48

Save被按了 (Click事件)

Page 49: Kinect 2.0 Programming

49

建置 Kinect01 專案

「建置(B)」→「建置方案(B)」

執行 Kinect01 專案

「偵錯(D)」→「啟動但不偵錯(H)」

Page 50: Kinect 2.0 Programming

50

現在專案執行畫面如下

Page 51: Kinect 2.0 Programming

51

寫入程式碼至MainWindow.xaml.cs 檔案

Page 52: Kinect 2.0 Programming

52

Page 53: Kinect 2.0 Programming

53

+=之後接著按 Tab鍵

Page 54: Kinect 2.0 Programming

54

輸入 colorFrameReader.FrameArrived += 接著按 Tab鍵

自動產生 ColorFrameReader_FrameArrived函式

每一個 RGB 影格 (Frame) 傳入時,會觸發一次FrameArrived事件,希望程式對一個 RGB 影格做甚麼處理,就寫在ColorFrameReader_FrameArrived 函

式裏,每秒觸發 30 次。

Page 55: Kinect 2.0 Programming

55

Page 56: Kinect 2.0 Programming

56

Page 57: Kinect 2.0 Programming

57

Page 58: Kinect 2.0 Programming

58

Page 59: Kinect 2.0 Programming

59

Page 60: Kinect 2.0 Programming

60

Page 61: Kinect 2.0 Programming

61

建置 Kinect01 方案

「建置(B)」→「重建方案(R)」

執行 Kinect01 方案

「偵錯(D)」→「啟動但不偵錯(H)」

Page 62: Kinect 2.0 Programming

62

現在專案執行畫面如下 (Kinect 圖是鏡像)

Page 63: Kinect 2.0 Programming

63

color000001.jpg 檔案內容如下 (Kinect 圖是鏡像)

Page 64: Kinect 2.0 Programming

64

Kinect01.exe 是執行檔,寄給朋友就可分享。

Page 65: Kinect 2.0 Programming

65

Kinect RGB 影像串流相關類別

KinectSensor類別的物件代表一台 Kinect One,以

GetDefault( ) 方法連接Kinect One,以 Open( )方法啟動

Kinect One,以 Close( )方法停止 Kinect One

新的影格資料送達電腦時觸發 ColorFrameReader的

FrameArrived事件,可利用事件傳遞的參數

ColorFrameArrivedEventArgs 物件取得影格資料

(ColorFrame物件)

Kinect01 解說

Page 66: Kinect 2.0 Programming

66

KinectSensor 類別

https://msdn.microsoft.com/en-

us/library/windowspreview.kinect.kinectsensor.aspx?cs-save-

lang=1&cs-lang=csharp#code-snippet-1

KinectSensor類別的物件代表一台 Kinect One,以

GetDefault( ) 方法連接 Kinect One,以 Open( )方法啟動

Kinect One,以 Close( )方法停止 Kinect One

ColorFrameSource屬性取得彩色影像來源

Page 67: Kinect 2.0 Programming

67

ColorFrameReader 類別

https://msdn.microsoft.com/en-

us/library/windowspreview.kinect.colorframereader.aspx?cs-

save-lang=1&cs-lang=csharp#code-snippet-1

ColorFrameReader類別的物件操控彩色 (RGB)影像串流

FrameArrived事件被觸發當彩色影像送達時

Page 68: Kinect 2.0 Programming

68

ColorFrame 類別

https://msdn.microsoft.com/en-

us/library/windowspreview.kinect.colorframe.aspx

ColorFrame類別的物件儲存彩色 (RGB) 影像串流

CopyConvertedFrameDataToArray( ) 方法將原始彩色影像

依指定的格式轉換後,存入指定的陣列

Page 69: Kinect 2.0 Programming

69

FrameDescription 類別

https://msdn.microsoft.com/en-

us/library/windowspreview.kinect.framedescription.aspx

ColorFrameReader類別的物件描述彩色 (RGB)影像的性質

BytesPerPixel屬性描述每個 Pixel 有幾個 Byte

Height屬性描述影像高度的 Pixel 數

Width屬性描述影像寬度的 Pixel 數

Page 70: Kinect 2.0 Programming

70

ColorFrameArrivedEventArgs 類別

https://msdn.microsoft.com/en-

us/library/windowspreview.kinect.colorframearrivedeventar

gs.aspx

ColorFrameReader的 FrameArrived事件,傳遞的參數就是

ColorFrameArrivedEventArgs 類別的物件,含有影格資料

(ColorFrame物件)

FrameReference屬性取得彩色影像來源的參照

Page 71: Kinect 2.0 Programming

71

ColorImageFormat 列舉

https://msdn.microsoft.com/en-

us/library/windowspreview.kinect.colorimageformat.aspx

Bgra 成員:一個像素佔用 4 個 byte (blue、green、red 各 1

個 byte,最後 1 個 byte 未使用)

各成員所代表整數值如下頁所示:

Page 72: Kinect 2.0 Programming

72

Page 73: Kinect 2.0 Programming

73

.NET Framework WriteableBitmap 類別

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

tw/library/system.windows.media.imaging.writeablebitmap.a

spx

WriteableBitmap類別的物件存放 RGB 影格資料

WritePixels(Int32Rect, Array, Int32, Int32) 方法將 byte 陣列

的影像存入WriteableBitmap 物件

Page 74: Kinect 2.0 Programming

74

.NET Framework Int32Rect 結構

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

tw/library/system.windows.int32rect.aspx

Int32Rect 結構描述寬度、高度和整數矩形的位置

Height屬性取得或設定矩形的高度

Width屬性取得或設定矩形的寬度

Page 75: Kinect 2.0 Programming

75

.NET Framework 4.6 和 4.5 影像檔案儲存相關類別

1. File 類別

https://msdn.microsoft.com/zh-

tw/library/system.io.file(v=vs.110).aspx

2. FileStream 類別

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

tw/library/system.io.filestream.aspx

Page 76: Kinect 2.0 Programming

76

3. BitmapSource 類別

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

tw/library/system.windows.media.imaging.bitmapsource.as

px

4. JpegBitmapEncoder 類別

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

tw/library/system.windows.media.imaging.jpegbitmapenco

der.aspx

Page 77: Kinect 2.0 Programming

77

Visual Studio C# Kinect 程式設計參考資料

1. 劉超群,Kinect體感程式探索使用C#,2013,松崗,

ISBN:978-957-22-4115-8。

2. Programming Kinect for Windows v2: (02)

http://channel9.msdn.com/Series/Programming-Kinect-for-Windows-v2