背景
ラジオ番組の文字起こしを自分でもやってみたくて、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
サービスアカウントキーの登録
以下のようにサービスアカウントキーを作成して、ダウンロードします。サービスアカウントキーを作成は以下の手順が詳しいです。
アプリの起動方法やその前準備は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 エンタープライズ設計ガイド
- 作者: 遠山陽介,深津康行,中庄谷哲平,小島仁志
- 出版社/メーカー: 日経BP社
- 発売日: 2018/05/17
- メディア: 単行本
- この商品を含むブログ (1件) を見る
プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで
- 作者: 阿佐志保,中井悦司
- 出版社/メーカー: 翔泳社
- 発売日: 2017/06/02
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る