はじめに
ういっすういっすういっすー!✌️ ぱー🖐 nikkieです。
ここ最近お絵描きAI、Stable Diffusionが非常に賑わいを見せていますが、実はシオン・プロジェクト的にも熱いAI、Whisperが登場したんです!
この記事ではWhisperを手元で動かすまでをまとめます。
目次
動作環境
- macOS
- CPU環境で動かしています
- Python 3.9.4
- ffmpeg 5.1.2
- https://github.com/openai/whisper/tree/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f をインストール
- torch 1.10.2
- transformers 4.22.2
前回のシオン・プロジェクト!
『アイの歌声を聴かせて』のファン活動(アイカツ)として、劇中に登場するAIシオンのv0.0.1を実装するというプロジェクトを立ち上げました。
直近のエントリはこちら
ここまでの内容はPyCon APAC 2022で世界に発信しました🎤(日本語トークです)
Whisperとは
OpenAIが公開した音声認識モデルという認識です(※動かすことを優先していて理論面は全く掘り下げられていません)。
- 書き起こし(英語もそれ以外の言語も。つまり日本語対応)
- 各言語の音声から英語に翻訳した書き起こし
ができるみたいです、すごい!
1つのモデルで複数の言語に対応している、いったいどうなってるんだ〜🤩(未来ずら〜)
Twitterでは「すごいんだよ、これ!」な例が紹介されています。
OpenAI の Whisper の CLI 版を動かしてみたのだが、ローカルの PC でこのレベルの音声認識が動かせることにめちゃくちゃ感動…🥹😭🙏
— Torishima (@izutorishima) 2022年9月22日
認識精度が 𝑮𝑶𝑫 な上にちゃんと「!」とかのボイスの感嘆表現もキャッチしてて凄すぎる 𝑺𝑰𝑵𝑮𝑼𝑳𝑨𝑹𝑰𝑻𝒀......(続く)https://t.co/vdhBlbegso pic.twitter.com/98SmVo7cak
OpenAIのWhisperをMacで動かしてみた(M1Max)この精度凄いな。文章は役所から届いた手紙を自分で読み上げた音声ファイル。音声認識が3行で書けるなんて…
— Naoto Nakai ⚙ (@NuCode) 2022年10月1日
三行革命や… pic.twitter.com/zZIhSiXOgg
Setup Whisper
READMEの「setup」1に沿って実施します。
Whisperのリポジトリからインストールするだけで済みます。簡単🙌
pip install git+https://github.com/openai/whisper.git
動かす上で、macOSの場合はbrew install ffmpeg
も必要でした。
Pythonライブラリの依存関係にffmpeg-python
があり、ffmpegを使っているようです2。
私の環境では、1.11以上のtorchがimportでエラーを送出する3ので、1.11未満のtorchを入れています。
setupによるとbrew install rust
が必要な場合もあるそうです4。
使用しているプラットフォーム向けにhuggingface/tokenizersが事前ビルドしたwheelを提供していない場合、rustが必要になるそうです。
Pythonコードで音声認識
Whisperは、わずかなコードで音声ファイルから音声認識できます!5
音声ファイルはsayコマンドで作りました6。
say 親譲りの無鉄砲で子供の時から損ばかりしている -o sample.wav --data-format=LEF32@16000
(修正 2023/01/09) --data-format=LEF32@160000
は--data-format=LEF32@16000
のtypo(0が1つ多い)と気づき修正
こちらをWhisperはどう認識するのか?
今回は動かすのを優先で小さい(=精度はそんなに高くない)モデル base を使いました。
>>> import whisper >>> model = whisper.load_model("base") >>> result = model.transcribe("sample.wav", fp16=False) >>> result["text"] '親ゆずりのむてっぽうで、子どもの時から、そんばかりしている'
認識した!!🎉
fp16=False
は「FP16 is not supported on CPU; using FP32 instead」というwarningを見たので、CPUで動かす際の指定ととらえてつけています7。
result
は辞書を指しており、トークンのIDも持っているんですよね。
何が起こっているのかまだ追えていないんですがすごそう! わくわくもんだぁ!
コマンドラインから音声認識
Pythonを書かなくてもwhisper
コマンドで音声ファイルから音声認識できます8。
whisperをインストールすると、このコマンドが使えるようになっています。
$ whisper sample.wav --model base --language Japanese --fp16 False [00:00.000 --> 00:04.560] おやゆずりのむてっぽうで、子どもの時から、そんばかりしている
コマンドの全容はwhisper --help
で確認できます。
細かい点ですが、CLIでよくあるフラグ引数ではなく、--fp16 False
のようにTrue/False
というどちらかの文字列を渡す必要がありました9。
終わりに
Whisperの環境構築をして、READMEの例を動かしてみました。
macOSのsay
コマンドで作った日本語の音声ファイル、認識しましたね〜👏
こんなに簡単に音声認識が使えてやばい〜。
Whisperの登場により、シオン・プロジェクトも影響は免れないでしょう!
果たして、Whisperはシオンさん(の一部)なのか、盛り上がってまいりました!
大盛り上がりのStable Diffusionは、例えばからあげさんが睡眠を削って、毎日めっちゃ楽しそうに取り組まれてますよね!
これは私も睡眠を削ることになるのか!?
次回に続く(To Be Continued)10
- https://github.com/openai/whisper#setup↩
- https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/audio.py#L39-L45↩
- 詳細はこちらで報告しています。 https://github.com/r9y9/ttslearn/issues/37↩
- 「You may need rust installed as well, in case tokenizers does not provide a pre-built wheel for your platform.」↩
- https://github.com/openai/whisper#python-usage↩
- 声をPythonに聴かせて(前編:wavファイルだと書き起こせるのに、マイクの入力はいまいち!?) - nikkie-ftnextの日記↩
- https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/transcribe.py#L78↩
- https://github.com/openai/whisper#command-line-usage↩
-
argparseを使っていて、str2bool関数を定義して渡ってきた文字列(
'True'
または'False'
)をboolに変換しています。これは好みなんですけどargparseならactionがオススメです(この実装をしないといけない理由があるのかな?)↩ - どうか次回がありますように↩