whisper.cppによる文字起こし
Page content
目的
OpenAIがリリースしている音声認識モデル「whisper」なるものがある。しかしこれを動かすには高価なGPUが必要であったが、c++に移植し、CPUのみでも動作する「whisper.cpp」という情報を得た。 ラズベリーパイでも動作するようなことが書いてあったので試してみる。
Introducing Whisper
whisper.cpp
準備
■ ソースコード入手
$ git clone https://github.com/ggerganov/whisper.cpp.git
$ cd whisper.cpp/
■ ビルド
$ make
■ モデルダウンロード
モデルは使用するメモリ量などに応じて複数用意されている。2023年2月時点では下記。
Model | Disk | Mem |
---|---|---|
tiny | 75 MB | ~125 MB |
base | 142 MB | ~210 MB |
small | 466 MB | ~600 MB |
medium | 1.5 GB | ~1.7 GB |
large | 2.9 GB | ~3.3 GB |
今回はbaseをダウンロードする。
$ bash ./models/download-ggml-model.sh base
録音ファイルの文字起こし
■ 音声録音
whisper.cppは16kHzのwavファイルのみ対応らしい、下記コマンドで対応した形式で録音する。
録音についてはこちら を参照下さい。
$ arecord -D plughw:0,0 -d 5 -f S16_LE -r 16000 ./samplea/test.wav
■ 文字起こし実行
録音したファイルとbaseモデルを指定して実行する。「-l ja」は日本語指定。因みにテストでは「あ い う」と喋ってみた。
$ ./main -m models/ggml-base.bin -f samples/test.wav -l ja
~~
[00:00:00.000 --> 00:00:04.000] かひう。
whisper_print_timings: fallbacks = 1 p / 0 h
whisper_print_timings: load time = 3760.19 ms
whisper_print_timings: mel time = 110.22 ms
whisper_print_timings: sample time = 136.54 ms / 37 runs ( 3.69 ms per run)
whisper_print_timings: encode time = 19867.14 ms / 1 runs (19867.14 ms per run)
whisper_print_timings: decode time = 1523.86 ms / 33 runs ( 46.18 ms per run)
whisper_print_timings: total time = 25451.24 ms
5秒の音声データを大体25秒で処理完了、ただ認識結果は微妙…