見出し画像

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:結果

1
[ 00:00:00.497 --> 00:00:03.130]
SPEAKER_00: 深圧さん実際に運転されたということですか

2
[ 00:00:03.012 --> 00:00:49.620]
SPEAKER_02: そうですね。横浜で少しだけ15分くらい自分で運転する機会があったんですけれども、一言で言うと、ちゃんとした車というようなイメージでした。質感、走行性能はどうなんですか?走行性能は、私走行性能の専門家ではあれなんですけれども、今まで乗ってきた15から20のEVの中でも、損色ないというか、価格を考えるとコスパはすごいいいんじゃないかなという感じで、中国車というと安っぽいみたいなイメージを持たれる方もいらっしゃるかもしれないんですけれども、全然そんなことないですし、一部の応酬車と比べても、内装なんかは良いものを使っているなというような印象でした。中西さんいかがですか?

3
[ 00:00:50.582 --> 00:01:18.612]
SPEAKER_03: そうですねあの私自身は乗ったことはないんですけれども とにかく勢いが今いいんですねbyd の車は中国のシェアももう8%ぐらいに成長してますので本当にあのこの頃なの間にフット気がつくととんでもない存在になって車自体もですね 非常にいいものができてまあいい車が並んでるなぁと私個人的には次出てくるドルフィンて車がかなり日本に刺さるんじゃないかななんて思ってますね

4
[ 00:01:17.987 --> 00:01:55.450]
SPEAKER_01: その BYD の日本での動きなんですけども、今中西さんからもあったように、次、今年、このドルフィンという小型ハッチバックタイプ、これも発売予定。さらに、セダンタイプもあるということですね。それから、急に唐突に進出してきたわけではなくて、既に商用車、EVバスなどでは日本で実績がある。なおかつ、今回は販売店を25年待つまでには100店舗にするということで、非常に一家製のもので、過去、韓国車なんかありましたけれども、そういうものではなくて、ちゃんとディーラーもしくという、そういう計画になっています。

5
[ 00:01:55.450 --> 00:02:20.340]
SPEAKER_02: そうですね。輸入者として100店舗というのはそれなりに本気で考えているんだなというような印象ですね。で、先ほど中西さんからもありましたように、そのドルフィンなんかは300万円台からというようなお話を日本の藩舎の東福寺社長もされていたので、かなり競争力があるんじゃないかと思いますね。

6
[ 00:02:20.459 --> 00:02:31.950]
SPEAKER_01: これは中西さんの中国でも売れてると言われてますけどもそうするとあの日本でも補助金 まあこれあの地域によって違いますけど東京だとダブルで色んな補助金があってかなり

7
[ 00:02:31.950 --> 00:03:02.410]
SPEAKER_03: 中国のホンドだと11万円切ってるはずですので、そのまま持ってくると220万円くらいなんですけど、まあ、色々あって300万円近くなるんでしょうけど、補助金しっかり付くとですね、200万円ちょっとで買えますよね。そうすると、これ、ヤリスクロスクラスの車でEVで、その値段で手が届くっていうのはちょっと魅力的だし、もう一つ、国内市場にそのセグメント共謀がないですね。そういう意味においてはちょっと注目なんですね。そして、はい。

8
[ 00:03:02.292 --> 00:03:54.655]
SPEAKER_00: はいではbyd とはまずどんな企業なのか見ていきましょう 電気自動車の販売ではアメリカのテスラに次ぐ世界第2位ですで phv つまりプラグインハイブリッド車まで含めるとテスラを抜いて世界1位になります1995年に電気自動車には欠かせないバッテリーメーカーとして創業 2003年に自動車事業に参入したということでまだ20年なんですねバッテリーの他にグループ会社では半導体の製造を行っています そして海外展開なんですけれども2021年のノルウェーを皮切りにヨーロッパへ進出2022年にはオーストラリアタイにそして今年日本へ進出 来年にはですねタイに電気自動車の工場を作り東南アジアにも本格的に打って出るということで中にさ先ほどもおっしゃってました勢いありますよねー

9
[ 00:03:54.773 --> 00:05:02.948]
SPEAKER_03: 私が初めてこの会社に行ったのはバフェットさんが投資した直後の 2009年か10年くらいなんですけれどもその頃はまだ残念ながらカローラのモノマネ車を売ってるようなそんな状態だったと思いますが それから大体1年に1回は本社の方に訪問してアップデートして聞いてきましたけれどもあるよあるというまで本格的な機関が電気自動車会社になってきたと その強みってどこにあるのかっていうのを考えると自動車メーカーでちゃんと電池を内製してきた 今みんな始めましたよでも本当に内製してきたメーカーで世界に3社しかないということでそれはこのbyd と tesla と toyota 自動車ってことになるんですね そういう意味によってはやっぱり電池をしっかりとやはりその根本的に強みを持っているところがこのbyd の本格的な強さであるし電池だけじゃなくて 実は半導体から伝送品に含めてかなりその内部で垂直統合した強みのある組織を持っているというところが例えばねものづくり企業として確立しているというところ ここがやはりそのポッと出てきている it 企業とは違うあのすごさがあるんだと思います 深川さんいかがですか


この記事が気に入ったらサポートをしてみませんか?