はじめに
iPhoneの標準アプリであるボイスメモですが、使い勝手も良いため、会議での議事録作成のためや語学レッスンなんかで使っている方も多いかと思います。議事録作成で使う場合、文字起こしを手動で行うのは大変なため、自動でできると良いですね。
そこで、Google Speech APIで音声のテキスト化を行ってみます。また、GCPのWebコンソールは使わずにCLIだけでやってみます。GCPのアカウントは事前に用意しておいてください。
ちなみに、iPhoneのマイクは本体の底の方にあるので、ボイスメモ録音するときは向きに注意すると良いです。
音声ファイルの変換
iOSで録音したボイスメモのファイルはm4a
拡張子になっていますが、このままではGoogle Speech APIで扱うことができないので、flac
ファイルに変換します。
$ ffmepg -i memo.m4a memo.flac
なお、ffmepgは
$ brew install ffmpeg
でインストールできます。
また、Convert audio to the FLAC formatではオンライン上で変換できます。
GCPの準備
Google Cloud SDK のインストール
CLIでGCPを操作するために、Google Cloud SDKをインストールします。
$ brew cask install google-cloud-sdk
次に、初期設定を行います。
$ gcloud init
You must log in to continue. Would you like to log in (Y/n)?
と聞かれたら、y
を押すとWebブラウザが開くので、GCPのアカウントでログインします。
次に、どのプロジェクトを使うか聞かれますが、今回は新規プロジェクトを用意します。
Pick cloud project to use: [1] xxxx [2] Create a new project Please enter numeric choice or text value (must exactly match list item): 2
プロジェクトの作成と設定
今回、用いるプロジェクトを作成します。プロジェクト名はグローバルで一意である必要があります。
$ gcloud projects create project-hogehoge
作成できたか確認してみます。
$ gcloud projects list PROJECT_ID NAME PROJECT_NUMBER project-hogehoge project-hogehoge 1234567890 ...
作成したプロジェクトをデフォルトにします。
$ gcloud config set project project-hogehoge
Storage へアップロード
bucketの作成
ファイルをアップロードする前に、bucketを作成します。bucket名もグローバルで一意である必要があります。
$ gsutil mb -c regional -l asia-northeast1 gs://bucket-hogehoge
もし、存在する名前の場合、409エラーになります。
ServiceException: 409 Bucket bucket-hogehoge already exists.
作成できたか確認してみます。
$ gsutil ls
gs://bucket-hogehoge/
ファイルのアップロード
変換したボイスメモのflacファイルを、作成したbucketにアップロードします。
$ gsutil cp memo.flac gs://bucket-hogehoge/memo.flac
アップロードできたか確認してみます。
$ gsutil ls gs:///bucket-hogehoge/
gs://bucket-hogehoge/memo.flac
Google Speech API を使う
Speech APIの実行
それでは、準備が整いましたので、Google Speech APIを使ってみます。
$ gcloud ml speech recognize-long-running 'gs://bucket-hogehoge/memo.flac' --language-code='ja-JP' --async
初めてGoogle Speech API を使う場合は、APIを有効化するか聞かれるので、有効化します。
API [speech.googleapis.com] not enabled on project [1234567890]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y
その後、IDのような数字が返ってくるので控えておきます。
Check operation [1234567890] for status. { "name": "1234567890" }
結果の確認
先程の数字を入力すると、結果を確認できます。
$ gcloud ml speech operations describe 1234567890
{ "done": true, ... "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [ { "alternatives": [ { "confidence": 0.8733476, "transcript": "\u30dc\u30a4\u30b9\u30e1\u30e2\u306e\u6587\u5b57\u8d77\u3053\u3057\u3092\u81ea\u52d5\u7684\u306b\u884c\u3046" } ...
処理には音声の長さに応じて時間がかかります。処理が完了していると、json
形式で信頼度とともに結果が返ってきます。
$ gcloud ml speech operations describe 1234567890 | jq -r '.response.results[].alternatives[].transcript' ボイスメモの文字起こしを自動的に行う
jqを使うと、jsonをパースできUnicodeもデコードしてくれます。結果が複数ある場合は、複数表示します。
なお、結果はダミーですが、漢字にも変換してくれます。
まとめ
Google Speech APIを使ってボイスメモのテキスト変換を行ってみました。
結果は記載しませんでしたが、普通の会話を録音したものは結構微妙な精度で、議事録の自動作成には少し遠いなと感じました。朗読のようにはっきりゆっくり読めば、なかなかの精度で返してくれました。