Kinect for Windows v2 Developer Previewin development

 
date:2013.12.18   posted by:mizutani
 

Kinect for Windows v2 Developer Previewをゲットしました!新しくなったKinectでどういった事ができるのか、何が変更されたのかを中心に今回書いていきます!全体的には性能が良くなっておりすぐにでも仕事で使いたいという印象です!

[注意] Kinect for Windows v2 Developer PreviewのソフトウェアやハードウェアまたAPIは暫定的なためリリース時は変更される可能性があります。

 

1. RGBカメラについて

RGBカメラは解像度が上がり1920×1080pxの30fpsになったため綺麗に滑らかに見えます。1920×1080pxでアプリを作ることが多かったため解像度が上がったのは嬉しいです!

 

2. スケルトンについて

変更点としてはスケルトンは親指(ThumbLeft, ThumbRight)と指先(HandTipLeft, HandTipRight)と首(Neck)のスケルトンが追加され、認識人数も増え6人まで認識できるようになっています。またスケルトンの各部位の位置が微妙に変わっていてSDK1.7以降でいうSPINEの位置が上に位置していたり、股部分が水平になっていたりという変更があります。

手の親指、指先のスケルトンが増えたことにより「手を閉じている」「手を開いている」「何本か指を立ててる(ピースなど)」のハンドステータスがわかるようになっています。「手を閉じている」「手を開いている」はSDK1.7以降でもインタラクションライブラリを使えばできていましたが、それが結構面倒だったので簡単に取得できるのは嬉しいところです。

['13,12,26 追記] 現状ハンドステータスが取得できるのは2人のようです。

 

3. 深度カメラについて

深度カメラも性能も上がっており、顔の凹凸までわかるぐらいまで詳細にデータ取得ができます。これは画像を見てもらった方が早いですね。

 

4. IRについて

Kinect v2から赤外線カメラのようなこともできるようになっています。使い方としては暗闇でRGBカメラの代わりに使うとか?ですかね。

 

5. 人の切り抜きについて

人の切り抜きですが、SDK1.7ではドットが目立つフチ、SDK1.8ではぼやけたようなフチでしたが、SDK2.0ではかなり人にフィットした感じに切り抜きができています。また今まで髪の毛が所々欠けた感じになっていましたが下の画像のように綺麗に取得できています。

 

6. コードについて

最後に実際のC#コード(RGBカメラとスケルトンのデータ取得部分)を見ていきたいと思います。全体的にはSDK1.8と似たような書き方ではありますが、SDK2.0はSDK1.8からクラス名などの変更もあり書き方が変わっています。

■RGBカメラのデータ取得は以下のように書きます。

private void Reader_FrameArrived(object sender, ColorFrameArrivedEventArgs e) { ColorFrameReference frameReference = e.FrameReference; try { ColorFrame frame = frameReference.AcquireFrame(); if (frame != null) { using (frame) { FrameDescription frameDescription = frame.FrameDescription; if ((frameDescription.Width == bitmap.PixelWidth) && (frameDescription.Height == bitmap.PixelHeight)) { if (frame.RawColorImageFormat == ColorImageFormat.Bgra) { frame.CopyRawFrameDataToArray(pixels); } else { frame.CopyConvertedFrameDataToArray(pixels, ColorImageFormat.Bgra); } bitmap.WritePixels( new Int32Rect(0, 0, frameDescription.Width, frameDescription.Height), pixels, frameDescription.Width * bytesPerPixel, 0); rgbImage.Source = bitmap; } } } } catch (Exception) { } }

■スケルトンのデータ取得は以下のように書きます。

private void BodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e) { BodyFrameReference frameReference = e.FrameReference; try { BodyFrame frame = frameReference.AcquireFrame(); if (frame != null) { frame.GetAndRefreshBodyData(bodies); using (frame) { foreach (Body body in bodies) { if (body.IsTracked) { IReadOnlyDictionary joints = body.Joints; Dictionary jointPoints = new Dictionary(); foreach (JointType jointType in joints.Keys) { ColorSpacePoint colorSpacePoint = kinectSensor.CoordinateMapper.MapCameraPointToColorSpace(joints[jointType].Position); jointPoints[jointType] = new Point(colorSpacePoint.X, colorSpacePoint.Y); } Console.WriteLine("head point:" + jointPoints[JointType.Head]); } } } } } catch (Exception) { } }
 
Copyright © TheDesignium inc. powered by WordPress & mootools.
Relative Keyword|none