5
3
記事投稿キャンペーン 「AI、機械学習」

WhisperXの環境構築メモ

Last updated at Posted at 2023-10-22

WhisperX の環境構築がめちゃくちゃ大変だと感じたので、自分用にまとめました。
非エンジニアがChatGPTに聞きながら雰囲気でやったことなので、内容の正確性はお察し。

環境

  • Windows 11
  • GPU : NDIVIA GeForce RTX 3060
  • エディタ:VScode
  • Anaconda で Python 3.10 の仮想環境を用意した
  • Git 導入済み

GPU関係のいろいろ

https://monomonotech.jp/kurage/memo/m230921_whisper_windows_cuda.html
これの言う通りにやりました。

  • ffmpeg
  • CUDA
  • PyTorch

この3つの導入を行います。 cuDNNの導入は多分やらなくても動きます。 自分は導入しませんでした。(要検証)

ffmpegの導入では環境変数をいじりますが、このとき再起動するのを忘れないようにしましょう(超基本的なことではありますが。。。)

CUDAの導入ではバージョンに気を付ける必要があります。↑のサイトにも書いてますが、PyTorchが対応しているCUDAのバージョンに縛りがあるからです。自分はCUDA 11.8にしました。

Pytorchの導入ではパッケージのインストールにcondaではなくpipを選びました。condaでもいいですが、GPUの種類によってはAnacondaでサポートされていないものもあるようなので、事前に確認しておくのが良さそうです。

WhisperX インストール

pip install git+https://github.com/m-bain/whisperx.git

github のリポジトリから直接インストールします。当然ですがGitを導入してないとできないので、注意してください。

音声ファイルの準備

サンプリングレート 16kHz のモノラル WAV ファイルならなんでもいいです。WhisperXでは話者分離までできるので、その効果を実感したければ2人以上で喋ってる音声がいいと思います。
ここでは、男2人が5分間くらい喋ってるoutput.wavを使用します。

Hugging Face 🤗

完全にこちらを舐めている顔文字🤗
https://laboratory.kazuuu.net/obtain-an-api-token-access-token-for-hugging-face/
このサイトを参考に、アクセストークンを取得します。

モデルの同意書

image.png

曰く、3つのモデルの同意書に回答しないといけないらしいです。

image.png
大学とウェブサイトの欄が必須項目になっているみたいです。自分はとりあえず所属している大学とそのホームページのurlを張り付けてみました。3つ目の欄には「I plan to use this model for private use」と入力しました。
本当にこれでいいんか...?でもまあうまくいったし、、、

スクリプト

ここに書いてあるスクリプトを丸コピしました。以下に日本語コメント付きのものを置きます。

whisperx.py
# whisperxモジュールから必要な関数やクラスをインポート
import whisperx
# 時間の計算に使用するためのtimedeltaクラスをインポート
from datetime import timedelta
# 進捗バーの表示に使用するtqdmモジュールをインポート
from tqdm import tqdm

# 使用するデバイス(GPU)を指定
device = "cuda"
# 入力となる音声ファイルのパスを指定
audio_file = "output.wav"
# バッチサイズを指定(GPUメモリが不足している場合は数を減らす)
batch_size = 16
# 計算の精度を指定(GPUメモリが不足している場合は"int8"に変更可能、ただし精度は低下する可能性あり)
compute_type = "float16"
# Hugging Faceの認証トークンを指定
auth_token = ""

# Whisper ASRモデルを指定のデバイスと精度で読み込む
model = whisperx.load_model("large-v2", device, compute_type=compute_type)
# 入力音声を読み込む
audio = whisperx.load_audio(audio_file)
# Whisper ASRモデルを使用して音声をテキストに変換し、結果を取得
result = model.transcribe(audio, batch_size=batch_size)

# 言語に応じたアラインメントモデルを読み込む
model_a, metadata = whisperx.load_align_model(language_code=result["language"], device=device)
# Whisperのアラインメントモデルを使用して音声とテキストのアラインメントを行う
result = whisperx.align(result["segments"], model_a, metadata, audio, device, return_char_alignments=False)

# DiarizationPipelineを使用して音声から話者の情報を取得
diarize_model = whisperx.DiarizationPipeline(use_auth_token=auth_token, device=device)
diarize_segments = diarize_model(audio_file)
# 取得した話者の情報を元に、テキストセグメントに話者情報を割り当てる
result = whisperx.assign_word_speakers(diarize_segments, result)

# 結果をテキストファイルに保存する
with open('result.txt', 'w', encoding='utf-8') as f:
    # 各セグメントの情報を処理しながらファイルに書き込む
    for segment in tqdm(result["segments"], desc="Processing segments", ncols=75):
        # セグメントの開始時間を取得して文字列に変換
        start_time = str(timedelta(seconds=segment["start"]))
        # セグメントの終了時間を取得して文字列に変換
        end_time = str(timedelta(seconds=segment["end"]))
        # セグメントの話者情報を取得
        speaker = segment["speaker"]
        # セグメントのテキストを取得
        text = segment["text"]
        # セグメントの情報をファイルに書き込む
        f.write(f'{start_time}-{end_time}\n{speaker}\n{text}\n\n')

ちなみに中身はあんまり理解してないです。コメントはChatGPT君に書いてもらいました。

auth_tokenに先ほど🤗で取得したアクセストークンを入れるだけで多分動きます。

ASRのモデルがlarge-v2になってますが、ここは適宜変更してください。

ターミナルにいろいろ書き込まれてるんだが...

話者分離されたテキストファイルが吐き出されたので、一応動いてはいる。
でもターミナルにいろいろな警告が書き込まれてる...

警告全文ChatGPTにぶち込んでみました
image.png

1.は無視してもいいっぽいですね。

2.は pyannote.audio と torch のバージョンが合ってねぇってことらしいです。CUDAとの互換性にも注意しながらダウングレードすれば解決しそうですが、また今度にします。

3.何言ってるのか分からないです。

image.png

じゃあ別になにもしなくていいかな。。。

image.png

かわいい。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3