トラブルシューティング
一般的な質問
Q. 音声認識精度が思うように出ないのですがどうしたらいいですか?
以下のポイントをチェックしてください。結果の取り扱いのクライアントエラーも参照してください。改善しない場合はお問合せください。
音声データのチャネル数を確認
ステレオ録音の場合、1チャネル目の音声しか認識しません。両チャネルの音声を認識させたい場合は分離した音声ファイルごとに送信してください。
音声データのサンプリングレートを確認
通話音声の場合は主に8kHzで録音されることになり、それ以外で広く使われている音声は16kHz以上になります。 会話_汎用エンジンについてはそれぞれのサンプリングレートに対応していますが、接続先のエンジンが異なるため、リクエスト時に正しいサンプリングレートを記述する必要があります。 ※サンプリングレートの指定が間違っていると、ほぼ認識されません(認識結果が空になります)。
音声フォーマット指定のエンディアンを確認
ヘッダなしの音声データ(RAWデータ)を送信する場合は、サンプリングレートに加えて、エンディアンを指定する必要があります。リトルエンディアンのデータはlsb、ビッグエンディアンのデータはmsbをつけます(
lsb8K
、msb16K
など)。※lsbやmsbの指定が間違って逆になっていると、ほぼ認識されません(認識結果が空になります)。
認識対象の音声が録音されているかを確認
周りの環境や、録音を行うマイクデバイスなどに影響を受けるので、発話者の音声がしっかりと聞き取れるレベルで録音されているかを聴いて確認してください。
発話内容が利用するエンジンと合致しているかを確認
専門用語が頻繁に話されるような音声は認識精度が下がります。 医療、金融、保険業界向けの領域特化エンジンをご用意しています。発話内容が合致しそうな場合はそちらをお試しください。詳細は音声認識エンジンを参照してください。 社内のみで使用される独自の用語や略称などを認識させたい場合は、単語登録機能をご活用ください。
Q. 動画ファイル、HLSなどのストリーミング形式の動画・音声の音声認識はできませんか?
ストリーミング配信の動画や音声を音声認識するためのAPIやサンプルプログラムは提供していません。 非対応のデータフォーマットの場合、対応している音声フォーマットに変換していただく必要があります。
音声フォーマットを変換するソフトウェアには、フリーソフトウェアのFFmpegなどがあります。 ただし、動画・音声フォーマットによっては、フォーマット自体にライセンスで使用法の制限やロイヤリティの発生有無などがある場合があります。 お客様の責任でご確認、ご利用いただきますようお願いします。
動画や音声を再生しながら音声認識を行いたい場合は、JavaScriptのサンプルプログラムのgetUserMedia()
をgetDisplayMedia()
に変更することでマイクの入力音のかわりにブラウザやシステムの音を認識することができますので、こちらもご検討ください。
(例) wrp.js
変更前
navigator.mediaDevices.getUserMedia(
{audio: true, video: false}
変更後
navigator.mediaDevices.getDisplayMedia(
{audio: true, video: true}
※ getDisplayMedia()
のaudioは、すべてのブラウザがサポートしているわけではありません。ChromeとEdgeで動作することを確認しています。
マイページに関する質問
Q. クライアントアプリケーションごとの利用量を知ることはできませんか?
クライアントアプリケーションごとの利用量を知るには、クライアントアプリケーションごとにアカウントを分ける必要があります。 アカウントを分ける必要がある場合、「サービス提供者向け顧客管理機能」のご利用もご検討ください。
「サービス提供者向け顧客管理機能」を検討される場合、詳細についてはお問い合わせフォームからお問い合わせください。
Q. 単語登録ページでファイルから単語を登録したのにページに表示されない理由は何ですか?
ファイルの文字コードがUTF-8でない、もしくはファイルの書式が正しくないため、登録できていない可能性があります。 ファイルの文字コードと書式を確認してください。
クライアントライブラリに関する質問
Q. 音声認識サーバーに接続中に、インターネットが切断して回復した後は、どのように再開処理をすればよいですか?
新規にsocketを作成されても問題ありませんが、終了処理を行い、再接続を行うことをお勧めします。
クライアントライブラリの場合、wrp.disconnect()
後、改めてwrp.connect()
から始めることで再接続できます。
(例)
wrp.construct();
wrp.connect();
wrp.feedDataResume();
wrp.feedData();
wrp.feedData();
wrp.feedData();
--> エラー発生
wrp.disconnect();
wrp.connect();
wrp.feedDataResume();
wrp.feedData();
wrp.feedData();
wrp.feedData();
wrp.feedDataPuse();
Q. Androidアプリケーションでサーバーの接続に失敗する理由は何ですか?
Androidでは、メインスレッド(UIスレッド)からサーバーに接続することができません。 別のスレッドで行ってください。 また、ネットワークオペレーションを行うための権限設定(android.permission.INTERNET)が必要になります。
サンプルプログラムに関する質問
Q. 非同期インタフェースのサンプルプログラムはありませんか?
Pythonのサンプルコードは非同期 HTTP インタフェースを確認してください。 また、AmiVoice Tech Blogでサンプルアプリケーションをソースコード付きで公開していますので、こちらを参考にしてください。
Q. Windowsのバッチファイルでcurlコマンドを実行すると、パラメーターが有効にならない理由は何ですか?
Windowsのバッチファイルにコマンドを記述して実行する場合、「%20」は「%%20」のようにエスケープする必要があります。 コマンドの内容を確認してください。
Q. Windowsのコマンドプロンプトで一部の文字が文字化けする理由は何ですか?
Windowsのコマンドプロンプトは、UTF-8の4バイト文字の表示に対応していないため、文字化けします。
Q. PHPで「PHP Warning: PHP Startup: Unable to load dynamic library 'openssl' 」が出ますが、openssl.soは必ず必要ですか?
opensslが組み込みでコンパイルされているPHPの場合は不要です。
サーバーの接続に関する質問
Q. APPKEYの認証に失敗する理由は何ですか?
指定しているパラメーター及びクレジットカードの登録状態を確認してください。 また、ご契約後、AmiVoice APIが利用可能になるまでに10分ほどかかる場合があります。
Q. 接続時にSSL証明書エラーが発生する理由は何ですか?
他社製セキュリティソリューションのZscalerを使用している環境では、Zscalerの証明書を指定する必要がある旨、ご利用いただいているお客様から連絡をいただいています。
Q. タイムアウトにより接続に失敗する理由は何ですか?
ファイアウォールやプロキシサーバなどのネットワークの設定によってブロックされている可能性があります。 ファイアウォールおよびプロキシサーバの設定を確認してください。
Webブラウザはネットワーク設定がされている可能性があるため、JavaScript版のサンプルをお試しください。
プロキシサーバの設定が必要な環境でAmiVoice APIクライアントライブラリをお使いの場合は、setProxyServerName()
メソッドでプロキシサーバの設定を行ってください。
- Hrpクラス void setProxyServerName(String proxyServerName)
- Wrpクラス void setProxyServerName(String proxyServerName)
Q. HTTPステータスの431や414が返却される理由は何ですか?
リクエストのヘッダーやURI、クエリ文字列が長すぎます。 profileWordsをクエリ文字列で指定しているような場合は、リクエストボディで指定するようにしてください。
音声認識の結果とジョブのステータスに関する質問
Q. 単語登録ページで登録した単語が反映されない理由は何ですか?
リクエストパラメータにプロファイルIDパラメーターを指定する必要があります。 「profileId」や「profileWords」は独立したリクエストパラメーターではなく、dパラメーターの「子パラメーター」であることに注意してください。 詳細はマイページの単語登録を確認してください。
Q. 自分で用意した音声ファイルが音声認識できない理由は何ですか?
AmiVoice APIが対応していない音声フォーマットを使用している、または音声ファイルの音声フォーマットとパラメーターで指定している音声フォーマットが合っていない可能性があります。 AmiVoice APIが対応している音声フォーマットであること、パラメーターの指定が正しいことを確認してください。 また、サーバーに音声ファイルのデータではなく、ファイル名が送られてきているケースもありますので、ご注意ください。 音声フォーマットについては、音声フォーマットを確認してください。
Q. 単語登録で半角「|」や半角「:」などの使用できない文字が含まれた単語を使用したいときはどうすればいいですか?
別の文字列に置き換えて登録し、音声認識結果を取得した後の処理でもとの文字に置き換える、といった処理が必要になります。 例えばURLエンコードした文字を登録しておき、アプリケーションでは音声認識結果の文字列をURLデコードするようにします。
Q. ログ保存なしが有効になっているかどうかを知る方法はありませんか?
マイページの「今月の使用量」で「ログ保存あり」と「ログ保存なし」の使用量を確認してください。 ご利用分が「ログ保存なし」の使用量に加算されていれば、ログ保存なしが有効です。 以前は、ログ保存なしの場合、音声認識結果の"utteranceid"の値の末尾に[nolog]が入っていましたが、末尾の[nolog]は廃止されました。
Q. 非同期HTTPインタフェースのジョブのステータスが、queued
の理由は何ですか?
リクエストに成功してから、音声認識が完了するまでには、送信した音声の長さに応じて時間がかかります。
ジョブの状態を取得すると、処理が進むにつれてstatus
は以下のように遷移します。
queued → started → processing → completed
queued
の場合は、音声認識が完了していませんので、しばらくお待ちいただいてから再度、結果取得のリクエストを行ってください。
また、もし、処理の途中でエラーが発生した場合は、completed
にならずに、いずれかの状態からerror
に遷移します。
queued → error
queued → started → error
queued → started → processing → error
音声認識のリクエストが成功したら、status
がcompleted
またはerror
になるまで、30秒間隔でジョブの状態の取得を行う、といった処理を行ってください。
Q. 句点の後に改行を入れるにはどうしたらいいですか?
AmiVoice APIに自動で改行を挿入するような機能はありませんので、クライアント側で音声認識結果のテキストを加工していただく必要があります。 (例)JavaScriptで「。」を「。」とbrタグに置換。
text = text.replace(/。/g, "。<br>");
Q. ひらがなの音声認識結果を取得することはできませんか?
音声認識結果のJSONには、単語ごとの「読み」情報が含まれています。
JSONの詳細につきましては各APIの音声認識結果のレスポンス(同期HTTPインタフェース、 非同期HTTPインタフェース 、WebSocketインタフェース )を参照してください。「spoken」が各単語の読みとなります。
ただし、この「読み」は、発音どおりのものになりますので「ふりがな」とは異なる場合があります。 例えば、「私 は」という表記に対する読みは「わたくし わ」となります。
その他の質問
Q. BIZTELの音声認識サービス履歴連携で「会話_汎用」以外のエンジンがエラーになる理由は何ですか?
現在、BIZTELから送信される音声データのフォーマット(サンプリングレート16kHz未満)に対応しているのが「会話_汎用」のみのため、他のエンジンではエラーになります。
Q. AudioCodes社のVoiceAI ConnectでAmiVoiceを利用する際に登録した単語を反映させることはできませんか?
Connection Engine Name(folderId)で接続エンジン名の後にプロファイルIDの指定を追加し、
<接続エンジン名> profileId=<:プロファイルID>
のようにしてプロファイルIDが指定可能であることをご利用いただいているお客様からご連絡をいただいています。 詳細については、AudioCodes社様にご確認をお願いします。