短い音声ファイルの書き起こし
手元にある短い音声ファイル(16MB 以下)を AmiVoice API の HTTPインタフェース のエンドポイントに送信すれば簡単にテキストに変換することができます。このチュートリアルではプログラムを記述する代わりに、curl
コマンドとjq
コマンドを使って API の利用方法を説明します。長い音声ファイルの場合は次のチュートリアル「長い音声ファイルの書き起こし」で説明します。
準備
このチュートリアルを実行するためには以下が必要です。
- curl
- jq
- AmiVoice API に登録し、
APPKEY
を取得する - 書き起こししたい音声ファイルを用意する
結果を見やすく整形するために、jq
コマンドを利用しています。jq
がインストールされていなくても、このあとのチュートリアルで音声を書き起こしできますので、インストールせずに進んでも構いません。
curl
ご利用のシステムにcurl
コマンドがインストールされているかどうかを確認してください。
curl -V
バージョンが表示されない場合は、https://curl.se/からご利用の OS のパッケージをダウンロードするか、パッケージマネージャを利用してcurl
をインストールしてください。
jq
ご利用のシステムにjq
コマンドがインストールされているかどうかを確認してください。
jq -V
バージョンが表示されない場合は、https://stedolan.github.io/jq/からご利用の OS のパッケージをダウンロードするか、パッケージマネージャを利用してjq
をインストールしてください。
APPKEYの取得
- AmiVoice API へ登録します。
- マイページにログインし、[接続情報]タブの[共通接続情報]に記載されている APPKEY を記録しておきます。
AmiVoice Tech BlogでAPPKEY
を取得するまでの手順を詳述しています。APPKEY
の取得についてはAmiVoice APIを使ってみようも参照してください。
音声ファイル
書き起こししたい音声ファイルを用意します。 ここでは、クライアントライブラリのサンプルプログラムに同梱されている音声ファイル(test.wav)を使います。
- 音声ファイルを準備するとき、対応している音声ファイルの形式に注意してください。対応フォーマットは、音声フォーマットについてを参照してください。
- 16MB 以上の音声ファイルを送信する場合は、次の長い音声ファイルの文字起こしを参照してください。
実行
ターミナルを起動して以下のコマンドをコピーして実行してください。その際、test.wav
の部分は、用意した音声ファイルのパスに置き換えてください。また、{APPKEY}
は自身のキーに置き換えてください。
curl https://acp-api.amivoice.com/v1/recognize \
-F d=-a-general \
-F u={APP_KEY} \
-F a=@test.wav
結果
実行に成功すると、以下のように JSON 形式の結果が得られます。
{"results":[{"tokens":[{"written":"\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8\u30fb\u30e1\u30c7\u30a3\u30a2","confidence":1.00,"starttime":522,"endtime":1578,"spoken":"\u3042\u3069\u3070\u3093\u3059\u3068\u3081\u3067\u3043\u3042"},{"written":"\u306f","confidence":1.00,"starttime":1578,"endtime":1866,"spoken":"\u306f"},{"written":"\u3001","confidence":0.72,"starttime":1866,"endtime":2026,"spoken":"_"},{"written":"\u4eba","confidence":1.00,"starttime":2026,"endtime":2314,"spoken":"\u3072\u3068"},{"written":"\u3068","confidence":1.00,"starttime":2314,"endtime":2426,"spoken":"\u3068"},{"written":"\u6a5f\u68b0","confidence":1.00,"starttime":2426,"endtime":2826,"spoken":"\u304d\u304b\u3044"},{"written":"\u3068","confidence":1.00,"starttime":2826,"endtime":2938,"spoken":"\u3068"},{"written":"\u306e","confidence":1.00,"starttime":2938,"endtime":3082,"spoken":"\u306e"},{"written":"\u81ea\u7136","confidence":1.00,"starttime":3082,"endtime":3434,"spoken":"\u3057\u305c\u3093"},{"written":"\u306a","confidence":1.00,"starttime":3434,"endtime":3530,"spoken":"\u306a"},{"written":"\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3","confidence":1.00,"starttime":3530,"endtime":4378,"spoken":"\u3053\u307f\u3085\u306b\u3051\u30fc\u3057\u3087\u3093"},{"written":"\u3092","confidence":1.00,"starttime":4378,"endtime":4442,"spoken":"\u3092"},{"written":"\u5b9f\u73fe","confidence":1.00,"starttime":4442,"endtime":4922,"spoken":"\u3058\u3064\u3052\u3093"},{"written":"\u3057","confidence":1.00,"starttime":4922,"endtime":5434,"spoken":"\u3057"},{"written":"\u3001","confidence":0.45,"starttime":5434,"endtime":5562,"spoken":"_"},{"written":"\u8c4a\u304b","confidence":1.00,"starttime":5562,"endtime":5994,"spoken":"\u3086\u305f\u304b"},{"written":"\u306a","confidence":1.00,"starttime":5994,"endtime":6090,"spoken":"\u306a"},{"written":"\u672a\u6765","confidence":1.00,"starttime":6090,"endtime":6490,"spoken":"\u307f\u3089\u3044"},{"written":"\u3092","confidence":1.00,"starttime":6490,"endtime":6554,"spoken":"\u3092"},{"written":"\u5275\u9020","confidence":0.93,"starttime":6554,"endtime":7050,"spoken":"\u305d\u3046\u305e\u3046"},{"written":"\u3057\u3066","confidence":0.99,"starttime":7050,"endtime":7210,"spoken":"\u3057\u3066"},{"written":"\u3044\u304f","confidence":1.00,"starttime":7210,"endtime":7418,"spoken":"\u3044\u304f"},{"written":"\u3053\u3068","confidence":1.00,"starttime":7418,"endtime":7690,"spoken":"\u3053\u3068"},{"written":"\u3092","confidence":1.00,"starttime":7690,"endtime":7722,"spoken":"\u3092"},{"written":"\u76ee\u6307\u3057","confidence":0.76,"starttime":7722,"endtime":8090,"spoken":"\u3081\u3056\u3057"},{"written":"\u307e\u3059","confidence":0.76,"starttime":8090,"endtime":8506,"spoken":"\u307e\u3059"},{"written":"\u3002","confidence":0.82,"starttime":8506,"endtime":8794,"spoken":"_"}],"confidence":0.998,"starttime":250,"endtime":8794,"tags":[],"rulename":"","text":"\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8\u30fb\u30e1\u30c7\u30a3\u30a2\u306f\u3001\u4eba\u3068\u6a5f\u68b0\u3068\u306e\u81ea\u7136\u306a\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3057\u3001\u8c4a\u304b\u306a\u672a\u6765\u3092\u5275\u9020\u3057\u3066\u3044\u304f\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002"}],"utteranceid":"20220602/14/018122d637320a301bc194c9_20220602_141433","text":"\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8\u30fb\u30e1\u30c7\u30a3\u30a2\u306f\u3001\u4eba\u3068\u6a5f\u68b0\u3068\u306e\u81ea\u7136\u306a\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3057\u3001\u8c4a\u304b\u306a\u672a\u6765\u3092\u5275\u9020\u3057\u3066\u3044\u304f\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002","code":"","message":""}
認識結果に含まれる日本語は UTF-8 を Unicode エスケープした形式です。お使いの開発言語に備わる JSON パーサーなどで、簡単に元にもどせます。ここでは jq
コマンドを使って変換します。
curl -F a=@test.wav "https://acp-api.amivoice.com/v1/recognize?d=-a-general&u=<APPKEY>" | jq
今度は、認識結果の日本語が読めるような形式で、かつ、インデントつきで表示されるはずです。結果に含まれるtext
を探してください。ここに音声を書き起こした結果があります。
"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。"
以下はレスポンスの完全な例です。文字起こしした結果だけではなく、単語単位の結果や音声時間、信頼度などの情報も得られます。詳細は、音声認識の結果を参照してください。
レスポンス
{
"results": [
{
"tokens": [
{
"written": "アドバンスト・メディア",
"confidence": 1,
"starttime": 522,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ"
},
{
"written": "は",
"confidence": 1,
"starttime": 1578,
"endtime": 1866,
"spoken": "は"
},
{
"written": "、",
"confidence": 0.72,
"starttime": 1866,
"endtime": 2026,
"spoken": "_"
},
{
"written": "人",
"confidence": 1,
"starttime": 2026,
"endtime": 2314,
"spoken": "ひと"
},
{
"written": "と",
"confidence": 1,
"starttime": 2314,
"endtime": 2426,
"spoken": "と"
},
{
"written": "機械",
"confidence": 1,
"starttime": 2426,
"endtime": 2826,
"spoken": "きかい"
},
{
"written": "と",
"confidence": 1,
"starttime": 2826,
"endtime": 2938,
"spoken": "と"
},
{
"written": "の",
"confidence": 1,
"starttime": 2938,
"endtime": 3082,
"spoken": "の"
},
{
"written": "自然",
"confidence": 1,
"starttime": 3082,
"endtime": 3434,
"spoken": "しぜん"
},
{
"written": "な",
"confidence": 1,
"starttime": 3434,
"endtime": 3530,
"spoken": "な"
},
{
"written": "コミュニケーション",
"confidence": 1,
"starttime": 3530,
"endtime": 4378,
"spoken": "こみゅにけーしょん"
},
{
"written": "を",
"confidence": 1,
"starttime": 4378,
"endtime": 4442,
"spoken": "を"
},
{
"written": "実現",
"confidence": 1,
"starttime": 4442,
"endtime": 4922,
"spoken": "じつげん"
},
{
"written": "し",
"confidence": 1,
"starttime": 4922,
"endtime": 5434,
"spoken": "し"
},
{
"written": "、",
"confidence": 0.45,
"starttime": 5434,
"endtime": 5562,
"spoken": "_"
},
{
"written": "豊か",
"confidence": 1,
"starttime": 5562,
"endtime": 5994,
"spoken": "ゆたか"
},
{
"written": "な",
"confidence": 1,
"starttime": 5994,
"endtime": 6090,
"spoken": "な"
},
{
"written": "未来",
"confidence": 1,
"starttime": 6090,
"endtime": 6490,
"spoken": "みらい"
},
{
"written": "を",
"confidence": 1,
"starttime": 6490,
"endtime": 6554,
"spoken": "を"
},
{
"written": "創造",
"confidence": 0.93,
"starttime": 6554,
"endtime": 7050,
"spoken": "そうぞう"
},
{
"written": "して",
"confidence": 0.99,
"starttime": 7050,
"endtime": 7210,
"spoken": "して"
},
{
"written": "いく",
"confidence": 1,
"starttime": 7210,
"endtime": 7418,
"spoken": "いく"
},
{
"written": "こと",
"confidence": 1,
"starttime": 7418,
"endtime": 7690,
"spoken": "こと"
},
{
"written": "を",
"confidence": 1,
"starttime": 7690,
"endtime": 7722,
"spoken": "を"
},
{
"written": "目指し",
"confidence": 0.76,
"starttime": 7722,
"endtime": 8090,
"spoken": "めざし"
},
{
"written": "ます",
"confidence": 0.76,
"starttime": 8090,
"endtime": 8506,
"spoken": "ます"
},
{
"written": "。",
"confidence": 0.82,
"starttime": 8506,
"endtime": 8794,
"spoken": "_"
}
],
"confidence": 0.998,
"starttime": 250,
"endtime": 8794,
"tags": [],
"rulename": "",
"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。"
}
],
"utteranceid": "20220602/14/018122d65d370a30116494c8_20220602_141442",
"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。",
"code": "",
"message": ""
}
音声認識エンジンの変更
クエリパラメータのd=-a-general
の部分は、音声認識エンジンの指定です。-a-general
は、会話_汎用エンジンを指定していることになります。
例えば、-a-medgeneral
に変更すると、医療用語に強い会話_医療汎用エンジンを使って書き起こしできます。利用可能なエンジンの一覧は音声認識エンジンを参照してください。
curl https://acp-api.amivoice.com/v1/recognize \
-F d=-a-medgeneral \
-F u={APP_KEY} \
-F a=@test.wav
次のステップ
- ここで利用した、AmiVoice API の同期 HTTP インタフェース も含めて、AmiVoice API を使って音声を文字起こしする方法は、利用ガイドで説明しています。
- 利用ガイドの中で、特にリクエスト時に設定できるパラメータについては、リクエストパラメータ、レスポンスの詳細については音声認識の結果、AmiVoice API の非同期 HTTP インタフェース については、同期 HTTP インターフェースを参照してください。
- また、API リファレンスは、同期 HTTP インタフェースを参照してください。
- HTTP インタフェース を利用する際の通信処理や手順をクラスライブラリ化し、音声認識アプリケーションに必要なインタフェースを実装するだけで簡単に音声認識アプリケーションを作成できるクライアントライブラリ (
Hrp
)を提供しています。まずはサンプルプログラム HrpTesterを動かしてみてください。Hrp クライアントライブラリのインタフェース仕様については、クライアントライブラリの Hrp(HTTP インタフェース クライアント) を参照してください。