rebuild.fmでも話題に上がっていた whisper.cpp で文字起こしを試してみる (M2 MacBook Air)
はじめに
rebuildでおなじみの宮川さんが以前呟いていたwhisper.cppがずっと気になっていた
Yes, this whisper C++ port runs much faster on Apple Silicon Mac 🚀 Seems to be able to transcribe Japanese text with medium model for about 4x (10min length in 2.5 mins) https://t.co/ll7hEoDOxo pic.twitter.com/ktyxuNuvan
— Tatsuhiko Miyagawa (@miyagawa) November 15, 2022
そんななか rebuild.fm でも話題に上がっていて、これはもう自分でも試さねばと思い、ラジオを聞き終えてからM2 MacBook Airを開いた。
というわけで、今回のポストはwhisper.cppを試してみたポスト
少し長くなるので目次を用意した。
目次
- はじめに
- 目次
- whisper.cppのインストールとサンプルを解析
- whisper.cppが読み取ることができる音声データは16kHzのWAVファイルのみ
- M2 MacBook Air (Apple Silicon)にffmpegをインストールする
- Beaglesの楽曲を whisper.cpp で読み取らせて、歌詞の文字起こしを試してみる
- 音声ファイルの読み取りもバッチリ
- 使ってみた感想
- (余談)試行錯誤のあと
whisper.cppのインストールとサンプルを解析
リポジトリは以下。
ちなみにWASM版も用意されていて、気楽に試したいときはこちらがおすすめ?
私は通常版を利用する。
以下インストール備忘録。
なお、環境はM2 MacBook Air。macOS 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 Pro
や GarageBand
などのDAWソフトを使ってサクッと変換できないかなと思い色々試していたが、結局できないようだった。
そして、16kHz wavファイルへの変換には ffmpeg
を用いるのが一番早そうというのがわかった。
M2 MacBook Air (Apple Silicon)にffmpegをインストールする
最初 brew
コマンドで ffmpeg
をインストールしようとしたが、これは残念ながら失敗。
その後インターネットで検索してみると、ffmpegをインストールするのに別のライブラリを入れてから brew
でインストールを試みたり、予め誰かがビルドしたものをダウンロードして利用するなどの記述を見かけた。
ffmpegの利用シーンとして特殊なビルドを必要とするケースもあるのかもしれないが、そもそも私は ffmpeg
よく分からないし、人がビルドしたものを利用するのも少し抵抗があったので、自前でソースを持ってきてビルドすることにした。
結論から書くとこのやり方で自分がやりたい変換(16kHzのwavファイルへの変換)は実現できた。
だが、上にも書いたようにもう少し込み入った変換を行う必要がある場合は、これでは不十分かもしれないということだけ書き残しておく。
というわけで、M2 MacBook Airで ffmpeg
を自前でビルドしてインストールした際のメモを以下に貼る。
# 作業用ディレクトリにてソースコードをクローン 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』という楽曲の文字起こしを実行してみたいと思う。
[宣伝]
Beaglesの楽曲はApple Musicを始め、サブスク系の音楽サービスで聴くことができるのでぜひぜひ聴いてみてください。
なお、以下のアルバムはよなよなエールでおなじみのヤッホーブルーイングのビールをテーマにした楽曲群、というコンセプトで作られています。
Beaglesの楽曲をまずは whisper.cpp で読み取らせるために16kHzのwavファイルに変換する
# パスは適宜読み替えてください ~/tools/ffmpeg -i blueblue.wav -ar 16000 -ac 1 -c:a pcm_s16le blueblue16.wav
追記:ffmpeg.wasmを用いて、簡単に16Khzのwavファイルに変換するツールを作りました
上記READMEを参考にしてローカルサーバを起動し、そちらでWebUIを用いて16kHzのwavファイルに変換可能です。
追記終わり。
次に下記のコマンドを実行する。
./main -m models/ggml-small.bin -f blueblue16.wav -l ja
すると、以下のような結果がコンソール上に出てくる。
一部うまく読み取れていない箇所もあるが、ここはモデルを一段上のものに上げれば改善するかもしれないし、ただ単に私の滑舌が悪くてモデルがうまく認識できていないだけかもしれない。
だが、いずれにせよ楽曲ファイルを読み込んで歌詞の文字起こしをするというのは whisper.cpp で実現可能ということがわかった。
音声ファイルの読み取りもバッチリ
ちなみに当然ながら音声ファイルの読み取りもバッチリであった。
以下は base
と small
、2つのモデルで認識させた際の比較
baseモデルで音声を認識させた場合
base
モデルだと毎朝と喋っているところが「まやさ」になっている
smallモデルで音声を認識させた場合
small
にすると正常に言葉を認識できている模様
使ってみた感想
rebuild.fmの中でも宮川さんが話していたが、本当にかんたんにセットアップできて、すぐに文字起こしが出来てしまう。おまけに高速 & 高性能。という感じで使っていて感動した。
実際に利用する際にはライセンス周りは色々と確認する必要があるが、いわゆるAIを用いたツールというのも本当に身近になってきたんだなと感じる今日でした。
※GitHubのページを見る限りだと whisper.cpp 自体はMITライセンスのようだが、モデルなどは異なるかもしれない
(余談)試行錯誤のあと
ちなみにここまで行くのに割と結構試行した。
その記録はTwitterに残っている。
whisper.cpp を M1 MacBook Air で試そうと思ったのだが、16kHzの.wavファイルに変換するところでハマった。ffmpeg使えばいい感じに変換できそうだけど、brewでインストールしようとすると失敗するので、ここらへんは次回に持ち越し
— Yuki Shindo (@shinshin86) November 24, 2022
whisper.cppで音楽ファイル読み込めないと呟いたけど、これは自分の使い方が間違っていただけだった。
— Yuki Shindo (@shinshin86) November 25, 2022
modelはsmallを利用して、言語オプションを日本語で設定することで問題なく読み込めた! https://t.co/GRoR0Cfifu pic.twitter.com/DI6nBUv964