Surface Book で Kinect v2 が認識されない

ある時の Windows Update 以降、
Surface Book に Kinect v2 (Xbox One Kinect センサー) を USB で接続しても認識されなくなりました。

Kinect Sensor is not recognized on a Surface Book によると、
「Surface USB Hub Firmware Update driver」の変更が原因であるとしています。

また、この記事には回避策が載っています。以下ではその手順を実行した様子について書いていきます。
ただし、「問題調査中」とあり、これは一時的な措置のように見えます。

 

手順

[regedit] を実行してレジストリ エディターを起動します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36fc9e60-c465-11cf-8056-444553540000}

に移動します。

Kinect-v2-Firmware-1

[LowerFilters] をダブルクリックします。値の編集画面が現れます。
元の値は「SurfaceUsbHubFwUpdate」です。これを削除して空文字列にします。

Kinect-v2-Firmware-2

Kinect-v2-Firmware-3

[OK] をクリックすれば完了です。

Kinect-v2-Firmware-4

すぐに認識しない場合は、PC を再起動したり Kinect v2 の電源を入れ直せば認識されるはずです。

参照
Kinect Sensor is not recognized on a Surface Book

広告
カテゴリー: 周辺機器. タグ: , . Leave a Comment »

Kinect for Windows v1 の KinectInteraction

Kinect for Windows Developer Toolkit には、KinectInteraction という、
つまむ操作 (Grip) や押す操作 (Press) を判定するためのライブラリが含まれています。
今回は、KinectInteraction でこれらのジェスチャ認識を実装するための方法について説明します。
Kinect for Windows のバージョンは 1.8 とします。

Kinect for Windows Developer Toolkit に付属するサンプルの中にある「ControlsBasics-WPF」では、
Microsoft.Kinect.Toolkit.Controls プロジェクトの中で UI コントロールまで作り込まれていますが、
ここでは KinectInteraction を単独で利用してみます。

KinectInteraction を利用するには、次の DLL が必要になります。

  • Microsoft.Kinect.dll
  • Microsoft.Kinect.Toolkit.Interaction.dll
  • KinectInteraction180_32.dll (ネイティブ、32 ビット向け)
  • KinectInteraction180_64.dll (ネイティブ、64 ビット向け)

ちなみに、Microsoft.Kinect.Toolkit.dll は KinectInteraction とは直接には関係がないため不要です。

 

■ プロジェクトの作成と参照の追加

Visual Studio で、WPF アプリケーション プロジェクトを作成します。
既定では [プラットフォーム ターゲット] が Any CPU、[32 ビットの優先] がオンに設定されています。
この設定のままであれば、32 ビット用の DLL を利用します。

64 ビットで動作させたい場合は、
[プラットフォーム ターゲット] を x64 に設定するか、[32 ビットの優先] をオフに設定して、
64 ビット用の DLL を利用します。

.NET の DLL への参照は、[参照の追加] から 1 つずつ追加してもよいのですが、
なるべく環境変数を利用したいので、プロジェクト ファイル (.csproj) を直接編集します。
次のように、Kinect に関連する部分を ItemGroup に追加します。


<Reference Include="Microsoft.Kinect">
  <HintPath>$(KINECTSDK10_DIR)Assemblies\Microsoft.Kinect.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Kinect.Toolkit.Interaction">
  <HintPath>$(KINECT_TOOLKIT_DIR)Redist\Microsoft.Kinect.Toolkit.Interaction.dll</HintPath>
</Reference>


次に、ネイティブの DLL をビルド時にコピーさせるための設定です。
プロジェクト ファイルの下のほうに、次の ItemGroup を追加します。


<ItemGroup>
  <Content Include="$(KINECT_TOOLKIT_DIR)Redist\x86\KinectInteraction180_32.dll">
    <Link>KinectInteraction180_32.dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>


 

プロジェクトのプロパティ

 

■ 実装について

今回は、取得できるプロパティの値の一覧を表示するアプリケーションを実装します。
次のコードはその一部です (全体のソースコードは KinectInteraction (GitHub) にあります)。

