at backyard

Color my life with the chaos of trouble.

rebuild.fmでも話題に上がっていた whisper.cpp で文字起こしを試してみる (M2 MacBook Air)

はじめに

rebuildでおなじみの宮川さんが以前呟いていたwhisper.cppがずっと気になっていた

そんななか rebuild.fm でも話題に上がっていて、これはもう自分でも試さねばと思い、ラジオを聞き終えてからM2 MacBook Airを開いた。

rebuild.fm

というわけで、今回のポストはwhisper.cppを試してみたポスト

少し長くなるので目次を用意した。

目次

whisper.cppのインストールとサンプルを解析

リポジトリは以下。

github.com

ちなみにWASM版も用意されていて、気楽に試したいときはこちらがおすすめ?

github.com

私は通常版を利用する。

以下インストール備忘録。

なお、環境はM2 MacBook AirmacOS Montereyの 12.6.1

# clone
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp

# Whisperのモデルをggml形式に変換したものを1つダウンロード (READMEに倣って実行)
# 後述するが、日本語を読み取らせたい場合 base.en では対応していない。その場合、baseなど別のモデルを利用する
bash ./models/download-ggml-model.sh base.en


# makeコマンドを実行する
make

# カレントにmainファイルができる。これが実行バイナリ
# 試しにsamplesディレクトリにある音声ファイル試してみる
./main -f samples/jfk.wav

実行は一瞬で終わる。
実行結果に以下のようなログがあり、これが文字起こしされたテキストとなる。

[00:00:00.000 --> 00:00:11.000]   And so my fellow Americans, ask not what your country can do for you, ask what you can do for your country.

whisper.cppが読み取ることができる音声データは16kHzのWAVファイルのみ

さてここで一瞬脇道にそれるが、 whisper.cppが読み取ることができる音声データは16kHzのWAVファイルのみとなっている。

16kHzではない音声データを読み込まようとした場合、以下のようなエラーメッセージが表示される。

./main: WAV file 'blueblue.wav' must be 16 kHz

この16kHzへの変換だが、最初 Logic ProGarageBand などのDAWソフトを使ってサクッと変換できないかなと思い色々試していたが、結局できないようだった。

そして、16kHz wavファイルへの変換には ffmpeg を用いるのが一番早そうというのがわかった。

M2 MacBook Air (Apple Silicon)にffmpegをインストールする

最初 brew コマンドで ffmpeg をインストールしようとしたが、これは残念ながら失敗。

その後インターネットで検索してみると、ffmpegをインストールするのに別のライブラリを入れてから brew でインストールを試みたり、予め誰かがビルドしたものをダウンロードして利用するなどの記述を見かけた。

ffmpegの利用シーンとして特殊なビルドを必要とするケースもあるのかもしれないが、そもそも私は ffmpeg よく分からないし、人がビルドしたものを利用するのも少し抵抗があったので、自前でソースを持ってきてビルドすることにした。

結論から書くとこのやり方で自分がやりたい変換(16kHzのwavファイルへの変換)は実現できた。

だが、上にも書いたようにもう少し込み入った変換を行う必要がある場合は、これでは不十分かもしれないということだけ書き残しておく。

というわけで、M2 MacBook Airffmpeg を自前でビルドしてインストールした際のメモを以下に貼る。

# 作業用ディレクトリにてソースコードをクローン
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg

# ビルドとコンパイル
# prefixはお好みで。私はHOME以下にした。これをつけないと、make install時に管理者権限がなくて失敗するようだった(たぶんsudoをつければそこはOKかも)
./configure --prefix=~/tools
make
make install

# arm64 (Apple Silicon) architectureでffmpegがインストールされたことを確認
./ffmpeg -version

これで ffmpeg を利用する準備は整った。

Beaglesの楽曲を whisper.cpp で読み取らせて、歌詞の文字起こしを試してみる

ここからが本番。

whisper.cppを使って日本語楽曲の歌詞の文字起こしをさせてみたいと思う。

whisper.cppで利用できるmodel

whisper.cppではあらかじめ複数のモデルが利用できる。
(以下で利用できるモデルの種類が確認できる)

https://github.com/ggerganov/whisper.cpp/tree/master/models

今回は small を使って行きたいと思う。
なお、日本語など英語以外の言語を読み取らせたい場合は .en と末尾についているモデル以外を選ぶ必要があるようだ。
( .en は英語特化のモデルなのかな?)

small のモデルのダウンロードは whisper.cpp のルートで以下を実行すればOK

bash ./models/download-ggml-model.sh small

whisper.cppで読み取らせるために16kHzのwavファイルに変換する

今回はBeaglesの『Blue blue』という楽曲の文字起こしを実行してみたいと思う。

www.youtube.com

[宣伝] Beaglesの楽曲はApple Musicを始め、サブスク系の音楽サービスで聴くことができるのでぜひぜひ聴いてみてください。
なお、以下のアルバムはよなよなエールでおなじみのヤッホーブルーイングのビールをテーマにした楽曲群、というコンセプトで作られています。

music.apple.com

Beaglesの楽曲をまずは whisper.cpp で読み取らせるために16kHzのwavファイルに変換する

# パスは適宜読み替えてください
~/tools/ffmpeg -i blueblue.wav -ar 16000 -ac 1 -c:a pcm_s16le blueblue16.wav

追記:ffmpeg.wasmを用いて、簡単に16Khzのwavファイルに変換するツールを作りました

github.com

上記READMEを参考にしてローカルサーバを起動し、そちらでWebUIを用いて16kHzのwavファイルに変換可能です。

追記終わり。

次に下記のコマンドを実行する。

./main -m models/ggml-small.bin  -f blueblue16.wav -l ja

すると、以下のような結果がコンソール上に出てくる。

Beaglesのblue blueの歌詞

一部うまく読み取れていない箇所もあるが、ここはモデルを一段上のものに上げれば改善するかもしれないし、ただ単に私の滑舌が悪くてモデルがうまく認識できていないだけかもしれない。

だが、いずれにせよ楽曲ファイルを読み込んで歌詞の文字起こしをするというのは whisper.cpp で実現可能ということがわかった。

音声ファイルの読み取りもバッチリ

ちなみに当然ながら音声ファイルの読み取りもバッチリであった。

以下は basesmall 、2つのモデルで認識させた際の比較

baseモデルで音声を認識させた場合

base モデルだと毎朝と喋っているところが「まやさ」になっている

smallモデルで音声を認識させた場合

smallにすると正常に言葉を認識できている模様

使ってみた感想

rebuild.fmの中でも宮川さんが話していたが、本当にかんたんにセットアップできて、すぐに文字起こしが出来てしまう。おまけに高速 & 高性能。という感じで使っていて感動した。

実際に利用する際にはライセンス周りは色々と確認する必要があるが、いわゆるAIを用いたツールというのも本当に身近になってきたんだなと感じる今日でした。

GitHubのページを見る限りだと whisper.cpp 自体はMITライセンスのようだが、モデルなどは異なるかもしれない

(余談)試行錯誤のあと

ちなみにここまで行くのに割と結構試行した。
その記録はTwitterに残っている。