Microsoft Speech SDK で音声認識

VC6/一般的な文法を扱う音声認識

最終更新: 2015-04-02 (木) 10:36:09 (2007d)

概要

このページで説明するコード

認識結果を標準出力に出力するプログラムを作る

これから作るもの

これからマイクからの入力を音声認識し、認識結果テキストを標準出力に出力するプログラムを製作する。 MSSDK による音声認識には、 あらかじめ用意された文法を用いて行う音声認識と独自に文法を指定して行う音声認識とがあるが、 ここでは、あらかじめ用意された文法を用いた一般的な音声認識を行うサンプルを示す。

大まかな流れとしては、 一般的な文法を用いた音声認識を行うクラスとして Dictator クラスを継承した GeneralDictator クラスを製作し、 main 関数でそれを起動するようにする。

GeneralDictator クラスを作る

GeneralDictator クラスは認識結果を標準出力に出力する。 GeneralDictator クラスの recognized メソッドの実装として、 fileGeneralDictator.cpp の一部を以下に示す。

HRESULT GeneralDictator::recognized(CSpEvent& event) {
  USES_CONVERSION;

  HRESULT result;

  // テキストを取得する
  CSpDynamicString text;
  if(FAILED(result=event.RecoResult()->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &text, NULL))) {
    return result;
  }

  cout << "認識結果:" << W2T(text) << endl;

  return S_OK;
}

recognized メソッドは、音声認識結果が出たときに呼び出されるメソッドなので、 こうすることで音声認識結果がテキストとして標準出力に出力される。 さらに一般的な文法を指定している GeneralDictator クラスの initializeGrammar メソッドの実装として、 fileGeneralDictator.cpp の一部を以下に示す。

HRESULT GeneralDictator::initializeGrammar(const CComPtr<ISpRecoGrammar>& grammar) {
  HRESULT result;

  // 文法を読み込む
  if(FAILED(result=grammar->LoadDictation(NULL, SPLO_STATIC))) {
    return result;
  }

  // 文法を動作させる
  if(FAILED(result=grammar->SetDictationState(SPRS_ACTIVE))) {
    return false;
  }

  return S_OK;
}

LoadDictation および SetDictationState メソッドを呼び出すことで、 あらかじめ用意された文法を用いることを指定している。

main 関数を作る

さて GeneralDictator クラスを作り終えたら、main 関数で実際に音声認識を行うプログラムを書こう。 filemain.cpp の一部を以下に示す。

int main() {
  // COMを初期化する
  if(FAILED(CoInitialize(NULL))) {
    return 1;
  }
  atexit((void(*)(void))CoUninitialize);

  // ディクテータを構築する
  GeneralDictator dictator;
  if(!dictator.initialize(0)) {
    return 1;
  }

  cout << "Initialize OK." << endl;

  // ウィンドウメッセージを処理する
  MSG msg;
  while(GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return 0;
}

まず MSSDK は COM を使うので CoInitialize 関数を使って COM を初期化する。 その後の atexit 呼び出しは、プログラム終了時に CoUninitialize 関数が呼び出されるようにするための命令である。 次に GeneralDictator クラスのインスタンスを作成し初期化する。 最後に MSSDK が音声認識を行えるようにウィンドウメッセージを処理している。

コメント

コメントはありません。 コメント/mssdk/vc6/general_grammar

お名前: