LEKU ONA

エンジニアしたり野鳥を見たりマンガを描いたり

スマホで録った音源からテキスト化に挑戦

結果を先にいうと、求める精度ではなかったのだけど
もったいないので試した経緯だけ残しておきます。

音声ファイルを用意する

  • iPhoneの「ボイスメモ」で録った音声(1時間ぐらい)をAirDropMacに送る
  • m4a から wav に変換する
afconvert -f WAVE -d LEI16 -c 1  XXXXX.m4a XXXXX.wav
  • 実際の音声のはじめ部分
A: よろしくおねがいします
B: よろしくおねがいします
A: といってもどうやりましょうね


Google Speech-to-Text を試す

$export GOOGLE_APPLICATION_CREDENTIALS = XXXXX.json
  • 音声ファイルをGCSにあげておく
$ gsutil cp XXXXX.wav gs://bucketsXXX/XXXXX.wav
  • サンプルコードを手元に落とす
$ git clone https://github.com/googleapis/python-speech.git
  • 仮想環境作成し必要なモジュール入れる
$ virtualenv env
$ source env/bin/activate
$ pip install -r requirements.txt
  • サンプルコードに手を加え
-        sample_rate_hertz=16000,
-        language_code="en-US",
-        model=model,
+        sample_rate_hertz=48000,
+        language_code="ja-JP",
+        #model=model,
  • GCS上の音声ファイルをテキスト化してみる
$ python transcribe_model_selection.py gs://bucketsXXX/XXXXX.wav > interview.txt
  • 結果
Waiting for operation to complete...
--------------------
First alternative of result 0
Transcript: お願いします
--------------------
First alternative of result 1
Transcript: 言ってももうやりましょうね
--------------------
・・・・・


Google Speech API を試す

  • 非同期で処理
$ gcloud ml speech recognize-long-running 'gs://bucketsXXX/XXXXX.wav' --language-code='ja-JP' --sample-rate=48000 --async

Check operation [operations/XXXXXXXXXXXXX] for status.
{
  "name": "XXXXXXXXXXXXX"
}
  • 下記コマンドで処理状況を確認。
    終わっていれば progressPercent が100になりresponseにテキストが返る
$ gcloud ml speech operations describe XXXXXXXXXXXXX


{
  "done": true,
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "lastUpdateTime": "2021-09-XXT09:15:37.404790Z",
    "progressPercent": 100,
    "startTime": "2021-09-XXT08:59:39.288851Z",
    "uri": "gs://bucketsXXX/XXXXX.wav"
  },
  "name": "XXXXXXXXXXXXX",
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "confidence": 0.8462801,
            "transcript": "お願いします"
          }
        ]
      },
      {
        "alternatives": [
          {
            "confidence": 0.9102794,
            "transcript": "言ってももうやりましょうね"
          }
        ]
      },
・・・・・
}
  • 結果は同じである


Amazon Transcribeを試す

f:id:background-color:20210905110837j:plain:w400

  • こちらのチュートリアルに沿って画面からアップロードするだけなので簡単
    処理完了後、結果はjsonでダウンロードできる

aws.amazon.com

  • 結果
{"jobName":"sample-transcription-job","accountId":"XXXXXXXXXX","results":{"transcripts":[{"transcript":"よろしくお願いしますふーんって・・・・・}


Googleドキュメントの音声入力を試す

  • ググるとよく出てきた方法
    Virtual Audio Cableなど仮想オーディオで入力を出力に回して、音声ファイルを再生しながら音声入力する方法
  • 結果
言ってももうやりましょうね こっちこそ・・・・・
  • 途中で止まるので無理だった


結果

テキスト化したものは精度的に使えず、手打ちしたのであった‥


精度原因を探る

  • インタビュー形式の2名の音声だったのだが、1名の音声のほうが大きく入っており、そちらばかりテキスト化されていた
    • 一人だけの音声なら、もっと精度が良かったのでは
  • ずっと話し続けていて区切りのない音声だった
    • 区切りが明確な発表形式だったら精度が違ったかもしれない