InteractionStream のコンストラクターには、IInteractionClient オブジェクトを渡す必要があります。
IInteractionClient インターフェイスの実装については公式ドキュメントも存在しないようで、詳細は不明です。
ここでは、とくに何の処理もしない DummyClient クラスを用意しています。
(サンプルの「ControlsBasics-WPF」には、 IInteractionClient インターフェイスを実装した KinectAdapter クラスが存在します。)

InteractionStream クラスは、DepthImageStream と SkeletonStream を拡張したクラスとなっており、
AllFramesReady イベント ハンドラーでそれぞれのデータを InteractionStream に渡します。
すると、InteractionFrameReady イベントで UserInfo のコレクションを取得できます。
最大で 2 人まで同時に認識できるようです。

次の図は、アプリケーションを実行した結果です。

InteractionWpf

表示されているのは、主に InteractionHandPointer クラスのプロパティの値です。
IsInteractive が true となるには、それぞれの手が有効な範囲に入る必要があります。
有効な範囲とは、左手であれば左肩周辺、右手であれば右肩周辺です。
この領域の左上が (X, Y) = (0, 0)、右下が (X, Y) = (1, 1) となります。

IsTracked は有効な範囲に入っていなくても true になることがあります。
IsInteractive は、IsTracked かつ (X ,Y) が (0, 0) から (1, 1) までの四角形の範囲に入っている状態です。

座標を取得するためのプロパティとして、X, Y, PressExtent, RawX, RawY, RawZ があります。
X, Y と RawX, RawY はそれぞれ同じ値のようです。
PressExtent ≧ 1 のとき、IsPressed が true となります。
PressExtent は、下限値が 0 で、1 より大きい値にもなります。

有効な範囲が高い位置にあるため、少し下の位置で使えるようにしたいとは思うのですが、
とくに PressExtent と RawZ は、有効な範囲にないときの値はあまり信用できません。
このためか、IsInteractive でないときも IsPressed になることがあるため注意が必要です。
したがって、ジェスチャを判定するときは先に IsInteractive が true であることを確認しましょう。

 

作成したサンプル
KinectInteraction (GitHub)

バージョン情報
.NET Framework 4.5
Kinect for Windows SDK 1.8

参照
KinectInteraction
Microsoft.Kinect.Toolkit.Interaction Namespace

Kinect for Windows SDK のセットアップ

カテゴリー: 周辺機器. タグ: . Leave a Comment »

Kinect アプリで画面のフリーズを防ぐ

Kinect を利用したアプリを普通に実装してみると、
アプリの起動に時間がかかったり、途中でフリーズしたりすることがあると思います。
(Kinect SDK にあるサンプルでも発生します。)
今回は、その原因と回避方法について記述していきたいと思います。

ではまず、WPF アプリケーションを新しく作成し、Microsoft.Kinect.dll を参照に追加して、
MainWindow を次のように実装してみます。
おそらく、よく見られる実装だと思います。

MainWindow.xaml


<Window x:Class="KinectAsyncWpf.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow" Height="400" Width="600">
    <Grid>
        <TextBlock x:Name="PositionText" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36"/>
    </Grid>
</Window>

MainWindow.xaml.cs


public partial class MainWindow : Window
{
    KinectSensor sensor; 

    public MainWindow()
    {
        InitializeComponent();

        Loaded += MainWindow_Loaded;
        Closed += MainWindow_Closed;
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Thread.Sleep(2000); // 意図的な負荷。

        if (KinectSensor.KinectSensors.Count == 0) return;

        sensor = KinectSensor.KinectSensors[0];
        sensor.SkeletonStream.Enable();
        sensor.Start(); 

        sensor.SkeletonFrameReady += sensor_SkeletonFrameReady;
    }

    void MainWindow_Closed(object sender, EventArgs e)
    {
        if (sensor != null)
        {
            sensor.Stop();
        }
    }

