こんにちは、Habr!
アスタリスクとYandexの音声認識サービスを統合した経験を共有することにしました。
私のクライアントは、彼のPBXにVoice2Text機能を導入するために火をつけました。
PBXとしてFreePBXが使用されました。
すぐにGoogleの音声認識サービスを使用することになりましたが、目的の結果を達成するために数時間失敗した後、同様のYandexサービスを試すことにしました。
カットの下の詳細。
ソースデータ:
FreePBX Distro 12 Stable-6.12.65、CentOS 6.5、Asterisk 11 + Voice2Text機能を実装するという信じられないほどの願望:)
デフォルトでは、FreePBXはすべてのエントリを.wavに書き込みますが、認識のためにファイルを.mp3に転送する必要があります。 これにはsendmailmp3を使用します。
Sendmailmp3は、いくつかの段階に分けられます。
- ストリームをキャッチ
- メールの内容を分析する
- メッセージを部分に分割する
- オーディオファイルを抽出する
- wavをmp3に変換する
- メールの内容を回復する
- sendmailコマンドにメッセージを送信します
sendmailmp3と作業に必要なすべてのパッケージをインストールするスクリプトを使用します。
/ tmpに移動します。
cd /tmp
sendmailmp3をインストールするスクリプトをダウンロードします。
wget http://pbxinaflash.com/installmp3stt.sh
ファイルを実行可能にします:
chmod +x installmp3stt.sh
そして、スクリプトを実行します。
./installmp3stt.sh
次に、FreePBX Webインターフェイス、[設定]タブ、[ボイスメール管理]、[設定]に移動します。
そして、mailcmdフィールドに/ usr / sbin / sendmailmp3と書き込みます
そして、フォーマット:wavフィールド

これで、メッセージがmp3形式でメールに送信され、Voice2Text機能が追加されます。
Yandexサービスの選択は、ファイルをflacまたはspeexにトランスコードするのではなく、mp3に直接送信できるという事実(サポートされている形式に関する少なくとも他の情報は見つかりませんでした)と、最大メッセージ長がGoogleよりもはるかに長いという事実によるものです。
スクリプトが完全に機能するようになる前に、
リンクをたどり、開発者のオフィスに行き、Yandexメールボックスを使用してログインし、APIキーを要求する必要があります。 その後、指定されたメールに追加の指示が書かれた手紙が届きます。

キーをアクティブにした後、認識のためにファイルを送信するcurlリクエストを作成する必要があります。 ビューは次のようになります。
asr.yandex.net/asr_xml ?
uuid = <一意のユーザーID>
&キー= <APIキー>
&topic = <音声リクエストトピック>
&[lang = <クエリ言語>]
次の形式がサポートされています。
- オーディオ/ x-speex 1
- オーディオ/ x-pcm;ビット= 16;レート= 8000
- オーディオ/ x-pcm;ビット= 16;レート= 16000 2
- オーディオ/ x-alaw;ビット= 13;レート= 8000
- オーディオ/ x-wav
- オーディオ/ x-mpeg-3 3
応答はXMLで返されます。これには、各仮説の確実性の度合いを示す認識仮説のnベストリスト(最大5つの値)が含まれます。
成功した認識の例:
<?xml version = "1.0" encoding = "utf-8"?>
バスマナヤ通り
失敗した認識の例:
<?xml version = "1.0" encoding = "utf-8"?>
/>
その結果、認識オプションとこれに似たmp3ファイルの添付ファイルを含むメッセージは、指定したメールボックスに分類されます。

結果のスクリプトは次のようになります。
私の意見では、このオプションは
ここで説明さ
れているよりも幾分簡単です。 それはすべて、1つのスクリプトを実行してWebインターフェイスで数回クリックするだけでなく、記録を.wavではなくmp3に送信することになります。 もちろん、これはunix-wayではないと誰かが言うだろう:)が、少なくとも慣れるという目的のためには、誰かにとっては有用かもしれません。