BLOGTIMES
2018/01/27

Asterisk のボイスメールを Google に文字起こしさせてメールで送る

  asterisk  deeplearning  google 
このエントリーをはてなブックマークに追加

Asterisk のボイスメールを自動的に Google に文字起こしさせてメールで送る方法がないかと思って調べてみたら、既に試してみた人がいて、手順とスクリプトが纏められていました。

これをそのまま導入すれば良いのかと思いきや、API Key が必要ない Google Speech API の v1 は既に廃止されているらしく、これを動かすと API からは 404 が帰って来てしまいます。ちなみに Google の音声認識 API については Google Cloud Speech API が正式に提供されており、private 扱いとなっている Google Speech API はあまり推奨されないのかもしれませんが、今回は改造を最小限に抑えるために Google Speech API v2 に対応させてみます。

Google Speech API の API Key を取得する

Google Speech API は private 扱いなので、利用するためにはあらかじめ Chromium-dev グループに参加しておく必要があります
この辺りの手順や、API の仕様については以下のサイトにまとまっていますので、これらを参考に API Key を取得します。

sendmailmp3 へのパッチ

基本的には sendmailmp3 の導入を行うだけですが、sendmailmp3 に以下のパッチを当ててください。
###YOUR_API_KEY### の部分については自分の API Key に置き換える必要があります。)

また、この API は 1 日 50 回程度までしかアクセスできないので注意が必要です。
普通の人の留守電の用途であれば十分な回数だとは思いますが・・・・・・

diff -u /usr/sbin/sendmailmp3{.org,}

--- sendmailmp3.org 2018-01-27 20:53:40.425626774 +0900 +++ sendmailmp3 2018-01-27 22:23:54.469675777 +0900 @@ -13,7 +13,7 @@ # 16/07/2015 - V2.2 - Handle natively GSM WAV (thanks to Michael Munger) # set language for voice recognition (en-US, en-GB, fr-FR, ...) -LANGUAGE="en-US" +LANGUAGE="ja-JP" # set PATH PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" @@ -77,12 +77,13 @@ sox stream.part3.wav -r 16000 -b 16 -c 1 audio.flac vad reverse vad reverse lowpass -2 2500 # call Google Voice Recognition sending flac file as POST - curl --data-binary @audio.flac --header 'Content-type: audio/x-flac; rate=16000' 'https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&pfilter=0&lang='$LANGUAGE'&maxresults=1' 1>audio.txt + curl -X POST --data-binary @'stream.part3.wav' --header 'Content-Type: audio/l16; rate=8000;' 'https://www.google.com/speech-api/v2/recognize?output=json&lang='$LANGUAGE'&key=###YOUR_API_KEY###' | jq '.result[].alternative[0].transcript' >audio.txt # extract the transcript and confidence results - FILETOOBIG=$(cat audio.txt | grep "<HTML>") - TRANSCRIPT=$(cat audio.txt | cut -d"," -f3 | sed 's/^.*utterance\":\"\(.*\)\"$/\1/g') - CONFIDENCE=$(cat audio.txt | cut -d"," -f4 | sed 's/^.*confidence\":0.\([0-9][0-9]\).*$/\1/g') +# FILETOOBIG=$(cat audio.txt | grep "<HTML>") +# TRANSCRIPT=$(cat audio.txt | cut -d"," -f3 | sed 's/^.*utterance\":\"\(.*\)\"$/\1/g') + TRANSCRIPT=$(cat audio.txt) +# CONFIDENCE=$(cat audio.txt | cut -d"," -f4 | sed 's/^.*confidence\":0.\([0-9][0-9]\).*$/\1/g') # generate first part of mail body, converting it to LF only mv stream.part stream.new @@ -99,7 +100,7 @@ echo "Voice message is too long to be transcripted." >> stream.new else # append result of transcription - echo "Message seems to be ( $CONFIDENCE% confidence ) :" >> stream.new +# echo "Message seems to be ( $CONFIDENCE% confidence ) :" >> stream.new echo "$TRANSCRIPT" >> stream.new fi

ボイスメール本文の例

こんな感じで、いつものボイスメールの末尾に文字おこししたテキストが追加されるようになります。
これで簡単な要件であればファイルを開くことなく内容が分かるようになります。

line, 3000 に新しいボイスメールが届いています From: "line" <3000> Length: 0:10 seconds Date: Saturday, January 27, 2018 at 10:23:54 PM Dial *98 to access your voicemail by phone. Visit http://AMPWEBADDRESS/ucp to check your voicemail with a web browser. --- "これは ボイスメールのテストです これは ボイスメールのテストです"

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9935
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン