スポンサーリンク

WSL2 で Whisper WebUI を使用する

Sunrise_from_MtFuji
記事内に広告が含まれています。
スポンサーリンク

はじめに

2024年1月28日現在の最新の Whisper のバージョンは v20231117、Faster Whisper のバージョンは 0.10.0 です。(Whisper WebUI にはバージョン表示がありません) WSL2 Ubuntu 22.04 LTS にゼロからインストールする方法は「こちらのページ 」で紹介しています。VAD (Voice Activity Detector) が使用できますので音声認識精度が向上します。

先の記事で、音声認識 AI の Whisper と、高速・省 VRAM 版の Faster Whisper の Windows11 WSL2 への導入方法について記事にしました。

whisper コマンドや fast-whisper 用の Python script を使用すると、音声ファイルを音声認識して文字起こしする事が出来ました。

とはいえ、毎回オプションを指定したり、initial_prompt を書き換えたりするのは面倒です。画像生成 AI の Stable Diffusion WebUI のような、Whisper の WebUI が無いか探してみた所、次の Hugging Face のページを見つけました。

aandk 氏の作成した Hugging Face 上の Whisper WebUI です。上のリンク先で動作を試す事が出来ますが、音声ファイルの上限が 600 sec となっています。

この Whisper WebUI はローカルで動作させる事も出来ます。その場合には、音声ファイルの 600 sec の上限も無く、外部に個人的な音声ファイルを送る事もありません。

今回の記事では、この Whisper WebUI を Windows11 WSL2 Ubuntu で動作させる手順について紹介します。

スポンサーリンク

Whisper 用の Python 仮想環境の構築

Whisper / Faster Whisper をコマンドライン、或いは Python script で使用できるように環境を構築します。手順については、以下のページを参照下さい。

Python 仮想環境内に構築しておくと、他の環境への影響もなく、ディレクトリごと削除すればやり直しも簡単ですので、仮想環境を作成しておく事をお勧めします。

この時点で、PyTorch は CUDA に対応したバージョンがインストールされている状態です。

Whisper WebUI のインストール

以下のページを参考にしました。

Hugging Face のリポジトリですが、git で clone 出来ます。

$ cd whisper
$ source .venv/bin/activate
(.venv) $ git clone https://huggingface.co/spaces/aadnk/whisper-webui
(.venv) $ cd whisper-webui

clone したディレクトリ内の README.md の Running Locally を見ると、requirements.txt を pip で一括してインストールすると書かれていますが、そのまま実行してはダメです

  • requirements.txt … whisper 用 (requirements-whisper.txt も同じ内容)
  • requirements-fasterWhisper.txt … faster-whisper 用

どちらにも、既にインストール済みの Python package が含まれていて、whisper が動作している環境を壊す可能性があります。二種類の requirements.txt から、追加でインストールが必要な package を抜き出したのが以下のファイルになります。仮に requirements-add.txt とします。

ffmpeg-python==0.2.0
gradio==3.38.0
yt-dlp
altair
json5

今回は話者分離 (diarization) は使用しない条件で動作させますので、pyannote-audio 等は含めませんでした。

  • ffmpeg-python は音声 codec の変換用
  • gradio は WebUI 用の GUI ライブラリ
  • yt-dlp は Youtube から動画・音声を取り込むライブラリ
  • altair はデータ可視化ライブラリ
  • json5 は 設定ファイルの config.json5 を読み込むためのライブラリ

です。

新しく作成した requirements-add.txt から pip でインストールします。

(.venv) $ pip install -r requirements-add.txt

これで準備が出来ました。

Whisper WebUI の起動方法

Python 仮想環境内で、以下のコマンドで Whisper WebUI を起動します。

(.venv) $ python app.py --input_audio_max_duration -1 --auto_parallel True
Using whisper implementation: whisper
[Auto parallel] Using GPU devices ['0'] and 8 CPU cores for VAD/transcription.
Diarization libraries not found - disabling diarization
/home/hiro/whisper/.venv/lib/python3.11/site-packages/gradio/blocks.py:939: UserWarning: api_name predict already exists, using predict_1
  warnings.warn(
/home/hiro/whisper/.venv/lib/python3.11/site-packages/gradio/blocks.py:939: UserWarning: api_name predict already exists, using predict_2
  warnings.warn(
Queue mode enabled (concurrency count: 1)
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

無事起動すれば、http://127.0.0.1:7860 にアクセスすれば、Whisper WebUI が起動します。(クリックで拡大)

Whisper WebUI 起動直後の画面

Whisper WebUI の使い方

コマンドライン版で使用していた場合には、各項目の意味は分かると思います。それぞれの項目の default を変更する方法については後述します。

左上より順に説明します。

Model と Language を選択します。

Model は tiny / base / small / medium / large / large-v1 / large-v2 / large-v3 の 8種類から選びますが、VRAM 12GB の GPU で推論する場合には large-v3 で良いかと思います。

Language は日本語で音声認識させる場合には japanese を選びます。

Model と Language

次に音声ファイルを指定します。何方か片方に入力します。

URL の欄には音声ファイルの場所や、Youtube の動画の URL を直接入力します。Upload Files には、ローカルに保存してある音声ファイルをアップロードします。内部で ffmpeg で変換してくれますので、mp3 でも m4a でも、ffmpeg が対応している codec であれば大丈夫だと思います。

URL 又はファイルのアップロード

Microphone Input にはマイクから直接音声を録音します。

Task は transcribe / translate の選択です。音声認識の場合は transcribe を選択します。

VAD (Voice Activity Detector) は発話部分を検出する model です。通常の Whisper には含まれず、Whisper WebUi に含まれている機能です。(faster-whisper には含まれています) silero-vad は以下の github に記載されています。

Whisper / Faster-Whisper では、無音部分を誤検出して無意味な文字を出力する事があります。VAD を有効にすると、発話部分のみを音声認識して、無音部分の誤検出を防止できます。

5種類の選択肢があります。Whisper WebUI のページから引用します。

種類機能
none発話部分の検出をせずに音声入力全体で Whisper を実行する
silero-vadSilero VAD を使用して音声を含むセクションを検出し、各セクションに対して個別に Whisper を実行する。Whisper は各音声セクション間のギャップに対しても実行され、最大マージサイズまでセクションを拡大するか、非音声セクションに対して単独でWhisperを実行する。
silero-vad-skip-gapsSilero VADを使用して音声を含むセクションを検出し、各セクションに対して個別にWhisperを実行する。各音声セクションは、隣接する非音声セクションをカバーするように拡張される。
silero-vad-expand-into-gaps上記と同様だが、silero-vad で発話が含まれない部分はスキップされる。この方が若干速くなるが、台詞がスキップされる可能性がある。
periodic-vad"VAD - Max Merge Size" に入力した秒ごとにスピーチのセクションを作成する。これは非常に速く単純な処理だが、文や単語を2つに分割する可能性がある。
VAD オプションの選択

silero-vad か silero-vad-skip-gaps で試してみるのが良いかと思います。

"VAD - Merge Window (s)" と "VAD - Max Merge Size (s)" は default の 5 と 30 のままにしておきました。

ここまで設定したら「送信」を押すと音声認識が始まります。

「送信」ボタンで音声認識開始

音声認識の結果は、右側の "Download"、"Transcription"、"Segments" に表示されます。

上部のタブに "Simple"、"Full"、"Extra" の 3種類があります。

選択タブ

これまでの説明は "Simple" の場合です。"Full" の場合には、VAD の option が増え、initial_prompt を入力する欄が追加されるなど、更に細かい指定が出来るようになっています。

Whisper WebUI による音声認識結果

試しに青空文庫の「吾輩は猫である」から本文の一部を頂いて、VOICEVOX で音声ファイルに変換し、そのファイルを Whisper WebUI に読み込ませて音声認識させてみました。音声には「VOICEVOX:四国めたん」を使わせて頂きました。

音声認識の途中では下記のような画面になります。

音声認識中 その1
音声認識中 その2

音声認識が終了すると、次のような表示になります。(クリックで拡大)

音声認識終了後

固有名詞の違い (×諸星○書生) 等はありますが、変換精度は高いと思います。

Whisper WebUI の設定ファイル

Wisper WebUI の設定ファイルは git clone したディレクトリ内の config.json5 です。このファイルを編集する事によって、起動時のオプションやプルダウンメニューの内容を変更する事が出来ます。

先頭が "//" はコメント行です。

    // 音声ファイルの最大時間 -1 で制限なし
    // Maximum audio file length in seconds, or -1 for no limit. Ignored by CLI.
    //"input_audio_max_duration": 600,
    "input_audio_max_duration": -1,

    // GPU と CPU の全てのコアを使用する場合に true
    // True to use all available GPUs and CPU cores for processing. Use vad_cpu_cores/vad_parallel_devices to specify the number of CPU cores/GPUs to use.
    //"auto_parallel": false,
    "auto_parallel": true,

    // デフォルトで使用するモデル名
    // The default model name.
    //"default_model_name": "medium",
    "default_model_name": "large-v3",

    // 音声ファイルの言語の種類 "japanese"
    // Language spoken in the audio, specify None to perform language detection
    //"language": null,
    "language": "japanese",

    // faster-whisper を使う場合に変更する
    // The default implementation to use for Whisper. Can be "whisper" or "faster-whisper".
    // Note that you must either install the requirements for faster-whisper (requirements-fasterWhisper.txt)
    // or whisper (requirements.txt)
    //"whisper_implementation": "whisper",
    "whisper_implementation": "faster-whisper",

他にも起動時の default にしたい項目があれば、変更しておくと便利です。

設定後は、Whisper WebUI の起動コマンドはシンプルになります。

(.venv) $ python app.py

まとめ

コマンドライン版の whisper や faster-whisper の python script の代わりに、Whisper WebUI を導入・使用する方法についてまとめました。事前に whisper や faster-whisper の動作する環境を作成しておけば、スムーズに導入する事が出来ました。

  • Whisper でも VAD (Voice Activity Detector) が使えるようになり、無音部分の誤認識や同じ文章の繰り返しの減少が期待できます。(faster-whisper は内部で対応済み)
  • 高速・省 VRAM の faster-whisper も使用できますので、VRAM の少ない GPU でも large-v3 model での音声認識が可能になります。
  • 複数の音声ファイルを登録したり、それぞれの結果を入手できる GUI は使いやすいです。

この記事には記載しませんが、Youtube の動画の音声認識も出来ました。早口で喋る方の音声認識の精度は落ちますが、それでも概ね文字起こし出来ていますので、このような用途にも十分使用できるのではないかと考えます。

この記事を作成するのに最も時間を要したのは、実は VOICEVOX の環境構築でした。Windows 版のソフトウェアはすんなり動作したのですが、Linux で Python で動かそうとしても中々上手く行かず。もう少し試してから別の記事にしたいと考えています。

今回のアイキャッチ画像

富士山からの初日の出を生成しました。頭の中では Dreams Come True の「何度でも」が繰り返し流れています。

コメント

タイトルとURLをコピーしました