概要
M2 mac mini 上で openapi-whisper を動かして音声解析してみました
音声ファイルが大きい場合は素直に mlx 経由で実行しましょう
環境
- macOS 14.2.1 (M2 pro mac mini)
- Python 3.11.6
- openai-whisper 1.1.10
- MLX 0.0.10
インストール
- pipenv install openai-whisper
サンプルコード
import whisper
# モデルは large を使用
model = whisper.load_model("large")
# 解析
result = model.transcribe("/path/to/audio.m4a")
# ファイル書き出し
with open("result.txt", mode="w") as f:
f.write(result["text"])
使用モデル
- large
- ファイルサイズ 2.88G
音声ファイル
- m4a ファイル
- サイズは 45.41MB
- ビットレート 64kbps
解析時間
- 不明 (かなりかかりそうなので途中でやめて mlx 形式にしました)
MLX 経由で実行する
以下は MLX を使って whisper を動作させる方法です
こちらを参考に設定していきます
clone
-
git clone https://github.com/ml-explore/mlx-examples.git
初期化
- cd mlx-examples/whisper
- brew install ffmpeg
- pipenv install -r ./requirements.txt
モデルのコンバート
pytorch で作成された whisper のモデルを mlx で使用可能なモデルに変換します
もしかすると hugging face の MLX Community を使えば自分でコンバートする必要はないかもです
-
pipenv run python convert.py --torch-name-or-path large --mlx-path mlx_models/large
[INFO] Loading
[INFO] Saving
生成されるファイルは以下のとおりです
tree mlx_models
mlx_models
└── large
├── config.json
└── weights.npz
2 directories, 2 file
スクリプト作成
-
vim app.py
import whisper
# 生成したモデルと音声ファイルを指定して解析
result = whisper.transcribe(
"/path/to/audio.m4a", path_or_hf_repo="mlx_models/large", verbose=True
)
# ファイル書き出し
with open("result.txt", mode="w") as f:
f.write(result["text"])
ここで import している whisper.transcribe
は mlx-examples が独自で修正している transcribe.py になります
なので path_or_hf_repo というパラメータが指定できます
実行
-
pipenv run python app.py
今回の場合成功すれば result.txt にテキスト情報がそのまま保存されます
解析時間
- 約1時間
GPU はほぼフルで使っていました
スペックによってはさらに速くなるかなと思います
最後に
mlx + whisper で M2 mac mini 上で音声解析してみました
精度はかなりいいので Google の Speech-to-text レベルのものがローカルで動作するようになります
スペックの低いマシンではかなり時間がかかるのでそれなりのスペックのマシン特に GPU のあるマシンを使って解析することをオススメします
また mlx を使うことで GPU をフルに使って解析するので時間も短縮できます
language='ja'
というキーワード引数を指定しなくても自動で日本語だと判断してくれましたが入れてもいいのかもしれません
verbose=True
を指定すると自動検出した言語を print デバッグしてくれるので試しに入れてみてもいいのかもしれません
また verbose=True
は解析の経過も表示してくれるのでファイルが大きい場合は入れたほうがいいかなと思います
0 件のコメント:
コメントを投稿