    void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
    {
        Thread.Sleep(15); // 意図的な負荷。

        using (var frame = e.OpenSkeletonFrame())
        {
            if (frame == null)
            {
                ShowPosition("");
                return;
            }

            var skeletons = new Skeleton[frame.SkeletonArrayLength];
            frame.CopySkeletonDataTo(skeletons);

            var skeleton = skeletons.FirstOrDefault(s => s.TrackingState == SkeletonTrackingState.Tracked);
            if (skeleton == null)
            {
                ShowPosition("");
                return;
            }

            var p = skeleton.Position;
            ShowPosition(string.Format("({0:N3}, {1:N3}, {2:N3})", p.X, p.Y, p.Z));
        }
    }

    void ShowPosition(string text)
    {
        PositionText.Text = text;
    }
}


Kinect で人物をトラッキングして、その中心の座標を表示するだけのアプリです。
上記のコードでは、検証のために意図的に処理に時間がかかるようにしています。

このように実装して実行すると、次のような現象が見られると思います。

(1) アプリを起動した直後、ウィンドウは表示されるがしばらくフリーズする。
(2) 一見問題なく動作しているが、ウィンドウをマウスでドラッグすると不連続に動く (またはフリーズする)。

どちらも、UI スレッドに大きな負担をかけていることが原因です。
したがって、UI のパフォーマンスを下げる要因をなるべくバックグラウンド スレッドに移すことが望ましいです。
それぞれの詳細は次の通りです。

 

(1) Kinect の初期化処理

Kinect の初期化処理は、その内容によってはかなり時間がかかることがあります。
上記のコードでは Loaded イベントで実行しており、この場合、ウィンドウが表示された直後にフリーズします。
なお、MainWindow のコンストラクター内で実行する場合は、ウィンドウが表示されるまでに時間がかかってしまいます。

したがって、Kinect の初期化処理を表す

sensor.SkeletonStream.Enable();
sensor.Start();

の部分をバックグラウンドで実行するとよいでしょう。

(2) 各フレームのデータに対する処理

上記のコードでは、各フレーム発生時のコールバックである sensor_SkeletonFrameReady メソッドが
UI スレッドで実行されています。
したがって、ジェスチャを判定したり深度を解析したりするなど、処理に時間がかかってしまうと画面がフリーズします。

実は Kinect SDK では、SkeletonFrameReady などのイベントハンドラーを登録するときに
内部的に SynchronizationContext.Current を取得して保持しており、
イベントハンドラーを実行するときにこの同期コンテキストを使おうとします。

つまり、

sensor.SkeletonFrameReady += sensor_SkeletonFrameReady;

を UI スレッドで実行すれば sensor_SkeletonFrameReady メソッドは UI スレッドで実行され、
バックグラウンドで実行すればバックグラウンド (登録時とは別のスレッド。どのフレームでも同じスレッド ID) で実行されます。

 

以上を踏まえ、コードを次のように修正します。


public MainWindow()
{
    InitializeComponent();

    Loaded += (o, e) => Task.Run(() => MainWindow_Loaded(o, e));
    Closed += MainWindow_Closed;
}


void ShowPosition(string text)
{
    Dispatcher.InvokeAsync(() => PositionText.Text = text);
}

MainWindow_Loaded メソッド全体をバックグラウンドで実行させます。
これにより sensor_SkeletonFrameReady メソッドはバックグラウンドで呼び出されるようになるため、
UI 要素を操作するには、Dispatcher.InvokeAsync メソッドを呼び出して UI スレッドに戻して実行させます。
(Dispatcher.Invoke メソッドを使った場合、アプリ終了時に TaskCanceledException が発生したり、
sensor.Stop メソッドを呼び出すとデッドロックが発生したりします。)

以上で、UI スレッドへの負荷を軽減し、UI がフリーズしないアプリにすることができました。
(ちなみにこの場合、sensor_SkeletonFrameReady メソッドの処理にやたら時間がかかっても、
単にフレームレートが下がるだけでアプリは続行できます。)

ただし、今回は TextBlock の Text プロパティの値をコードから直接変更しましたが、
UI 要素への値の反映については、以前にデータ バインディングと非同期処理 (その 1) で書いた通り、
データ バインディングを使うほうがよいでしょう。

