音声をwhisperで文字起こしする

2024年3月19日

インストール

ffmpegのダウンロードと展開ffmpeg-master-latest-win64-gpl.zip

Releases · BtbN/FFmpeg-Builds (github.com)

“D:\WinPython\ffmpeg"に展開します

次のバッチファイルを作成して流します

@echo off
call %~dp0\scripts\env_for_icons.bat  %*
SET PATH=%PATH%;%WINPYDIRBASE%\PortableGit;%WINPYDIRBASE%\PortableGit\bin
SET PATH=%PATH%;%WINPYDIRBASE%\ffmpeg\bin
If not exist %WINPYDIRBASE%\content mkdir  %WINPYDIRBASE%\content 

set APP_NAME=openai-whisper
set APP_DIR=%WINPYDIRBASE%\content\%APP_NAME%
echo %APP_DIR%
md %APP_DIR%
cd %APP_DIR%
if not defined VENV_DIR (set "VENV_DIR=%APP_DIR%\venv")
if EXIST %VENV_DIR% goto :activate_venv


::python.exe -m venv "%VENV_DIR%" 
python.exe -m venv "%VENV_DIR%" --system-site-packages 
if %ERRORLEVEL% == 0 goto :activate_venv
echo Unable to create venv 
goto :skip_venv

:activate_venv
call "%VENV_DIR%\Scripts\activate"
cmd.exe /k
:skip_venv
pip install -U openai-whisper

PyTorch インストールされてない場合はホームページからコマンドを入手

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

文字起こし

whisper japanese.wav --language Japanese
(venv) D:\WinPython\content\openai-whisper>whisper japanese.wav --language Japanese
100%|███████████████████████████████████████| 461M/461M [00:21<00:00, 22.4MiB/s]
[00:00.000 --> 00:02.000] 佐藤に旅行した
whisper japanese.wav --language Japanese  --output_format txt

japanese.txtに出力されます

コマンドラインオプション

