y-ohgi's blog

TODO: ここになにかかく

Cloud Speech APIでPodcastの文字起こし

TL;DR

  • Podcastの文字起こしをしたい
  • GCPのCloud Speech APIで試してみる
  • 精度的にはまだダメそう

ことのはじまり

f:id:y-ohgi:20190106194031p:plain

某所でPodcastの文字起こしをしたい気運が高まり、ちょうどそこに居たPodcast( https://ningengaheta.me )をやってる人( @akazunoma )から遊ぶ許可をもらう

何を使うか決める

とりあえずAWSGCPを使おうと思ったものの、AWSはまだ日本語からのテキスト起こしが未対応で断念。
消去法でCloud Speech APIを使うことにした。

https://cloud.google.com/speech-to-text/

Cloud Speech APIを使う

1. 環境を準備する

  • Cloud Shellで全て行う。
  • Cloud Speech APIの有効化
    • $ gcloud services enable speech.googleapis.com
  • Cloud Storageの作成
    • $ gsutil mb -c regional -l ap-northeast1 gs://<YOUR BUCKET>

2. Podcastデータを用意

Podcastのmp3を落としてきてCloudStorageへ格納する。
Cloud Speech APIflac形式かつモノラルである必要もあるためその下処理も行う。

$ sudo apt-get install -y lame ffmpeg
$ curl -O https://ningengaheta.me/audio/003.mp3
# ステレオからモノラルへ変換
$ lame --decode 003.mp3 - | lame -m m -V2 - mono.mp3
# mp3からflacへ変換
$ ffmpeg -i mono.mp3 output.flac
# Cloud Storageへアップロード
$ gsutil cp ./output.flac gs://<YOUR BUCKET>/output.flac

3. Cloud Speech APIで文字起こし

CLIからCloud Speech APIを呼び出して確認

$ gcloud ml speech recognize-long-running 'gs://<YOUR BUCKET>/output.flac' \
    --language-code='ja-JP' \
    --sample-rate=44100 \
    --encoding=flac \
    --async
Check operation <OPERATION ID> for status.
{
  "name": "<OPERATION ID>"
}
$ gcloud ml speech operations describe "<OPERATION ID>" > output.json
$ cat output.json | jq -r '.results[].alternatives[0].transcript'

日本語のような何かが生み出された f:id:y-ohgi:20190106194048p:plain

中の人から

f:id:y-ohgi:20190106194121p:plain

最後に

そのうちまた試してどれぐらい精度が上がるのか見てみたいですね