Kinectを使った音声認識で家電を操作してみた

以前、普通のマイクとjuliusを使って音声認識させようとしていたけど、テレビや食洗機の騒音があると全く認識できませんでした。juliusを使いこなしていないとか、PC用マイク一つでは限界もあるかと思い、今回はKinect音声認識をさせてみました。せっかくのKinectなのに、ジェスチャーは一切使ってません。

作成した内容

人間の声で「テレビつけて」と言うとテレビの電源がONになり、「次のチャンネル」と言うとチャンネルが切り替わるといった感じで家電を操作

結果

Kinectに内蔵されたマイク・アレイとノイズ抑制に期待して音声認識システムを作ってみましたが、予想以上に実用的な音声認識システムが作れました。マイク・アレイすごい。マイクロソフトすごい。

  • テレビの内容や音量にもよるけど、少々テレビの音が鳴っていても認識できる
  • 少しぐらいの騒音であれば、大きめの声で話せば認識される
  • 騒音が大きいとさすがに認識できない

f:id:sanofi:20120814191251p:plain

構成

f:id:sanofi:20120814191248p:plain
Kinectを使った音声認識なのでKinect for Windows SDK 1.5.1、Microsoft Speech Platform SDK Version 11、Kinect Speech Language Packs(日本語)を使用しています。
音声認識の方法は実用性を重視してルールベースです。ルールの内容はSRGS(Speech Recognition Grammar Specification Version 1.0)という形式の文法ファイルに記載。

文法ファイル(KinectSpeechGrammar.xml)の抜粋

<grammar version="1.0" xml:lang="ja-JP" root="rootRule" tag-format="semantics/1.0-literals" xmlns="http://www.w3.org/2001/06/grammar">
  <rule id="rootRule">
    <one-of>
      <item>
        <tag>TV_ON</tag>
        <one-of>
          <item> テレビ つけて </item>
        </one-of>
      </item>
      <item>
        <tag>TV_OFF</tag>
        <one-of>
          <item> テレビ けして </item>
        </one-of>
      </item>
      <item>
        <tag>TV_CH_UP</tag>
        <one-of>
          <item> つぎの チャンネル </item>
        </one-of>
      </item>
    </one-of>
  </rule>
</grammar>

課題

Kinectを常時使用できる環境が作れていない

KinectはPCに接続して使用する必要があるので、PCの確保が必要
消費電力が気になるので実用的な範囲か確認

改善されたものの、まだどうしても誤認識してしまうことがある

認識に使う単語が短いと誤認識しやすい
「オン」と「オフ」など似たような単語は間違って認識することがある

文法ファイルは適当に作成したので、もう少し勉強して内容を見直す必要がありそう