メインコンテンツまでスキップ

チュートリアル 長い音声ファイルの書き起こし

会議や講演のスピーチ、コールセンターの通話録音などの長い音声をテキストにしたい場合、音声認識のリクエストと、結果の取得を分けて行う必要があります。

note

音声認識には対象の音声の長さに応じて時間がかかります。音声にノイズが多い場合など、より時間がかかることもあり、だいたい送信した音声の0.5〜1.5倍程度の時間がかかります。例えば、1時間の音声を送信すると結果を得るまでに30〜90分程度の時間がかかることになります。もし、ひとつのHTTPセッションでリクエストと結果を得ようとすると、HTTPのセッションを長い間、維持し続ける必要があり、途中で切れてしまうと結果が得られないということになります。そのため、音声ファイルのサイズ 16MB を上限として、それよりも長い音声に対してはリクエストと結果の取得を分けて行うことにしています。

準備

このチュートリアルではプログラムを記述する代わりに、curlコマンドとjqコマンドを使って API の利用方法を説明します。

  • curl
  • jq
  • AmiVoice API に登録し、AppKeyを取得する
  • 書き起こししたい音声ファイルを用意する
note

結果を見やすく整形するために、jqコマンドを利用しています。jqがインストールされていなくても、このあとのチュートリアルで音声を書き起こしできますので、インストールせずに進んでも構いません。

curl

ご利用のシステムにcurlコマンドがインストールされているかどうかを確認してください。

curl -V

バージョンが表示されない場合は、https://curl.se/からご利用の OS のパッケージをダウンロードするか、パッケージマネージャを利用してcurlをインストールしてください。

jq

ご利用のシステムにjqコマンドがインストールされているかどうかを確認してください。

jq -V

バージョンが表示されない場合は、https://stedolan.github.io/jq/からご利用の OS のパッケージをダウンロードするか、パッケージマネージャを利用してjqをインストールしてください。

AppKeyの取得

  1. AmiVoice API へ登録します。
  2. マイページにログインし、[接続情報]タブの[共通接続情報]に記載されている AppKey を記録しておきます。

音声ファイル

書き起こししたい音声ファイルを用意します。 ここでは、クライアントライブラリのサンプルプログラムに同梱されている音声ファイルtest.wavを使います。

note
  • 音声ファイルを準備するとき、対応している音声ファイルの形式に注意してください。対応フォーマットは、音声フォーマットについてを参照してください。
  • 受付可能な音声ファイルの長さには制限があります。制限事項を参照してください。

実行

1. 音声認識のリクエスト

音声認識のリクエストのときに指定するパラメータは、同期 HTTP 音声認識 API と全く同じです。

curl -X POST https://acp-api-async.amivoice.com/v1/recognitions \
-F d=-a-general \
-F u={APP_KEY} \
-F a=@test.wav

リクエストに成功すると以下のようなレスポンスが得られます。リクエストはジョブとしてキューに入り、順に処理されることになります。

{"sessionid":"017c25ec12c00a304474a999","text":"..."}

2. ジョブの状態と結果の取得

リクエストで得られたsessionidを使ってジョブの状態(status)や結果を得ることができます。音声認識結果が得られるまで複数回実行することになります。{APPKEY}Authorizationヘッダに指定してください。

$ curl -H "Authorization: Bearer {AppKey}" \
https://acp-api-async.amivoice.com/v1/recognitions/017c25ec12c00a304474a999

リクエストを送った直後のstatusqueuedの状態になります。

{"service_id":"{YOUR_SERVICE_ID}","session_id":"017c25ec12c00a304474a999","status":"queued"}

キューからジョブが取り出されるとstatusstarted状態になります。

{"service_id":"{YOUR_SERVICE_ID}","session_id":"017c25ec12c00a304474a999","status":"started"}

実際に音声認識処理が始まるとstatusprocessing状態になります。API が受けとった音声のサイズや、MD5 チェックサムを使って送信した音声が正しく処理されているかどうかを確認できます。processing状態にかかる時間は、音声の長さによります。

{'audio_md5': '40f59fe5fc7745c33b33af44be43f6ad', 'audio_size': 306980, 'service_id': '{YOUR_SERVICE_ID}', 'session_id': '017c25ec12c00a304474a999', 'status': 'processing'}

結果

音声認識が完了すると、statuscompleted状態となります。このとき、resultsに音声認識結果を得ることができます。結果を見やすく整形するために、jqコマンドを使います。

