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秒で処理完了、ただ認識結果は微妙…