Cloud Speech APIを使って1時間くらいの長さの音声ファイルを 文字起こししようとしたら色々要件があって大変だったので残しておく
環境
- ubuntu: 16.04
- Google Cloud SDK: 216.0.0
セットアップ
https://cloud.google.com/speech-to-text/docs/quickstart-gcloud?hl=ja#top_of_page の「始める前に」を参考に、apiの有効化、
gcloud
要件
1分以上の長さのファイルであれば、おそらく
- gcs(google cloud storage)にファイルをアップロードしておく
- 実行コマンドにフラグを追加(非同期リクエスト)
--async
が必要になる
また、音声ファイルの長さは3時間以内であるなどいくつかの制約もある(参考)
1分以内の音声ファイルであれば
--async
実行コマンド
リクエスト
音声の言語は日本語、ファイル形式は
.flac
gcloud ml speech recognize-long-running \
'gs://"bucket_name"/"filename"' \
--language-code='ja-JP' --sample-rate=44100 --encoding=flac
Check operation [OPERATION_ID] for status.
{
"name": "OPERATION_ID"
}
OPERATION_ID
結果取得
結果を取得する。正常に終了していれば何回でも結果を表示できる
進捗確認
operationの進捗を確認する。終了していれば結果が返ってくる
結果は長めの
.json
output.json
gcloud ml speech operations describe "OPERATION_ID" > output.json
終了していない場合はprogressPercentが返ってくる
cat output.json
{
"metadata": {
"@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
"lastUpdateTime": "2018-09-29T16:50:33.335585Z",
"progressPercent": 38,
"startTime": "2018-09-29T16:37:38.780895Z"
},
"name": "OPERATION_ID"
}
終了している場合はresults以下に結果が入る
cat output.json
{
"done": true,
"metadata": {
"@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
"lastUpdateTime": "2018-09-29T16:55:52.102150Z",
"progressPercent": 100,
"startTime": "2018-09-29T16:53:36.856374Z"
},
"name": "OPERATION_ID",
"response": {
"@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
"results": [
{
"alternatives": [
{
"confidence": 0.93601626,
"transcript": "6\u670819\u65e5
...
結果が返るまで待つ(ポーリング(polling)形式)
operationの進捗は興味がなくて、とりあえず結果がほしいときはこっち
gcloud ml speech operations wait "OPERATION_ID" > output.json
Waiting for operation ["OPERATION_ID"] to complete...⠶
結果が返ってくるまで、実行中になる こちらの結果は、progressPercentの情報は返ってこない
cat output.json
{
"@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
"results": [
{
"alternatives": [
{
"confidence": 0.93601626,
"transcript": "6\u670819\u65e5
...
結果からテキスト部分を抽出する
返ってくる値はjson形式になっているので、テキスト部分を抜き出したい
https://konklone.io/json/ このサイトでjsonを変換するとconfidenceとtranscriptをいい感じにcsvへ変換された
ラジオを録音したものを試したが8割程度あっていた。あとは、文章単位で区切られていないので、どうにかして区切っておきたい