Intel Perceptual Computing SDK(Senz 3D) を使ってWindows+Unityでお手軽日本語音声認識

概要

  • Unityのアプリを作っていて音声認識を含むデモをしたい。
  • インターネットが繋がらないかもしれないのでスタンドアロンで動作してほしい。
  • 簡単なのが良い

というような時に、Intel Perceptual Computing SDK  http://software.intel.com/en-us/vcsource/tools/perceptual-computing-sdk (今後はSenz3D SDKと呼ばれるかも?)と、適当なマイク を使うことで、音声認識を組み込めることを確認したので、手順を残します。
ジェスチャ認識用と言うイメージが強いこのSDKですが、音声認識用途でも、割と優秀。

f:id:izm_11:20140403223002p:plain

動作環境

設定

最小限のUnityプロジェクトを作る手順を示す。

1.Intel Perceptual Computing SDK をインストールして、Japanese Language Dataをインストールする。

2.C:\Program Files (x86)\Intel\PCSDK\framework\common\pxcupipeline 内のslnファイルをVisualStudioで開き、 f:id:izm_11:20140611235405p:plain pxcupipeline.cppの virtual void PXCAPI OnAlert(PXCVoiceRecognition::Alert *data)関数の中身を書き換えてWin32,Releaseモードでビルドする。 (@koukiwfさん @faifxさん情報ありがとうございます )

具体的には

default:
wcscpy_s<sizeof(m_data.dictation)/sizeof(pxcCHAR)>(m_data.dictation,L"!UNKNOWN");
この部分を
default:
//wcscpy_s<sizeof(m_data.dictation)/sizeof(pxcCHAR)>(m_data.dictation,L"!UNKNOWN");
break;
このように変更する(これをしないと、Senz3Dカメラ内蔵マイク以外でUnity上の音声認識が動かない)

f:id:izm_11:20140611235410p:plain

注意すべき点(2014.4.12追記)

Visual Studio 2012 Expressを使う場合はもうちょっと手順が増える

このpxcupipeline.dllのビルドを行う時、VisualStudio2012 expressでは他にも書き換える場所があるようなので、VisualStudio2012Expressで作業を行う人は詳細はじーすPさんのこの記事を参照願います。

http://zi-su.blogspot.jp/2014/04/unityperceptualsdk.html

Visual Studio 2013Proで作成する場合

Visual Studio 2013だとプロジェクト設定を変更しないと問題が起きるようです。推奨は2012Proですが

この手順で Visual Studio2013でも大丈夫のようです @kaorun55さんありがとうございます!

3.Unity上で新規プロジェクトを作成し、Assets/Pluginsフォルダ(無ければ作る)の中に
C:\Program Files (x86)\Intel\PCSDK\framework\Unity\hellounity\Assets\Plugins から pxcm-structures.cs
pxcupipeline.cs
をコピーする。
2で修正してビルドしたpxcupipeline.dll (C:\Program Files (x86)\Intel\PCSDK\framework\common\pxcupipeline\bin\Win32に出来ているはず) もコピーする。

4.Unity上で空のGameObjectを作成し、hellounityサンプルを参考にスクリプトを作成しアタッチする。 例: https://gist.github.com/neon-izm/9957478

動作確認

Unityエディタ上で開いているプロジェクトをそのまま実行し、マイクに向かって日本語を話して、認識が行われてDebug.Logに出力されていることを確認する。

f:id:izm_11:20140404012415p:plain

うまく動かない時に確認する事

  • 日本語パックを入れているか
  • 録音デバイスがカメラ内蔵マイクになっているか
  • C:\Program Files (x86)\Intel\PCSDK\bin\win32 内の voice_recognition.exe で日本語が認識されるか

このエントリで抜けていて、追試が必要だと思うこと

以下は必要に迫られていなかったので確認していない。(時間が出来たら追試します)