[Kinect] 運用 Kinect for Windows SDK 開發 Kinect 應用程式做角度調整

在課堂中學習到使用 Visual Studio 2012 運用 Kinect for Windows SDK 來做 Kinect 角度的調整,對於這部分覺得很有趣,所以分享一下我的學習經驗。

前言

在課堂中學習到使用 Visual Studio 2012 運用 Kinect for Windows SDK 來做 Kinect 角度的調整,對於這部分覺得很有趣,所以分享一下我的學習經驗。

 

Kinect for Windows SDK 說明

要在 Visual Studio 2012 或 Visual Studio 2013 中操作 Kinect 必須透過 Kinect for Windows SDK ,下載網址:http://www.microsoft.com/en-us/kinectforwindowsdev/Downloads.aspx

Kinect for Windows SDK 讓您可以使用 C++、C# 或 Visual Basic 來開發 Kinect 應用程式,通過操作 Kinect 感測器和嵌入式裝置,建立體感、手勢、語音辨識或影像功能的 Kinect 應用程式。

安裝完 Kinect for Windows SDK 後就能開始使用 Visual Studio 來開發 Kinect 應用程式。

 

開發 Kinect 應用程式

請新增 WPF 應用程式,使用的是 Visual C#。

 

參考下圖,在畫面中增加 1 個 TextBox 名稱改為 txt,增加 3 個 Button 名稱分別改為(bup / bzero / bdonw);Content 屬性改為(往上 / 歸零 / 往下)。

image

image

 

完成後,會產上如下 XAML 程式碼:

 


    <Grid>
        <Button Content="往上" Height="23" HorizontalAlignment="Left" Margin="58,120,0,0" Name="bup" VerticalAlignment="Top" Width="75" />
        <Button Content="歸零" Height="23" HorizontalAlignment="Left" Margin="176,120,0,0" Name="bzero" VerticalAlignment="Top" Width="75" />
        <Button Content="往下" Height="23" HorizontalAlignment="Left" Margin="303,120,0,0" Name="bdown" VerticalAlignment="Top" Width="75" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="176,44,0,0" Name="txt" VerticalAlignment="Top" Width="120" />
    </Grid>

 

接下來要先載入Kinect for Windows SDK 元件,在方案總管視窗中,展開專案,在 參考 項目按滑鼠右鍵,選擇 加入參考

image

 

按下右下角的 瀏覽 鈕,然後到 C:\Program Files\Microsoft SDKs\Kinect\v1.7\Assemblies 開啟 Microsoft.Kinect.dll

SNAGHTMLb9a4a8

 

加入了 Microsoft.Kinect.dll 之後還要在程式碼上引用 using Microsoft.Kinect; 命名空間,此時才能夠使用 KinectSensor 類別。關於 KinectSensor 類別,可參考 MSDN 網址說明:http://msdn.microsoft.com/zh-tw/library/microsoft.kinect.kinectsensor.aspx

image

 

接著在 MainWindow() 建立一些事件,我們可以透過一個小技巧,輸入 Loaded+=、bup.Click+=、bzero.Click+=、bdonw.Click+=   再按 TAB 鍵 2 次快速產生事件。

 

   1:  public MainWindow()
   2:          {
   3:              InitializeComponent();
   4:              Loaded+=MainWindow_Loaded;
   5:              bup.Click +=bup_Click;
   6:              bzero.Click +=bzero_Click;
   7:              bdonw.Click += bdonw_Click;
   8:          }
   9:          //按 [往下] 鈕執行 
  10:          void bdonw_Click(object sender, RoutedEventArgs e)
  11:          {
  12:              
  13:          }
  14:           //按 [歸零] 鈕執行 
  15:          void bzero_Click(object sender, RoutedEventArgs e)
  16:          {
  17:              
  18:          }
  19:           //按 [往上] 鈕執行 
  20:          void bup_Click(object sender, RoutedEventArgs e)
  21:          {
  22:              
  23:          }
  24:           //視窗載入完成時執行
  25:          void MainWindow_Loaded(object sender, RoutedEventArgs e)
  26:          {
  27:              
  28:          }
 
 
在類別內建立一個 KinectSensor 類別的 s 物件,此物件可用來操作 Kinect。

 

   1:  KinectSensor s = KinectSensor.KinectSensors[0];
 
 
接下來在 MainWindow_Loaded 事件中輸入相關程式碼:

 

   1:   void MainWindow_Loaded(object sender, RoutedEventArgs e)
   2:          {
   3:              s.Start(); //啟動Kinect
   4:              s.ElevationAngle = 0;  //調整角度為0
   5:              txt.Text = "Angle :" + s.ElevationAngle;  //將角度顯示在TextBox裡面
   6:          }

 

再來是設定三個按鈕的事件處理函式,如下:

[往上] 鈕事件處理函式:

 

   1:   void bup_Click(object sender, RoutedEventArgs e)
   2:          {
   3:   
   4:              if (s.ElevationAngle + 5 > s.MaxElevationAngle)
   5:                  //如果目前角度+5大於最大角度的話
   6:              {
   7:                  s.ElevationAngle = s.MaxElevationAngle;
   8:                  //就讓角度等於最大角度
   9:              }
  10:              else
  11:                  //否則
  12:              {
  13:                  s.ElevationAngle += 5;
  14:                  //角度繼續+5
  15:              }
  16:              txt.Text = "Angle :" + s.ElevationAngle;
  17:              //顯示在TextBox中
  18:              System.Threading.Thread.Sleep(1000);
  19:              //每次執行角度改變時間為1秒
  20:   
  21:          }

 

[歸零] 鈕事件處理函式:

 

   1:   void bzero_Click(object sender, RoutedEventArgs e)
   2:          {
   3:              s.ElevationAngle = 0;
   4:              //角度規0
   5:              txt.Text = "Angle :" + s.ElevationAngle;
   6:              //顯示在TextBox中
   7:          }

 

[往下] 鈕事件處理函式:

 

   1:  void bdonw_Click(object sender, RoutedEventArgs e)
   2:          {
   3:              if (s.ElevationAngle - 5 < s.MinElevationAngle)
   4:                  //如果角度最小角度 大於 現在-5的角度的話
   5:              {
   6:                  s.ElevationAngle = s.MinElevationAngle;
   7:                  //就讓現在的角度等於最小的角度
   8:              }
   9:              else
  10:                  //否則
  11:              {
  12:                  s.ElevationAngle -= 5;
  13:                  //就繼續-5
  14:              }
  15:              txt.Text = "Angle :" + s.ElevationAngle;
  16:              //顯示目前角度在TextBox中
  17:              System.Threading.Thread.Sleep(1000);
  18:              //每次執行角度改變時間為1秒
  19:          }

 

最後我們嘗試執行應用程式,操作 Kinect 做角度調整,包含往上、往下和歸零等操作。

SNAGHTML107e62a

SNAGHTML108d79f

SNAGHTML109fac2

 

相關參考與引用

Kinect for Windows SDK 1.7 (March 2013)