OpenAI Whisperで、文字起こしをする(Windows)
OpenAI Whisperは、音声ファイルや動画ファイルから、文字起こしをするスクリプトですが、AIの学習データ作成等で大いに役に立ちます。今回は、そんなWhisperの使い方をメモしておきます。
Whisperは、mp4やwavなどの動画、音声ファイルを、srt/txt(タイムコードなし)/vttのタイムコード付き、字幕ファイルに変換します。
1.インストール
# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg
# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg
# anaconda
conda install -c conda-forge ffmpeg
# 標準インストール
pip install -U openai-whisper
#Gitよりインストール
pip install git+https://github.com/openai/whisper.git
#アップデート(インストール済みのみ)
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
2.実行
翻訳対象の動画ファイルまたは音声ファイルがあるディレクトリで、コマンドプロンプト等を実行し以下のコマンドを入力します。
翻訳対象のファイルには、スペースを含めないようにしてください。
例:
# 動画ファイルを日本語に変換する
whisper input_movie.mp4 --language Japanese --model medium
3.設定関数一覧
A.モデル一覧(--model)
パラメータ数が少ないモデルほど、処理が軽く、GPUメモリ消費も少ないですが、精度が悪化します。
tiny 39M Parameters
base 74M Parameters
small 244M Parameters
medium 769M Parameters
large 1550M Parameters
tiny.en
base.en
small.en
medium.en
large-v1
large-v2
B.モデルファイルの保存先(--model_dir MODEL_DIR)
デフォルト保存先
uses ~/.cache/whisper
C.PyTorch の推論に使うデバイスを設定--device DEVICE
PyTorch の推論に使うデバイス (デフォルト: cpu)
cudaインストール済みの場合、cudaにてGPUを用いた推論が可能(CPUより高速)
GPU推論する場合はpytorchが必要になります(CUDA11.8で動作確認済み)
https://pytorch.org/get-started/locally/
#CPU推論
--device cpu
#GPU推論
--device cuda
D.結果保存先--output_dir OUTPUT_DIR, -o OUTPUT_DIR
directory to save the outputs (default: .)
E. 進捗状況やデバッグメッセージ --verbose VERBOSE
進捗状況やデバッグメッセージを出力するかどうか(デフォルト:True)。
F. タスク--task {transcribe,translate}
文字起こしのみか、翻訳も行うかを設定できる。(デフォルト: transcribe)
#テキストを英語に翻訳
--task translate
G.音声言語設定 --language
音声で話される言語、言語検出を行う場合は None を指定する(デフォルト:None)。
対応言語一覧
{af,am,ar,as,az,ba,be,bg,bn,bo,br,bs,ca,cs,cy,da,de,el,en,es,et,eu,fa,fi,fo,fr,gl,gu,ha,haw,hi,hr,ht,hu,hy,id,is,it,iw,ja,jw,ka,kk,km,kn,ko,la,lb,ln,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,nn,no,oc,pa,pl,ps,pt,ro,ru,sa,sd,si,sk,sl,sn,so,sq,sr,su,sv,sw,ta,te,tg,th,tk,tl,tr,tt,uk,ur,uz,vi,yi,yo,zh,Afrikaans,Albanian,Amharic,Arabic,Armenian,Assamese,Azerbaijani,Bashkir,Basque,Belarusian,Bengali,Bosnian,Breton,Bulgarian,Burmese,Castilian,Catalan,Chinese,Croatian,Czech,Danish,Dutch,English,Estonian,Faroese,Finnish,Flemish,French,Galician,Georgian,German,Greek,Gujarati,Haitian,Haitian,Creole,Hausa,Hawaiian,Hebrew,Hindi,Hungarian,Icelandic,Indonesian,Italian,Japanese,Javanese,Kannada,Kazakh,Khmer,Korean,Lao,Latin,Latvian,Letzeburgesch,Lingala,Lithuanian,Luxembourgish,Macedonian,Malagasy,Malay,Malayalam,Maltese,Maori,Marathi,Moldavian,Moldovan,Mongolian,Myanmar,Nepali,Norwegian,Nynorsk,Occitan,Panjabi,Pashto,Persian,Polish,Portuguese,Punjabi,Pushto,Romanian,Russian,Sanskrit,Serbian,Shona,Sindhi,Sinhala,Sinhalese,Slovak,Slovenian,Somali,Spanish,Sundanese,Swahili,Swedish,Tagalog,Tajik,Tamil,Tatar,Telugu,Thai,Tibetan,Turkish,Turkmen,Ukrainian,Urdu,Uzbek,Valencian,Vietnamese,Welsh,Yiddish,Yoruba}
H:温度 --temperature TEMPERATURE
サンプリングに使用する温度(デフォルト:0)
温度ってなに?って人は以下のサンプリング温度を参照
I:サンプリング時候補数 --best_of BEST_OF
--best_of BEST_OF 温度が0でない場合のサンプリング時の候補数 (デフォルト: 5)
J:ビーム数 --beam_size BEAM_SIZE
ビームサーチのビーム数、温度が0の時のみ適用(デフォルト:5)
K:ビームデコード忍耐値 --patience PATIENCE
--patience PATIENCE オプション ビームデコードに使用する忍耐値で、https://arxiv.org/abs/2204.05424 のようになります。
デフォルト (1.0) は従来のビームサーチと同等 (デフォルト: なし)
L:前処理として提供するプロンプトテキスト --initial_prompt INITIAL_PROMPT
(デフォルト: なし)
M:--compression_ratio_threshold COMPRESSION_RATIO_THRESHOLD
gzip の圧縮率がこの値より大きい場合、デコードに失敗したものとして扱う。(デフォルト: 2.4)
N:--logprob_threshold LOGPROB_THRESHOLD
平均対数確率がこの値より低い場合、デコードに失敗したものとして扱う
(デフォルト: -1.0)
O:--no_speech_threshold NO_SPEECH_THRESHOLD
<|nospeech|> トークンの確率がこの値より高く、かつ `logprob_reshold` によりデコードが失敗した場合、そのセグメントを無音とみなす。logprob_threshold` のためにデコードに失敗した場合、そのセグメントを無音とみなす (デフォルト: 0.6)
P: --threads THREADS
CPU推論のために torch が使用するスレッド数; MKL_NUM_THREADS/OMP_NUM_THREADS に優先する。
(デフォルト: 0)
4.話者分離を実装する(pyannote)
参考
A.インストール
pip install pyannote.audio
B.サンプルの準備
Pyannoteは、動画ファイル等を投げ込めるWhisperと異なり、wavファイルのみ対応なので、Wavのサンプルを準備する必要があります。
今回はこちらの動画のサンプルに用いました。
C.コード
以下のコードを実行するためには、Hugging Faceのアクセストークンが必要になります。Hugging Faceのアカウントを作成+設定より、Access Tokensを作成してください。
また、話者学習レポジトリを利用するために、レポジトリ開発者のアンケートに答える必要があります。アカウント作成後、以下のURLにアクセスしてアンケートに回答および内容に同意する必要があります。
※クライアントは要求された特権を保有していません。と表示されたら?
開発者モードをONにすることで解決します。スタート→検索バーに「開発者モード」と入力し、設定画面で開発者モードをONにします。
import whisper
from pyannote.audio import Pipeline
from pyannote.audio import Audio
#音声ファイル読み込み
audio_file = "sample.wav"
#話者分離モデルロード&分離実行
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization",use_auth_token="your_token")
diarization = pipeline(audio_file)
audio = Audio(sample_rate=16000, mono=True) #音声オブジェクトの初期化
#Whisper モデルロード
model = whisper.load_model("medium")
i = 1
result=[]
for segment, _, speaker in diarization.itertracks(yield_label=True):
waveform, sample_rate = audio.crop(audio_file, segment)
text = model.transcribe(waveform.squeeze().numpy())["text"]
print("segment:",segment,"\nspeaker:",speaker,"\ntext:",text)
result.append(f"{i}\n{segment}\n{speaker}: {text}\n")
i+=1
print(result)
result="\n".join(result)
# 字幕ファイルの作成
with open("result.srt", "w", encoding="utf-8") as file:
file.write(result)
D:結果
この記事が気に入ったらサポートをしてみませんか?