連載:Kinect for Windows SDK(ベータ版)開発入門 第3回 Kinect for Windows SDKで録音/音源の位置特定/音声認識 k1ha4102011/10/04 |
![]() |
|
Page1
Page2
|
|
■サンプル・プログラム「Speech」
最後に、Speechをひもときながら、Kinect for Windows SDK(ベータ版)のAudioを用いた音声認識について、理解を深めていく。Speechは、Kinectのマイク・センサー・アレイを利用し、さらにMicrosoft Speech Platform※で音声認識するサンプル・プログラムである。サンプル・プログラムは、「C:\Users\Public\Documents\Microsoft Research KinectSDK Samples\Audio\Speech」にある。
※Microsoft Speech Platformは、かなり幅広い技術である。ここでは網羅的な技術詳細は解説しない。
|
|
| Speech(C#版)のフォルダ&ファイルの構成 |
このSpeech(C#版)の中では、下記の2つのファイルが重要である。
- Speech.sln:Visual Studio 2010のソリューション・ファイルである。このファイルを開くと、Speechプロジェクトの開発ができる。
- Program.cs:コンソール・プログラムであるSpeech本体である。
実際にソリューション・ファイルを開いてみる。
![]() |
| SpeechをVisual Studio 2010で開いた場合 |
●アセンブリの参照
まず、参照設定を確認してみる。RecordAudioと同様にMicrosoft.Research.Kinectアセンブリが追加されている。さらに音声認識に必要なMicrosoft.Speechアセンブリも追加されている。
なお、Microsoft.Speechアセンブリを利用するためには以下が必要である。もし導入がまだであれば、導入をお忘れなく。
- Microsoft Speech Platform ― Server Runtime, version 10.2(英語版)
- Microsoft Speech Platform ― Software Development Kit, version 10.2(英語版)
- Kinect for Windows Runtime Language Pack, version 0.9(英語版)
●サンプル・コードについて
今回のサンプル・プログラムは、以下のことを実現するコードを含んでいる。
- Kinectのオーディオ・ソースを利用する
- 認識エンジンの準備
- 認識の通知を受ける
○名前空間
名前空間は「Microsoft.Research.Kinect.Audio」である。Microsoft Speech Platformにおける認識の名前空間は「Microsoft.Speech.Recognition」であり、録音するために「Microsoft.Speech.AudioFormat」も使用している。
○Kinectのオーディオ・ソースを利用
RecordAudioと同様にKinectのオーディオ・ソースの準備を行い、KinectAudioSource.SystemModeプロパティの設定を行う。
|
|
| オーディオ・ソースを利用するコード例 |
この後、音声認識のために、Kinectのオートマティック・ゲイン・コントロールを無効にしている。この設定をするためには、Microsoft Media FoundationのMFPKEY_WMAAECMA_FEATR_AGCプロパティを「VARIANT_FALSE」にしなければならい。そのためには、MFPKEY_WMAAECMA_FEATURE_MODEプロパティを「VARIANT_TRUE」にしておく。
サンプル・プログラムでは、KinectAudioSource.FeatureModeプロパティとKinectAudioSource. AutomaticGainControlプロパティでその設定を行っている(Program.csファイルの43行目以降)。
○認識エンジンの準備
Microsoft Speech PlatformはWindows Desktop Speech Technologyを実現する機構である。この機構は「特定の語句」や「語」のパターン認識などを提供する。
パターン認識を実現するために、SpeechRecognitionEngineクラスのオブジェクトを生成し、そのオブジェクトに構文を読み込ませて認識する。構文を定義する方法は、GrammarBuilderクラスを使う例がある。このGrammarBuilderオブジェクトに、語の集合を示すChoicesクラスのオブジェクトを追加して、構文を構築する。この周辺の詳細は、System.Speech.Recognition名前空間などを参照されたい。
では、サンプル・プログラムについて見ていく。
まず、システムに導入されている音声認識エンジンの列挙を行い、SpeechRecognitionEngineオブジェクトを生成する。今回は「SR_MS_en-US_Kinect_10.0」に一致するエンジンを選択する。
|
|
| 音声認識エンジンを取得するコードの例(Program.csファイルの57行目以降) |
このSpeechRecognitionEngineクラスもまたDisposableであるため、不要となった際は、Disposeメソッドを呼び出さなければならない。
次に、構文を構築するためにGrammarBuilderオブジェクトとChoicesオブジェクトを準備する。ここでは“red”“green”“blue”の3単語からなる構文を構築する。
|
|
| 構文を構築するための準備をするコード例(Program.csファイルの59行目以降) |
構文が構築できたら、SpeechRecognitionEngineオブジェクトに読み込ませる(次のコードを参照)。
|
|
| SpeechRecognitionEngineオブジェクトに構文を読み込ませるコード例(Program.csファイルの71行目以降) |
最後に、オーディオ・ストリームを開き、認識エンジンにオーディオ・ストリームを渡し、音声認識機能を開始する。
|
|
| 音声認識機能を開始〜停止するコード例(Program.csファイルの78行目以降) |
音声認識を開始するSpeechRecognitionEngineオブジェクトのSetInputToAudioStreamメソッドは、オーディオ・ストリームとそのストリームの情報(=PCM形式、16KHz、16bit、1chデータであること)を渡さなければならない。
また、SpeechRecognitionEngineオブジェクトのRecognizeAsyncメソッドを用いて、認識を1度だけかまたは複数回継続かを指定できる。今回は、複数回継続を意味する「RecognizeMode.Multiple」を指定した。なお、複数回継続した場合には、RecognizeAsyncCancelメソッドまたはRecognizeAsyncStopメソッドを呼ぶまで継続する。
○音声認識の通知を受ける
SpeechRecognitionEngineオブジェクトは、信頼性の高い1つ以上の句を見つけたとき、SpeechRecognizedイベントを経由して通知を行う。またオーディオ・ストリームから一時的に音声を認識したときに、SpeechHypothesizedイベントを経由して通知を行い、もし音声を検出したが認識に失敗したときはSpeechRecognitionRejectedイベントを経由して通知が行われる。
実際には、以下のようにイベント・ハンドラを追加する。
|
|
| 音声認識関連の通知イベントに対してイベント・ハンドラを追加するコード例(Program.csファイルの74行目以降) |
また、各イベント・ハンドラは以下のように利用する。
|
|
| 音声認識関連の通知イベントに対する各イベント・ハンドラのコード例(Program.csファイルの74行目以降) |
●サンプル・プログラムのまとめ
このサンプル・プログラムは、Kinectのマイク・センサー・アレイを用いて音声認識していた。
- Microsoft.Research.Kinectアセンブリを追加
- 音声認識エンジンを使用するために、Microsoft.Speechアセンブリを追加
- 今回使用したKinect for Windows SDK(ベータ版)の名前空間は「Microsoft.Research.Kinect.Audio」である
- 音声認識エンジンを使用するために、Microsoft.Speech.Recognition名前空間を用いる
- Microsoft Media Foundationの設定を用い、Kinectのオートマティク・ゲイン・コントロールを無効にした
- Microsoft Speech PlatformのSpeechRecognitionEngineオブジェクトに認識したい単語を登録し、Kinectのオーディオ・ストリームを渡すことで、音声認識の利用をした
■まとめ
前回〜今回は、Kinect for Windows SDK(ベータ版)のサンプル・プログラムを通じてKinectをC#から利用する方法について見てきた。
サンプル・プログラムには、基本的なAPIの利用方法が記載されている。この詳細を把握することで、基本的なKinectを利用したアプリケーションの実現ができるのではないかと考える。![]()
| INDEX | ||
| [連載]Kinect for Windows SDK(ベータ版)開発入門 | ||
| 第3回 Kinect for Windows SDKで録音/音源の位置特定/音声認識 | ||
| 1.サンプル・プログラム「RecordAudio」 | ||
| 2.サンプル・プログラム「Speech」 | ||
| 「Kinect for Windows SDK(ベータ版)開発入門」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



