本文へスキップ

けいはんなジュニアロボットクラブは、子供たちに「モノづくり」の楽しみと「科学技術」への興味をもってもらう取り組みを行っています。

TEL. 070-5349-1100

〒619-0237 京都府相楽郡精華町光台8丁目

KINECT











【 KINECT 】Depth Camera からの画像ビット列を、のぞき見してみる。


  KINECT を操作するにあたり、まずは Depth Camera( 深度カメラ )から送られるデーターがどの様なものかを見てみましょう。
 とは言っても高速に数値がスクロールされるだけですが、これが元となり表示されるデーターを加工していくことになります。  

Visual Studio で、KINECT プロジェクトを作成


  プロジェクト作成のステップ
  • 新しいプロジェクトを作成する。
  • Microsoft.Kinect.dll を参照する。
  • 適切な Kinect 名前空間を宣言する。

プログラム


  Microsoft.Kinect 名前空間の宣言

   アプリケーションの Program.cs ファイルの先頭に、Microsoft.Kinect 名前空間の宣言を追加する。
  この名前空間は、NUI と オーディオ用のすべての Kinect 機能をカプセル化しています。
 using Microsoft.Kinect;

  ランタイムのインスタンス作成と初期化

  カメラのデーターを使用する場合は、さらに KinectSensor オブジェクトのインスタンスを作成、初期化した上で開始する必要があります。

  ここでは、深度カメラのビットストリームを表示するアプリケーションを作成しますが、KinectSensors 配列にカメラが1台しかない場合を想定しています。
  DepthFrameReady イベントのイベントハンドラを追加し、「Space」キーが押されるまでアプリケーションが終了せずに待機するループを作成します。
  最後に、アプリケーションを終了する直前に深度ストリームリーダーを無効にします。
  static void Main ( string[] args )
 {
   // センサーのインスタンスを作成する。
   KinectSensor sensor = KinectSensor.KinectSensors[0]


   //カメラを初期化する。
   sensor.DepthStream.Enable();
   sensor.DepthFrameReady += sensor_DepthFrameReady;

   // マトリックスのように表示する。
   Console.ForegroundColor = ConsoleColor.Green;

   // データストリームを開始する。
   sensor.Start();
   while ( Console.ReadKey().Key != ConsoleKey.Spaceber ){}


  深度カメラからのデータ読み取り関数

 static void sensor_DepthFrameReady ( object sender, DepthImageFrameReadyEventArgs e )
{
  using ( var depthFrame = e.OpenDepthImageFrame ( ) ) 
  {
    if ( depthFrame == null )  
     return;
    short[] bits = new short [ depthFrame.PixelDataLength ];
    depthFrame.CopyPixelDataTo ( bits );
    foreach ( var bit in bits )
     Console.Write ( bit );
  }

  今後の展開

  上記アプリケーションは、KINECTを使用する基本となります。
  上記から得られるデータ( DepthFrameReady イベントで渡されるデータ )を使って色々なサンプルを作成していきます。
  これ以外の有用なイベントがあります。

  • DepthFrameReady イベント( 今回使用のもの )
  • ColorFrameReady イベント
  • SkeletonFrameReady イベント

  ソース




  実行結果