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 のセットアップ

広告

Kinect for Windows SDK のセットアップ

Kinect for Windows SDK のセットアップの方法や注意点について記述します。
開発環境と非開発環境では方法が異なります。
(追記: 当初は v1.7 向けに書いていましたが、v1.8 向けに修正しました。
v1.8 は、v1 系の最終版になると思われます。
v2 系については、Kinect for Windows v2 のセットアップに書きました。)

 

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

開発環境には、次の SDK をインストールします。Downloads/Docs からもアクセスできます。

最低限、Kinect for Windows SDK に含まれる Kinect for Windows Runtime がインストールされていないと、
Kinect for Windows を接続しても動作しません。
また、これらの新しいバージョンをインストールすると、以前のバージョンは削除されます。

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

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

  • KINECTSDK10_DIR=C:\Program Files\Microsoft SDKs\Kinect\v1.8\

が、Kinect for Windows Developer Toolkit をインストールすると

  • KINECT_TOOLKIT_DIR=C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.8.0\

が追加されます。

 

Kinect for Windows SDK に含まれているアセンブリは Microsoft.Kinect.dll と Microsoft.Speech.dll で、
これらは GAC に入ります。
Visual Studio の参照マネージャーでは [アセンブリ] – [拡張] から選択できます。

参照マネージャー

 

一方、Kinect for Windows Developer Toolkit に含まれているアセンブリは GAC に入りません。
したがって、Visual Studio の参照マネージャーでは右下の [参照…] から追加することになりますが、
前述の環境変数を利用して、プロジェクト ファイル (.csproj) において例えば次のようにアセンブリのパスを指定することもできます。


  <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="System" />
    <Reference Include="System.Data" />
    (以下略)


この状態でビルドすれば、Kinect for Windows Developer Toolkit の DLL はローカルにコピーされます。
(Microsoft.Kinect.dll は GAC にあるためコピーされません。)

 

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

本番用・配布用端末では SDK は不要で、Kinect for Windows Runtime v1.8 (約 100 MB) をインストールします。
これにより、Microsoft.Kinect.dll および Microsoft.Speech.dll が GAC に入ります。

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

%KINECTSDK10_DIR%Redist\KinectRuntime-v1.8-Setup.exe

 

■ Kinect for Xbox 360 の利用

Kinect for Xbox 360 と Kinect for Windows SDK の組合せは有効か、という点についてです。

この組合せは、開発環境 (Kinect for Windows SDK がインストールされた端末) で利用できます。
開発環境で利用できるといっても、Kinect for Xbox 360 に対する互換性がすべて保証されているわけではありません。

非開発環境 (Kinect Runtime のみがインストールされた端末) では利用できません。
KinectSensor.Status プロパティは通常は Connected ですが、非開発環境では DeviceNotSupported になります。

 

関連する記事

バージョン情報
Kinect for Windows, Kinect for Xbox 360
Kinect for Windows SDK 1.8
Visual Studio 2012

参照
Kinect for Windows (ハードウェア製品)
Kinect for Windows SDK v1.8
Kinect for Windows Developer Toolkit v1.8
Kinect for Windows Runtime v1.8

Downloads/Docs – Kinect for Windows Dev Center
Kinect for Windows SDK 1.8 (MSDN)
Setting Up a Kinect Sensor
Running a Kinect-enabled Application on a Non-Developer Machine
Running a Kinect-enabled Application on a Developer Machine

カテゴリー: 周辺機器. タグ: . 5 Comments »

Surface Pro で外部キーボードが英語配列として認識される

Microsoft の Sculpt Mobile Keyboard は、他の Windows 7 PC や iPad mini ではとくに問題なく使えていたのですが、
Surface Pro に接続してみると英語配列として認識されてしまいました。
例えば、@ キーを押すと [ が入力されます。

この問題については KB が出ていました: Windows 8 でキーボードが英語配列キーボードとして認識される

ここに記述されている「方法 1」を試してみました。

(1) デバイス マネージャーを起動して [キーボード] を展開し、
     該当する HID キーボード デバイスのプロパティを開きます ([場所] に「Bluetooth HID デバイス」と表示されているデバイス)。

(2) [ドライバーの更新] をクリックして、
     以降は KB に記述されている通り進んで [日本語 PS/2 キーボード (106/109 キー)] を選択して、ドライバーを更新します。

すると更新に失敗してしまったため、[ドライバーを元に戻す] をクリックして再起動したところ、
なぜか解決して日本語配列として入力できるようになりました。
「Bluetooth HID デバイス」と表示されていた部分が「キーボードポートに接続されています」に変わっています。

HID キーボード デバイスのプロパティ

 

バージョン情報
Surface Pro 128GB (日本版)
Windows 8 Pro

参照
Windows 8 でキーボードが英語配列キーボードとして認識される
コンピューターに USB キーボードを接続したときに Windows で正しいキーボード レイアウトが使用されないことがある
Microsoft Surface Pro
Microsoft Sculpt Mobile Keyboard
Surface Pro で開発環境のセットアップ

マイクロソフト Sculpt Mobile Keyboard
マイクロソフト Sculpt Mobile Keyboard