usage: whisper [-h] [--model MODEL] [--model_dir MODEL_DIR] [--device DEVICE] [--output_dir OUTPUT_DIR]
               [--output_format {txt,vtt,srt,tsv,json,all}] [--verbose VERBOSE] [--task {transcribe,translate}]
               [--language Japanese
               [--temperature TEMPERATURE] [--best_of BEST_OF] [--beam_size BEAM_SIZE] [--patience PATIENCE]
               [--length_penalty LENGTH_PENALTY] [--suppress_tokens SUPPRESS_TOKENS] [--initial_prompt INITIAL_PROMPT]
               [--condition_on_previous_text CONDITION_ON_PREVIOUS_TEXT] [--fp16 FP16]
               [--temperature_increment_on_fallback TEMPERATURE_INCREMENT_ON_FALLBACK]
               [--compression_ratio_threshold COMPRESSION_RATIO_THRESHOLD] [--logprob_threshold LOGPROB_THRESHOLD]
               [--no_speech_threshold NO_SPEECH_THRESHOLD] [--word_timestamps WORD_TIMESTAMPS]
               [--prepend_punctuations PREPEND_PUNCTUATIONS] [--append_punctuations APPEND_PUNCTUATIONS]
               [--highlight_words HIGHLIGHT_WORDS] [--max_line_width MAX_LINE_WIDTH] [--max_line_count MAX_LINE_COUNT]
               [--max_words_per_line MAX_WORDS_PER_LINE] [--threads THREADS]
               audio 
--model 使用する Whisper モデルの MODEL 名 (デフォルト: small) tiny base small medium large
   --model_dir MODEL_DIR
                         モデルファイルを保存するパス。 デフォルトで ~/.cache/whisper を使用します (デフォルト: なし)
   --device PyTorch 推論に使用する DEVICE デバイス (デフォルト: cuda)
   --output_dir OUTPUT_DIR、-o OUTPUT_DIR
                         出力を保存するディレクトリ (デフォルト: .)
   --output_format {txt,vtt,srt,tsv,json,all}、-f {txt,vtt,srt,tsv,json,all}
                         出力ファイルの形式。 指定しない場合、使用可能なすべての形式が生成されます (デフォルト:
                         全て)
   --verbose 進行状況およびデバッグ メッセージを出力するかどうかを VERBOSE (デフォルト: True)
   --task {transcribe,translate}
                         X->X 音声認識 (「転写」) を実行するか、X->英語翻訳を実行するか
                         ('翻訳') (デフォルト: transcribe)
   --temperature 温度
                         サンプリングに使用する温度 (デフォルト: 0)
   --best_of BEST_OF ゼロ以外の温度でサンプリングする場合の候補の数 (デフォルト: 5)
   --beam_size BEAM_SIZE
                         ビーム検索のビーム数。温度がゼロの場合にのみ適用されます (デフォルト: 5)
   --patience PATIENCE ビーム デコードで使用するオプションの忍耐値 (https://arxiv.org/abs/2204.05424 など)
                         デフォルト (1.0) は従来のビームサーチと同等 (デフォルト: なし)
   --length_penalty LENGTH_PENALTY
                         https://arxiv.org/abs/1609.08144 のようなオプションのトークン長ペナルティ係数 (アルファ) を使用します。
                         デフォルトでの単純な長さの正規化 (デフォルト: なし)
   --suppress_tokens SUPPRESS_TOKENS
                         サンプリング中に抑制するトークン ID のカンマ区切りのリスト。 「-1」はほとんどの特殊なものを抑制します
                         一般的な句読点を除く文字 (デフォルト: -1)
   --initial_prompt INITIAL_PROMPT
                         最初のウィンドウのプロンプトとして提供するオプションのテキスト。 (デフォルト: なし)
   --condition_on_previous_text CONDITION_ON_PREVIOUS_TEXT
                         True の場合、モデルの前の出力を次のウィンドウのプロンプトとして提供します。 無効にする
                         ウィンドウ間でテキストに一貫性がなくなる可能性がありますが、モデルが不一致になる可能性は低くなります。
                         失敗ループにはまってしまいます (デフォルト: True)
   --fp16 FP16 fp16 で推論を実行するかどうか。 デフォルトで True (デフォルト: True)
   --temperature_increment_on_fallback TEMPERATURE_INCREMENT_ON_FALLBACK
                         デコードが次のいずれかを満たさない場合にフォールバックするときに温度が上昇します。
                         以下のしきい値 (デフォルト: 0.2)
   --compression_ratio_threshold COMPRESSION_RATIO_THRESHOLD
                         gzip 圧縮率がこの値より高い場合、デコードは失敗したものとして扱われます。
                         (デフォルト: 2.4)
   --logprob_threshold LOGPROB_THRESHOLD
                         平均ログ確率がこの値より低い場合、デコードは失敗したものとして扱われます。
   --no_speech_threshold NO_SPEECH_THRESHOLD
                         <|nospeech|> トークンの確率がこの値より高く、かつデコードが成功した場合
                         「logprob_threshold」により失敗しました。セグメントは無音とみなされます (デフォルト: 0.6)
   --word_timestamps WORD_TIMESTAMPS
                         (実験的) 単語レベルのタイムスタンプを抽出し、それらに基づいて結果を調整します (デフォルト:
                         間違い)
   --prepend_punctuations PREPEND_PUNCTUATIONS
                         word_timestamps が True の場合、これらの句読点記号を次の単語と結合します (デフォルト:
                         「」?([{-)
   --append_punctuations APPEND_PUNCTUATIONS
                         word_timestamps が True の場合、これらの句読点記号を前の単語と結合します (デフォルト:
                         「'.。、、!!??::”)]}、)
   --highlight_words HIGHLIGHT_WORDS
                         (--word_timestamps True が必要) srt および vtt で話される各単語に下線を引きます (デフォルト:
                         間違い)
   --max_line_width MAX_LINE_WIDTH
                         (--word_timestamps True が必要) 改行されるまでの行の最大文字数
                         行 (デフォルト: なし)
   --max_line_count MAX_LINE_COUNT
                         (--word_timestamps True が必要) セグメント内の最大行数 (デフォルト: なし)
   --max_words_per_line MAX_WORDS_PER_LINE
                         (--word_timestamps True が必要、--max_line_width は効果なし) 最大単語数
                         セグメント内 (デフォルト: なし)
   --threads THREADS トーチが CPU 推論に使用するスレッドの数。 MKL_NUM_THREADS/OMP_NUM_THREADS に優先します
                         (デフォルト: 0)

Python の例

import whisper
model = whisper.load_model(“large”)
result = model.transcribe(“Japanese.wav”, verbose=True)
#result = model.transcribe(“Japanese.wav”, verbose=True, language="ja")
print(result[“text”])


Python

Posted by eightban