読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

Kinect SDK と Speech Platform 11 で日本語の音声認識をする

Kinect

Speech Platformの新しいバージョンである Version 11 とKinect SDKを組み合わせると、日本語の音声認識ができるようになるそうなのでやってみました。
参考にしたのは、こちらのサイトです

環境

前提として、Kinect SDKが動作する環境とします。

Speech Platform Version 11の環境を作成する

インストーラーのダウンロード
雑多な日記: KINECT SDK 日本語音声認識 SpeechPlatform11

あと、ついでにRuntime Languagesから、音声合成用の日本語パックもダウンロードしておきましょう。
「MSSpeech_TTS_ja-JP_Haruka.msi

インストール

ダウンロードしたものを順にインストールします。
SDK→Runtime→Runtime Languagesの順でいいと思います。

動作確認

動作確認には、Kinect SDKに付属のサンプルを使用します。
サンプルは「C:\Program Files\Microsoft SDKs\Kinect\v1.0 Beta2\Samples」にZIPファイルがあるので、デスクトップなどProgram Files以外の場所に解凍してください。解凍されたファイルは読み取り専用になっている場合があるので、外すようにしてください。
解凍すると「KinectSDKSamples」というフォルダができるので「Managed」にある「KinectSDKSamples(C#).sln」を開きます。いくつかプロジェクトがある中の「KinectAudioDemo」が、今回の確認用サンプルです。


Speech SDKの参照先を変更します。
「KinectAudioDemo」の参照設定から「参照の追加」を開き「参照」タブで下記DLLを選択します。


このプロジェクトの「MainWindow.xaml.cs」を開き、いくつかをSpeech Platform 11と日本語認識のために修正します。

GetKinectRecognizer

修正前

    string value;
    r.AdditionalInfo.TryGetValue("Kinect", out value);
    return "True".Equals( value, StringComparison.InvariantCultureIgnoreCase ) && "en-US".Equals( r.Culture.Name, StringComparison.InvariantCultureIgnoreCase );


修正後

    return "ja-JP".Equals( r.Culture.Name, StringComparison.InvariantCultureIgnoreCase );
InitializeSpeechRecognition

修正前

    var colors = new Choices();
    colors.Add( "red" );
    colors.Add( "green" );
    colors.Add( "blue" );


修正後

    var colors = new Choices();
    colors.Add( "red" );
    colors.Add( "green" );
    colors.Add( "blue" );
    colors.Add( "あか" );
    colors.Add( "ミドリ" );
    colors.Add( "青" );
InitializeSpeechRecognition

修正前

    switch ( e.Result.Text.ToUpperInvariant() ) {
    case "RED":
        brush = redBrush;
        break;
    case "GREEN":
        brush = greenBrush;
        break;
    case "BLUE":
        brush = blueBrush;
        break;
    default:
        brush = blackBrush;
        break;
    }


修正後

    switch ( e.Result.Text.ToUpperInvariant() ) {
    case "RED":
    case "あか":
        brush = redBrush;
        break;
    case "GREEN":
    case "ミドリ":
        brush = greenBrush;
        break;
    case "BLUE":
    case "青":
        brush = blueBrush;
        break;
    default:
        brush = blackBrush;
        break;
    }


これを実行して、「あか」「みどり」「あお」というと、帯の色が変わります。

まとめ

簡単に音声認識をさせることができました。
引き続き、Speech Platform の回りをいじってみることにします。