Whisper で音声ファイルを文字起こし

はじめに

感想系のブログ記事は、たまに次のような手順で書くことがある。

  1. iPhone のボイスメモで考えていることをダラダラ話して録音
  2. 文字起こし
  3. 修正してブログ記事にする

ただ、2 の文字起こしが面倒。文字起こしアプリをいくつか試したけど、どれも残念な精度だった。

そんなとき、文字起こし AI の「Whisper」を知った。巷の評判は良さそう。ローカルでも試せるみたい。早速挑戦してみた。

Miniconda インストール

Python と、機械学習で使うパッケージが必要なので、必要最小限インストールできる Miniconda にした。

docs.conda.io

インストールフォルダと、中の Scripts フォルダにはパスを通す。

PyTorch インストール

NVIDIAGPU は持ってないので、CPU 版の PyTorch をインストールする。

conda install pytorch torchvision torchaudio cpuonly -c pytorch

ffmpeg インストール

オーディオファイルを Python から扱うので、ffmpeg をインストールする。

conda install ffmpeg -c conda-forge

Whisper インストール

pip install git+https://github.com/openai/whisper.git

ffmpeg 本体インストール

ffmpegPython のパッケージだけではダメで、本体もインストールする必要があった。

https://ffmpeg.org/download.html

ffmpeg.exe の場所にはパスを通しておく。

Python

コマンドライン引数で指定したファイルを文字起こしするスクリプトを書いてみた。

日本語である程度精度を出したいので、モデルは medium にしてみた。large が最高精度だけど、さすがにメモリが足りなさそうで。

import sys
import whisper

def transcribe(file_path):
  model = whisper.load_model("medium")
  result = model.transcribe(file_path, verbose=True, language="ja")

if __name__ == "__main__":
  args = sys.argv
  if 2 <= len(args):
    transcribe(args[1])
  else:
    print("Arguments are too short. Ex: python test.py <file_path>")

実行結果

「福はこび」の感想をボイスメモに録音したものを文字起こししてみた。

[00:00.000 --> 00:06.000] 福箱広場 名の浜にある福箱広場
[00:06.000 --> 00:09.000] ピンって行ってきました
[00:10.000 --> 00:14.000] 博多には超人気店がある
[00:14.000 --> 00:19.000] 一層の神経大津
[00:19.000 --> 00:22.000] 町から中華
[00:22.000 --> 00:25.000] オープン当初は凄い行列だったらしいんですけど
[00:25.000 --> 00:30.000] 時間も経って大分行列落ち着いたようで
[00:31.000 --> 00:34.000] 夕方でしたけどすぐ入りました
[00:36.000 --> 00:40.000] 今醤油ラーメンとチャーハンのセット
[00:40.000 --> 00:43.000] チェーンを合わせて
[00:43.000 --> 00:46.000] 醤油ラーメンは焦がし醤油の
[00:46.000 --> 00:50.000] 香ばしさとほろみがさ
[00:50.000 --> 00:54.000] 元々の醤油の甘さと
[00:54.000 --> 00:57.000] 甘さみたいに
[00:59.000 --> 01:02.000] よそよりも美味しかったですね
[01:02.000 --> 01:06.000] 黒い醤油ラーメンというのがあると
[01:08.000 --> 01:11.000] 京都の
[01:14.000 --> 01:19.000] ノットフォーニーだったので大分経過してたんですけど
[01:19.000 --> 01:23.000] この黒い醤油ラーメンは
[01:24.000 --> 01:26.000] 美味しくいただけました
[01:26.000 --> 01:28.000] 目も縮んで
[01:28.000 --> 01:32.000] 今スタンダードが縮れ中間にもって感じて
[01:32.000 --> 01:36.000] もうちょっと長かったら良かったんですけどね
[01:36.000 --> 01:39.000] 切れやすいのしない
[01:39.000 --> 01:45.000] チャーハンはすっかりと入れて味をした味ちゃんづつで
[01:45.000 --> 01:47.000] 熱々で
[01:47.000 --> 01:48.000] 美味しかったですね
[01:48.000 --> 01:53.000] 半チャーハンのところが普通のチャーハンで売っていけそうだと
[01:53.000 --> 01:57.000] 結構玉ねぎの甘さが気渡り出たような
[01:58.000 --> 02:00.000] 印象は
[02:00.000 --> 02:02.000] 落ちました
[02:02.000 --> 02:04.000] なかなか
[02:04.000 --> 02:07.000] チャーハンも美味しかったです
[02:08.000 --> 02:10.000] そういった
[02:11.000 --> 02:15.000] ごはんの醤油と塩の二本ばしさにおらんで
[02:15.000 --> 02:19.000] 次に来たら塩を
[02:19.000 --> 02:24.000] 食べてみたいと思いました

固有名詞は怪しいけど、medium ならこんなもんかな。

おわりに

medium でも、まぁまぁの精度だった。それでも、過去に試したどの文字起こしアプリよりも精度は高い。期待通り。いや、期待以上かも。これなら実際に使えるな。