東京生まれHOUSE MUSIC育ち

悪そうな奴はだいたい友達なの?

Google Cloud Speech-to-Textを使用して文字起こしする方法


スポンサードリンク

背景

ラジオ番組の文字起こしを自分でもやってみたくて、GoogleのCloud Speech-to-Textを使用して文字起こしを実施してみました。

音声を文字にするにあたり、ノウハウ的なものがたまってきたので以下にまとめます。

音声ファイルの用意

Cloud Speech-to-Textに適したフォーマットに変換

まずは音声ファイルの用意です。ラジオ番組は持ち運びしやすいようにaac形式で保存しています。これをCloud Speech-to-Text APIで認識できる音声ファイルに変換します。

自宅で24時間稼働している録画サーバを活用します。変換に使用するのはffmpegで、以下のコマンドを使用します。

文字起こししたい箇所だけ抜き出したいので、開始時間と終了時間を入れています。

/usr/local/ffmpeg_build/bin/ffmpeg -i /recorder/After6_2018-05-31-18_00.aac  -sample_fmt s16 -ss 00:44:00 -to 01:37:00 -ac 1 flac.flac

なお、用意する音声については、以下に詳しく書いてあります。

音声エンコードの概要  |  Cloud Speech-to-Text API  |  Google Cloud

ベスト プラクティス  |  Cloud Speech-to-Text API ドキュメント  |  Google Cloud

音声ファイルをcloud storageにアップロード

音声ファイルをgoogle cloud storageにアップロードします。

golangのアプリケーションを用意する

Google Cloudが提供するSDK Shellからコマンドを入力して文字変換するのもいいのですが、手間に感じます。

そこで、以下のアプリケーションを使用します。様々な言語で提供されていますが、私はgolangを使います。

golang-samples/speech/captionasync at master · GoogleCloudPlatform/golang-samples

サービスアカウントキーの登録

以下のようにサービスアカウントキーを作成して、ダウンロードします。サービスアカウントキーを作成は以下の手順が詳しいです。

www.magellanic-clouds.com

アプリの起動方法やその前準備はREADME.mdに書いてあります。

前準備としてサービスアカウントキーをexportコマンドで登録します。

exportコマンドをターミナルで打つだけだと、コマンドだけだとログインしている間だけ有効となります。なので、再ログインしてもサービスアカウントキーを使用できるように、「.bash_profile」にも書きます。以下のようにviを使用して編集します。

vi ~/.bash_profile

export GOOGLE_APPLICATION_CREDENTIALS=パスを追加します。

アプリの書き換え

アプリに音声ファイルの定義が書き込まれています。エンコード形式、サンプリングレート、テキスト化する言語をが埋め込まれているのです。なので、コードを書き換えます。

変更前

       Config: &speechpb.RecognitionConfig{
            Encoding:        speechpb.RecognitionConfig_LINEAR16,
            SampleRateHertz: 16000,
            LanguageCode:    "en-US",
        },

変更後

       Config: &speechpb.RecognitionConfig{
            Encoding:        speechpb.RecognitionConfig_FLAC,
            SampleRateHertz: 48000,
            LanguageCode:    "ja-JP",
        },

アプリの実行

以下のようにアプリケーションを実行します。成功すれば、テキスト化された文字列が返却されます。

録音している音声時間が長いと、応答に時間がかかります。60分の音声ファイルだと、約30分ぐらいプロンプトが戻ってきません。

go run captionasync.go gs://radiosound/flac.flac

上記のコマンドはgoogle cloud storageにアップロードしたファイルを指定しています。

ローカルファイルをテキスト化するような指定することも可能なようですが、ローカルファイルをアップロードしようとすると、以下のようにサイズが大きいというエラーになってしまいます。何らかの設定が不足しているとは思うのですが、その原因を深いせずにgoogle cloud storageのファイルを処理するようにしています。

# go run captionasync.go ./test.flac
rpc error: code = InvalidArgument desc = Request payload size exceeds the limit: 10485760 bytes.
exit status 1

読点の追加

以下のサービスを利用して読点を挿入します。

読点「、」挿入システム

句点が適当だと思う場合でも読点が挿入されますが、読点があるだけでだいぶ編集が楽になります。

校正

誤字脱字を修正したり、読みやすいように編集するという作業です。

上記まではある程度自動化できますが、ここからは人間の作業です。そして、この作業に時間がかかってしまいます。

調べてみると、CIツールで構成も自動化するというようなことができるようです。どこまで自動化できるかはもう少し追及したいところです。

Google Cloud Platform エンタープライズ設計ガイド

Google Cloud Platform エンタープライズ設計ガイド