Google speech APIを使用したリアルタイム音声解析

概要

Googleが提供しているspeech APIを使用して音声解析後テキスト化し、Asterisk上でテキストを音声合成し、リアルタイムに再生する方法を紹介します。

 

検証環境

Google TTS(Text to speech)を使用したリアルタイム音声合成のページに加え、以下が必要です。

 

準備

  1. speech-recog.agiの配置
    # mv speech-recog.agi /var/lib/asterisk/agi-bin/
    # chmod 755 /var/lib/asterisk/agi-bin/speech-recog.agi
    # vi /var/lib/asterisk/agi-bin/speech-recog.agi
      ※my $key = ""の""内にGoogle APIキーを入力します。
  2. ダイヤルプランの作成
    内線番号5001を使用する場合
    exten => 5001,1,Answer()
    exten => 5001,n,agi(googletts.agi,"認識させたい文章を話し、最後に#を押してください。",ja)
    exten => 5001,n(record),agi(speech-recog.agi,ja-JP)
    exten => 5001,n,Verbose(1,Script returned: ${confidence} , ${utterance})
    
    exten => 5001,n(success),GotoIf($["${confidence}" > "0.3"]?playback:retry)
    
    exten => 5001,n(playback),agi(googletts.agi,"あなたがお話しになったのは、、、",ja)
    exten => 5001,n,agi(googletts.agi,"${utterance}",ja)
    exten => 5001,n,goto(end)
    
    ;Retry in case speech recognition wasn't successful:
    exten => 5001,n(retry),agi(googletts.agi,"もう少しはっきりとお話しください。",ja)
    exten => 5001,n,goto(record)
    
    exten => 5001,n(fail),agi(googletts.agi,"音声データを正しく取得できませんでした。",ja)
    exten => 5001,n(end),Hangup()

 

AGIの使用方法

agi(speech-recog.agi,[language],[timeout],[intkey],[NOBEEP])

  • language: textの言語(詳細)
  • timeout: 入力終了までの時間(デフォルトでは3秒無音が続くと終了)
  • intkey: 入力終了デジット(デフォルトでは#)
  • NOBEEP: 入力開始時のビープ音を再生しない

 

AGI内の処理説明

  1. Asterisk AGI(RECORD FILE)にて音声録音
  2. GoogleAPIの呼出し
    http://www.google.com/speech-api/v2/recognize
  3. HTTPの結果(JSON)を解析し、認識文字列とスコアを取得
  4. Asterisk AGI(SET VARIABLE)にてAsteriskチャネル変数に保存

 

他にご質問がございましたら、リクエストを送信してください

コメント

Powered by Zendesk