[Python]音声から文字起こし
公開日:2025-12-19
更新日:2025-12-19
更新日:2025-12-19
1. 概要
音声から文字起こしをします。
2. CUDA のバージョン確認
文字起こしには whisper を使います。
whisper は CPU のみで実行可能ですが、CUDA に対応しているため、NVIDIA のグラフィックボードを搭載している場合は、短い処理時間で文字起こしができます。
CUDA は、NVIDIA の GPU を使って一般的な計算を高速化するためのプラットフォームです。
グラフィックボードを搭載している場合は、
コマンドプロンプトか PowerShell で次のコマンドを実行して、CUDA のバージョンを確認します。
先頭に方に CUDA の Version が表示されます。
whisper は CPU のみで実行可能ですが、CUDA に対応しているため、NVIDIA のグラフィックボードを搭載している場合は、短い処理時間で文字起こしができます。
CUDA は、NVIDIA の GPU を使って一般的な計算を高速化するためのプラットフォームです。
グラフィックボードを搭載している場合は、
コマンドプロンプトか PowerShell で次のコマンドを実行して、CUDA のバージョンを確認します。
コマンド
nvidia-smi
先頭に方に CUDA の Version が表示されます。
実行結果
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.94 Driver Version: 560.94 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+3. インストール
3.1 torch、torchvision、torchaudio のインストール
NVIDIA のグラボがある場合(CUDA を使用する)
NVIDIA のグラボがない場合(CPU を使用する)
コマンド
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
今回は CUDA Version: 12.6 だったため、cu126 を指定しています。環境に合わせて変更してください。NVIDIA のグラボがない場合(CPU を使用する)
コマンド
pip install torch torchvision torchaudio3.2 Whisper のインストール
OpenAI の公式版
OSS の高速版
コマンド
pip install openai-whisper
OSS の高速版
コマンド
pip install faster-whisper3.3 FFmpeg のインストール
FFmpeg のインストールを参考にしてインストールしてください。
インストール後、FFmpeg にパスを通すか、Python のコードを実行する場所にコピーして、FFmpeg が実行できるようにしてください。
インストール後、FFmpeg にパスを通すか、Python のコードを実行する場所にコピーして、FFmpeg が実行できるようにしてください。
4. 文字起こし
4.1 注意
実行後、フリーズしたようになりますが、エラーにならない限り動いてるので、完了までお待ちください。
4.2 openai-whisper 版
コード
import whisper
import torch
# CUDAに対応している場合は cuda、対応していない場合は cpu
device = 'cuda' if torch.cuda.is_available() else 'cpu'
# モデルのロード
model = whisper.load_model("large-v3", device=device)
# 文字起こしをする音声ファイル
fileName = 'a.wav'
# 文字起こし
result = model.transcribe(fileName, language="ja", beam_size=5)
# beam_size 1:精度悪い・速い 5:精度少し良い 10:精度良い・遅い
# 文字起こしする際に候補として保持する数。5 の場合、5つの候補を出してその中から選んでいく
# 文字起こしの結果
print('検出した言語:', result['language']) # ja
print('文字起こしをした全文:', result['text'])
# 検出された文章ごとのリストでループ。検出した時の時間の範囲も出力できる
for segment in result['segments']:
print(f"{segment['start']:.2f} ~ {segment['end']:.2f} : {segment['text']}")4.3 faster-whisper 版
コード
from faster_whisper import WhisperModel
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
compute_type = "float16" if device == "cuda" else "int8" # cpu の場合は float16 にするとエラーになるので int8 にする
# モデルのロード
model = WhisperModel("large-v3", device=device, compute_type=compute_type, num_workers=1)
# 文字起こしをする音声ファイル
fileName = 'a.wav'
# 文字起こし
segments, info = model.transcribe(fileName, language='ja', beam_size=5)
# 文字起こしの結果
print('検出した言語:', info.language) # ja
print(info.language_probability)
# 検出された文章ごとのリストでループ。検出した時の時間の範囲も出力できる
for segment in segments:
# 時間帯 : 平均対数確率(0に近いほど信頼度が高い。通常 -1 ~ 0): テキスト
print(f"{segment.start:.2f} ~ {segment.end:.2f} : {segment.avg_logprob:.2f} : {segment.text}")