ちなみに Leap Motion の場合は、初期化でフリーズすることはなく、
各フレーム発生時のコールバックはつねにバックグラウンド スレッドで実行されます。

 

作成したサンプル
KinectAsyncWpf (GitHub)
KinectAsyncWpf2 (データ バインディングを利用) (GitHub)

バージョン情報
Kinect for Windows SDK 1.8

参照
Kinect for Windows SDK のセットアップ
データ バインディングと非同期処理 (その 1)

Kinect for Windows v2 のセットアップ

Kinect for Windows v2 のセットアップの方法や注意点について記述します。
開発環境と非開発環境では方法が異なります。
(v1 系については、以前に Kinect for Windows SDK のセットアップに書きました。)

 

■ 開発環境におけるセットアップ

開発環境には、Kinect for Windows SDK 2.0 (約 280 MB) をインストールします。

インストール後の接続確認をするには、「Developer Toolkit Browser」を利用するとよいでしょう。
これには多数のサンプルが含まれています。

環境変数については、Kinect for Windows SDK 2.0 をインストールすると

KINECTSDK20_DIR=C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\

が追加されます。

 

さて、アプリケーションを開発するには、Microsoft.Kinect.dll への参照が必要になります。
Visual Studio の参照マネージャーで、[アセンブリ] – [拡張] からこれを選択できます。

参照マネージャー