curl -H "Authorization: Bearer {AppKey}" \
https://acp-api-async.amivoice.com/v1/recognitions/017c25ec12c00a304474a999 | jq

以下はレスポンスの完全な例です。文字起こしした結果だけではなく、単語単位の結果や音声時間、信頼度などの情報も得られます。詳細は、音声認識の結果を参照してください。

レスポンス
{
"audio_md5": "40f59fe5fc7745c33b33af44be43f6ad",
"audio_size": 306980,
"results": {
"code": "",
"message": "",
"results": [
{
"confidence": 1.0,
"endtime": 9591,
"rulename": "",
"starttime": 0,
"tags": [],
"text": "アドバンスト・メディアは、人と機械等の自然なコミュニケーションを実現し、豊かな未来を創造していくことをめざします。",
"tokens": [
{
"confidence": 1.0,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ",
"starttime": 570,
"written": "アドバンスト・メディア"
},
{
"confidence": 1.0,
"endtime": 1850,
"spoken": "は",
"starttime": 1578,
"written": "は"
},
{
"confidence": 0.77,
"endtime": 2010,
"spoken": "_",
"starttime": 1850,
"written": "、"
},
{
"confidence": 1.0,
"endtime": 2314,
"spoken": "ひと",
"starttime": 2010,
"written": "人"
},
{
"confidence": 1.0,
"endtime": 2426,
"spoken": "と",
"starttime": 2314,
"written": "と"
},
{
"confidence": 1.0,
"endtime": 2826,
"spoken": "きかい",
"starttime": 2426,
"written": "機械"
},
{
"confidence": 0.76,
"endtime": 2922,
"spoken": "とう",
"starttime": 2826,
"written": "等"
},
{
"confidence": 1.0,
"endtime": 3082,
"spoken": "の",
"starttime": 2922,
"written": "の"
},
{
"confidence": 1.0,
"endtime": 3434,
"spoken": "しぜん",
"starttime": 3082,
"written": "自然"
},
{
"confidence": 1.0,
"endtime": 3530,
"spoken": "な",
"starttime": 3434,
"written": "な"
},
{
"confidence": 1.0,
"endtime": 4362,
"spoken": "こみゅにけーしょん",
"starttime": 3530,
"written": "コミュニケーション"
},
{
"confidence": 1.0,
"endtime": 4442,
"spoken": "を",
"starttime": 4362,
"written": "を"
},
{
"confidence": 1.0,
"endtime": 4906,
"spoken": "じつげん",
"starttime": 4442,
"written": "実現"
},
{
"confidence": 1.0,
"endtime": 5242,
"spoken": "し",
"starttime": 4906,
"written": "し"
},
{
"confidence": 0.83,
"endtime": 5642,
"spoken": "_",
"starttime": 5242,
"written": "、"
},
{
"confidence": 1.0,
"endtime": 5978,
"spoken": "ゆたか",
"starttime": 5642,
"written": "豊か"
},
{
"confidence": 1.0,
"endtime": 6090,
"spoken": "な",
"starttime": 5978,
"written": "な"
},
{
"confidence": 1.0,
"endtime": 6490,
"spoken": "みらい",
"starttime": 6090,
"written": "未来"
},
{
"confidence": 1.0,
"endtime": 6554,
"spoken": "を",
"starttime": 6490,
"written": "を"
},
{
"confidence": 0.92,
"endtime": 7034,
"spoken": "そうぞう",
"starttime": 6554,
"written": "創造"
},
{
"confidence": 1.0,
"endtime": 7210,
"spoken": "して",
"starttime": 7034,
"written": "して"
},
{
"confidence": 1.0,
"endtime": 7402,
"spoken": "いく",
"starttime": 7210,
"written": "いく"
},
{
"confidence": 0.8,
"endtime": 7674,
"spoken": "こと",
"starttime": 7402,
"written": "こと"
},
{
"confidence": 1.0,
"endtime": 7706,
"spoken": "を",
"starttime": 7674,
"written": "を"
},
{
"confidence": 0.78,
"endtime": 7962,
"spoken": "めざ",
"starttime": 7706,
"written": "めざ"
},
{
"confidence": 0.78,
"endtime": 8490,
"spoken": "します",
"starttime": 7962,
"written": "します"
},
{
"confidence": 0.83,
"endtime": 8778,
"spoken": "_",
"starttime": 8490,
"written": "。"
}
]
}
],
"segments": [
{
"code": "",
"message": "",
"results": [
{
"confidence": 1.0,
"endtime": 8778,
"rulename": "",
"starttime": 250,
"tags": [],
"text": "アドバンスト・メディアは、人と機械等の自然なコミュニケーションを実現し、豊かな未来を創造していくことをめざします。",
"tokens": [
{
"confidence": 1.0,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ",
"starttime": 570,
"written": "アドバンスト・メディア"
},
{
"confidence": 1.0,
"endtime": 1850,
"spoken": "は",
"starttime": 1578,
"written": "は"
},
{
"confidence": 0.77,
"endtime": 2010,
"spoken": "_",
"starttime": 1850,
"written": "、"
},
{
"confidence": 1.0,
"endtime": 2314,
"spoken": "ひと",
"starttime": 2010,
"written": "人"
},
{
"confidence": 1.0,
"endtime": 2426,
"spoken": "と",
"starttime": 2314,
"written": "と"
},
{
"confidence": 1.0,
"endtime": 2826,
"spoken": "きかい",
"starttime": 2426,
"written": "機械"
},
{
"confidence": 0.76,
"endtime": 2922,
"spoken": "とう",
"starttime": 2826,
"written": "等"
},
{
"confidence": 1.0,
"endtime": 3082,
"spoken": "の",
"starttime": 2922,
"written": "の"
},
{
"confidence": 1.0,
"endtime": 3434,
"spoken": "しぜん",
"starttime": 3082,
"written": "自然"
},
{
"confidence": 1.0,
"endtime": 3530,
"spoken": "な",
"starttime": 3434,
"written": "な"
},
{
"confidence": 1.0,
"endtime": 4362,
"spoken": "こみゅにけーしょん",
"starttime": 3530,
"written": "コミュニケーション"
},
{
"confidence": 1.0,
"endtime": 4442,
"spoken": "を",
"starttime": 4362,
"written": "を"
},
{
"confidence": 1.0,
"endtime": 4906,
"spoken": "じつげん",
"starttime": 4442,
"written": "実現"
},
{
"confidence": 1.0,
"endtime": 5242,
"spoken": "し",
"starttime": 4906,
"written": "し"
},
{
"confidence": 0.83,
"endtime": 5642,
"spoken": "_",
"starttime": 5242,
"written": "、"
},
{
"confidence": 1.0,
"endtime": 5978,
"spoken": "ゆたか",
"starttime": 5642,
"written": "豊か"
},
{
"confidence": 1.0,
"endtime": 6090,
"spoken": "な",
"starttime": 5978,
"written": "な"
},
{
"confidence": 1.0,
"endtime": 6490,
"spoken": "みらい",
"starttime": 6090,
"written": "未来"
},
{
"confidence": 1.0,
"endtime": 6554,
"spoken": "を",
"starttime": 6490,
"written": "を"
},
{
"confidence": 0.92,
"endtime": 7034,
"spoken": "そうぞう",
"starttime": 6554,
"written": "創造"
},
{
"confidence": 1.0,
"endtime": 7210,
"spoken": "して",
"starttime": 7034,
"written": "して"
},
{
"confidence": 1.0,
"endtime": 7402,
"spoken": "いく",
"starttime": 7210,
"written": "いく"
},
{
"confidence": 0.8,
"endtime": 7674,
"spoken": "こと",
"starttime": 7402,
"written": "こと"
},
{
"confidence": 1.0,
"endtime": 7706,
"spoken": "を",
"starttime": 7674,
"written": "を"
},
{
"confidence": 0.78,
"endtime": 7962,
"spoken": "めざ",
"starttime": 7706,
"written": "めざ"
},
{
"confidence": 0.78,
"endtime": 8490,
"spoken": "します",
"starttime": 7962,
"written": "します"
},
{
"confidence": 0.83,
"endtime": 8778,
"spoken": "_",
"starttime": 8490,
"written": "。"
}
]
}
],
"text": "アドバンスト・メディアは、人と機械等の自然なコミュニケーションを実現し、豊かな未来を創造していくことをめざします。"
}
],
"text": "アドバンスト・メディアは、人と機械等の自然なコミュニケーションを実現し、豊かな未来を創造していくことをめざします。",
"utteranceid": "20210927/06/017c25ed38cc0a30425239d0_20210927_062436[nolog]"
},
"service_id": "{YOUR_SERVICE_ID}",
"session_id": "017c25ec12c00a304474a999",
"status": "completed"
}

次のステップ