「会議の議事録を自動化したい」「インタビューを文字にしたい」といった声をよく耳にします。
そんなときに頼りになるのが、OpenAIが公開しているWhisper。
音声認識の精度が高く、日本語にも対応しているので、手作業の文字起こしから解放される日も近いかもしれません。
今回は、実際にWhisperをインストールして、音声ファイルをテキスト化するまでの流れをざっくりご紹介します。
Whisperをインストール
まずは必要なモジュールを準備します。GitHubから直接インストールするスタイルです。
GPUがあると処理がサクサク進むのでおすすめですが、CPUでも一応動きます(ただし待ち時間は長め)。
!pip install git+https://github.com/openai/whisper.git import os import torch # GPUメモリを上手に使うための設定 os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"
2. モデルの読み込み
Whisperには複数のサイズのモデルがありますが、今回は「small」を選びました。
import whisper
model = whisper.load_model("small")
large はCPUだと現実的に厳しいです。
モデルサイズの考え方。
- tiny(一番軽い。日本語の精度は低め)
- base(軽量+そこそこ精度)
- small(日本語もある程度実用的)
- medium(精度高い。CPUでも頑張れば動く)
- large(精度最高。ただしCPUは非推奨)
3. 音声ファイルを文字に変換
用意した音声ファイルを渡せば、いよいよ自動で文字起こしが始まります。
segmentsには時間ごとに区切られた文章が格納されていて、これだけでも「誰がいつ何を言ったのか」がある程度把握できます。
result = model.transcribe("input.wav", verbose=True, language='ja')
print(result['segments'])
4. テキストをファイルに保存
コンソールに出すだけでも十分ですが、実務ではやはりファイル保存が便利です。
結果は1行ずつ改行されて出力されるので、そのまま議事録や原稿に流用できます。
text = result['text']
with open("/content/sample_data/output_1.txt", "w", encoding="utf-8") as file:
for segment in result['segments']:
transcript = segment['text']
output_text = f"{transcript}\n"
file.write(output_text)
5. 後片付け(おまけ)
モデルや結果を削除して、GPUメモリをきれいにしておくのもスマートです。
GPU環境なら意味あり。CPU実行時はあまり気にしなくてOKです。
これで次回以降も快適に処理できます。
del model del result torch.cuda.empty_cache()
まとめ
Whisperを使えば、音声を文字に変える作業がシンプルに。数行のコードで、会議の録音やインタビューのデータがテキストになって手元に残ります。
「手作業の文字起こしはもう卒業したい」と思っている方は、一度試してみてください。
上手くいけば、自分の生活に「音声を文字にする流れ」が自然に組み込まれているはずです。
WhisperとGoogle Colab
長音声用のGPU使用時の音声書き起こし全文。
## whisperモジュールをインストール
!pip install git+https://github.com/openai/whisper.git
import os
import torch
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"
## whisperモジュールをインポート
import whisper
model = whisper.load_model("small")
## 音声ファイルの指定 xxxxxx.mp3は自分で配置した音声ファイルの名前
result = model.transcribe("input.wav", verbose=True, language='ja')
print(result['segments'])
# コンソールに出力される内容であればここまでで十分
# ファイルの出力するのであれば下記
text = result['text']
# 改行を含めてファイル出力
with open("/content/sample_data/output_1.txt", "w", encoding="utf-8") as file:
for segment in result['segments']:
start_sec = segment['start']
end_sec = segment['end']
transcript = segment['text']
output_text = f"{transcript}\n"
file.write(output_text)
# ファイルを閉じる
file.close()
# メモリのクリーニング
del model
del result
torch.cuda.empty_cache()