ただし、この方法では特定のバージョンに依存することになり、
例えば、今後バージョン 2.1 の SDK にアップグレードした場合、プロジェクトはビルドエラーになってしまいます。
そこで前述の環境変数を利用して、
プロジェクト ファイル (C# なら .csproj) において例えば次のようにアセンブリのパスを指定することもできます。


  <ItemGroup>
    <Reference Include="Microsoft.Kinect">
      <HintPath>$(KINECTSDK20_DIR)Assemblies\Microsoft.Kinect.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    (以下略)


この方法であれば、特定のバージョンに依存せずにビルドすることができます。

 

■ 非開発環境におけるセットアップ

本番用・配布用端末では SDK は不要で、Kinect for Windows Runtime 2.0 (約 90 MB) をインストールします。

なお、Kinect for Windows Runtime は Kinect for Windows SDK にも付属しており、次のパスに存在します。

%KINECTSDK20_DIR%Redist\KinectRuntime-v2.0_1409-Setup.exe

 

バージョン情報
Kinect for Windows v2
Kinect for Windows SDK 2.0
Visual Studio 2013

参照
Kinect for Windows v2 センサー
Kinect for Windows SDK 2.0
Kinect for Windows Runtime 2.0

Kinect for Windows SDK 2.0 (MSDN)
Getting Started (MSDN)
Kinect for Windows SDK のセットアップ (v1 用)

カテゴリー: 周辺機器. タグ: . 1 Comment »

Kinect で背景を除去するツール

Kinect for Windows (v1) を使用して、
カメラの画像から人物の部分を切り抜いて (背景を取り除いて) 表示するためのデスクトップ アプリ Portrait Clip を作成しました。
セットアップ方法、使用方法も Portrait Clip のページに記載してあります。

画像をマウスやタッチで直接ドラッグすれば移動させることができます。
また、画像を右クリックしてウィンドウの枠を表示させ、その枠をドラッグすれば画像を拡大・縮小できます。

オンライン セミナーなど、資料を全画面で表示しつつ人物も同時に表示したい場合に活用できると思います。

Portrait Clip

 

バージョン情報
.NET Framework 4.5
Kinect for Windows Runtime v1.8

参照
Portrait Clip (GitHub)

Kinect for Windows で表情認識

Kinect for Windows Developer Toolkit には、フェイス トラッキングおよび表情認識の機能が含まれています。
今回は、Kinect for Windows で表情認識を利用するための方法について説明します。

フェイス トラッキングを利用するには、以下の DLL が必要になります。

  • Microsoft.Kinect.dll
  • Microsoft.Kinect.Toolkit.FaceTracking.dll
  • FaceTrackData.dll (ネイティブ)
  • FaceTrackLib.dll (ネイティブ)

下の 3 つの DLL は、32 ビット版と 64 ビット版に分かれます。
ちなみに、Microsoft.Kinect.Toolkit.dll はフェイス トラッキングとは直接には関係がありません。

 

■ DLL の作成

さて、なぜか SDK には、ビルド済みの Microsoft.Kinect.Toolkit.FaceTracking.dll が含まれていません。
まずはこの DLL を自分で作成する必要があります。

Microsoft.Kinect.Toolkit.FaceTracking.dll のソースコードを入手するには、
Developer Toolkit Browser を起動し、「Face Tracking Basics-WPF」の [Install] をクリックします。
任意のフォルダーを指定すれば、そこにソースコードがコピーされます。

Developer Toolkit Browser

 

FaceTrackingBasics-WPF.sln を Visual Studio で開き、Release モードでビルドします。
必要となるプラットフォーム (x86, x64) ごとにビルドして DLL を作成します。
(ビルド済みの DLL を Samples-2014/Kinect SDK/v1.8/bin に置きました。)

 

■ プロジェクトの作成と参照の追加

Visual Studio で、任意のプロジェクトを作成します。
既定では [プラットフォーム ターゲット] が Any CPU、[32 ビットの優先] がオンに設定されています。
この設定のままフェイス トラッキングを利用するのであれば、32 ビット用の DLL を参照に追加します。

64 ビットで動作させたい場合は、
[プラットフォーム ターゲット] を x64 に設定するか、[32 ビットの優先] をオフに設定して、
64 ビット用の DLL を参照に追加します。

 

.NET の DLL への参照は、[参照の追加] から 1 つずつ追加してもよいのですが、
なるべく環境変数を利用したいので、プロジェクト ファイル (.csproj) を直接編集します。

次のように、Kinect に関連する部分を ItemGroup に追加します。
ここでは Microsoft.Kinect.Toolkit.dll も含めています。


  <ItemGroup>
    <Reference Include="Microsoft.Kinect">
      <HintPath>$(KINECTSDK10_DIR)Assemblies\Microsoft.Kinect.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Kinect.Toolkit">
      <HintPath>$(KINECT_TOOLKIT_DIR)Assemblies\Microsoft.Kinect.Toolkit.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Kinect.Toolkit.FaceTracking">
      <HintPath>…(DLL のパスを指定してください)…\Microsoft.Kinect.Toolkit.FaceTracking.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" /> 
    (以下略)


 

次に、ネイティブの DLL をビルド時にコピーさせるための設定です。
プロジェクト ファイルの下のほうに、次の ItemGroup を追加します。


  <ItemGroup>
    <Content Include="$(FTSDK_DIR)Redist\x86\FaceTrackData.dll">
      <Link>FaceTrackData.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="$(FTSDK_DIR)Redist\x86\FaceTrackLib.dll">
      <Link>FaceTrackLib.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>


64 ビットの場合は、次のパスを使用します。


  <ItemGroup>
    <Content Include="$(FTSDK_DIR)Redist\amd64\FaceTrackData.dll">
      <Link>FaceTrackData.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="$(FTSDK_DIR)Redist\amd64\FaceTrackLib.dll">
      <Link>FaceTrackLib.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>


 

[プラットフォーム ターゲット] を Any CPU に設定していると、ビルド時に次の警告が出ますが、
実際の動作時のプラットフォームが一致していれば正常に動作します。
とはいえ、[プラットフォーム ターゲット] を x86 または x64 に設定しておくのがよいでしょう。

警告

 

■ 実装について

全体的な実装の方法や顔の各点の 3D 座標を取得する方法については、
上記の「Face Tracking Basics-WPF」のソースコードが参考になります。

表情認識については、次のように、
FaceTrackFrame オブジェクトに対して GetAnimationUnitCoefficients メソッドを呼び出します。


var faceTrackFrame = faceTracker.Track(sensor.ColorStream.Format, colorImage, sensor.DepthStream.Format, depthImage, skeleton);
if (faceTrackFrame.TrackSuccessful)
{
    var animationUnits = faceTrackFrame.GetAnimationUnitCoefficients();
    // 口の開閉状態
    var jawLower = animationUnits[AnimationUnit.JawLower];
}


取得できる表情の種類は、Face Tracking の「Animation Units」の項に書かれています。
ここでは、JawLower (口の開閉状態) の値のみ取得しています。
この値は -1 ~ 1 の間の数値で、1 は開いた状態、0 は閉じた状態を表し、-1 ~ 0 の間の数値が返ってくることもあります。

なお、FaceTrackFrame クラスは IDisposable ですが、
現在のフレームでの処理が終了したからといって Dispose メソッドを呼び出してしまうと、
なぜか以降のフレームでの処理が正常に続かなくなります。

 

作成したサンプル
Samples-2014/KinectSample/FaceTrackingConsole (GitHub)

バージョン情報
Kinect for Windows SDK 1.8

参照
Face Tracking
Microsoft.Kinect.Toolkit.FaceTracking Component
Kinect for Windows SDK のセットアップ

やってみよう!Kinectアプリ開発 – FaceTracking(前編)
やってみよう!Kinectアプリ開発 – FaceTracking(後編)
KinectとC#でFace Trackerを動かす

カテゴリー: 周辺機器. タグ: . Leave a Comment »

Kinect for Windows の音声ライブラリ

Kinect for Windows SDK の Downloads/Docs の右側には、次の音声ライブラリへのリンクがあります。

これらは、

%ProgramFiles%\Microsoft SDKs\Speech

にインストールされます。

しかし、音声ライブラリは .NET Framework にも System.Speech 名前空間として存在します。

System.Speech 名前空間と Speech Platform SDK (Microsoft.Speech 名前空間) を比較すると、
API にほとんど相違点はありません。
Speech Platform SDK のほうでは、音声認識の文法で利用する SrgsNameValueTag クラスが internal になっているなど、
やや使いづらい点がありますが、多言語化したい場合には有効でしょう。

 

■ Kinect のマイクからの入力を音声認識に利用する

.NET では、音声入力と音声認識の概念は完全に分離されています。
音声データを Stream として抽象化して受け渡すことにより、
任意の音声入力方式と任意の音声認識エンジンを組み合わせて利用することができます。

OS の既定の音声入力デバイスを利用するには
SpeechRecognitionEngine.SetInputToDefaultAudioDevice メソッドを呼び出せばよいですが、
音声入力を表す Stream を明示的に指定するには SpeechRecognitionEngine.SetInputToAudioStream メソッドを呼び出します。

次のようなコードで、Kinect のマイクからの入力を .NET Framework の音声認識ライブラリで利用できます。
Speech Platform SDK の場合もまったく同じコードです。


// sensor は Microsoft.Kinect.KinectSensor オブジェクト。
// recognizer は System.Speech.Recognition.SpeechRecognitionEngine オブジェクト
// または Microsoft.Speech.Recognition.SpeechRecognitionEngine オブジェクト。

var stream = sensor.AudioSource.Start();
recognizer.SetInputToAudioStream(stream,
    new SpeechAudioFormatInfo(16000, AudioBitsPerSample.Sixteen, AudioChannel.Mono));
recognizer.RecognizeAsync(RecognizeMode.Multiple);


 

■ Speech Platform SDK への参照

Speech Platform SDK の Microsoft.Speech.dll は GAC に入りますが、
ランタイム バージョンが 2.0.50727 のみであるため、Visual Studio の参照マネージャーに現れないことがあります。
したがって、通常は SDK 内の Microsoft.Speech.dll のパスを直接指定すると思いますが、
次のようにプロジェクト ファイル (.csproj) を直接編集する方法もあります。


  <ItemGroup>
    <Reference Include="Microsoft.Kinect, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.Kinect.Toolkit, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>$(KINECT_TOOLKIT_DIR)Assemblies\Microsoft.Kinect.Toolkit.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Speech, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />


 

バージョン情報
.NET Framework 4.5

参照
System.Speech 名前空間
Speech (Kinect for Windows SDK)
Speech Technologies
Speech Application Programming Interface (Wikipedia)

Kinect for Windows SDK のセットアップ