[Python] OpenAI Whisperの使い方 – 音声の文字起こし・翻訳処理
OpenAI Whisperは、音声データを文字起こしや翻訳するためのモデルです。
Pythonで使用するには、まずwhisper
ライブラリをインストールします。
音声ファイルを指定してモデルをロードし、transcribe
メソッドを用いることで文字起こしが可能です。
また、task
オプションを”translate”に設定することで、音声の翻訳も行えます。
対応する言語やモデルサイズに応じて精度や処理速度が異なります。
OpenAI Whisperとは
OpenAI Whisperは、OpenAIが開発した高精度な音声認識ライブラリです。
このライブラリは、音声をテキストに変換するだけでなく、多言語に対応しており、さまざまなアクセントや方言にも強い特性を持っています。
Whisperは、68万時間以上の多言語音声データで学習されており、その結果、非常に高い認識精度を実現しています。
以下にWhisperの主な特徴を示します。
特徴 | 説明 |
---|---|
多言語対応 | 100以上の言語に対応し、自動的に言語を検出可能 |
高い認識精度 | ノイズに強く、さまざまな環境での音声認識が可能 |
オープンソース | 誰でも利用でき、カスタマイズが可能 |
簡単に使える | シンプルなAPIで、初心者でも扱いやすい |
Whisperは、音声認識技術の進化を象徴するものであり、議事録の作成、字幕付け、音声コマンドなど、さまざまなアプリケーションでの利用が期待されています。
音声データの処理において、Whisperは非常に強力なツールとなるでしょう。
WhisperをPythonで使う準備
WhisperをPythonで使用するためには、いくつかの準備が必要です。
以下の手順に従って、環境を整えましょう。
Pythonのインストール
まず、Pythonがインストールされていることを確認します。
Pythonの公式サイトから最新のバージョンをダウンロードし、インストールしてください。
Python 3.7以上が推奨されます。
仮想環境の作成(オプション)
プロジェクトごとに依存関係を管理するために、仮想環境を作成することをお勧めします。
以下のコマンドで仮想環境を作成し、アクティブにします。
# 仮想環境の作成
python -m venv whisper_env
# 仮想環境のアクティブ化(Linux/Macの場合)
source whisper_env/bin/activate
# 仮想環境のアクティブ化(Windowsの場合)
whisper_env\Scripts\activate
必要なライブラリのインストール
Whisperを使用するために必要なライブラリをインストールします。
以下のコマンドを実行してください。
pip install numpy torch
Whisperのインストール
次に、Whisperライブラリをインストールします。
以下のコマンドを実行して、Whisperをインストールします。
pip install git+https://github.com/openai/whisper.git
FFmpegのインストール
Whisperは音声ファイルを処理するためにFFmpegを必要とします。
FFmpegをインストールする方法は、使用しているオペレーティングシステムによって異なります。
以下に代表的なインストール方法を示します。
- Ubuntuの場合:
sudo apt update
sudo apt install ffmpeg
- macOSの場合(Homebrewを使用):
brew install ffmpeg
- Windowsの場合(Chocolateyを使用):
choco install ffmpeg
インストールの確認
すべてのインストールが完了したら、Whisperが正しくインストールされているか確認します。
Pythonのインタラクティブシェルを開き、以下のコードを実行してみてください。
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
print("Whisperが正常にインストールされました。")
これで、WhisperをPythonで使用するための準備が整いました。
次のステップでは、Whisperを使った音声認識の基本的な使い方を学んでいきましょう。
Whisperの基本的な使い方
Whisperを使用して音声ファイルを文字起こしする基本的な手順を説明します。
以下の手順に従って、音声データをテキストに変換してみましょう。
モデルのロード
まず、Whisperのモデルをロードします。
Whisperには複数のモデルサイズがあり、ここでは base
モデルを使用します。
モデルサイズは、精度と処理速度のバランスを考慮して選択します。
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
音声ファイルの指定
次に、文字起こしを行いたい音声ファイルのパスを指定します。
音声ファイルは、MP3、WAV、M4Aなど、さまざまなフォーマットに対応しています。
# 音声ファイルのパスを指定
audio_file = "path/to/your/audiofile.mp3"
音声ファイルの文字起こし
指定した音声ファイルをWhisperモデルを使って文字起こしします。
transcribe
メソッドを使用して、音声データをテキストに変換します。
# 音声ファイルの文字起こし
result = model.transcribe(audio_file)
結果の表示
文字起こしの結果は、result
オブジェクトに格納されます。
ここでは、認識されたテキストを表示します。
# 認識結果の表示
print("認識結果:", result["text"])
セグメントごとの詳細表示
Whisperは、音声をセグメントに分割して認識結果を提供します。
各セグメントの開始時間、終了時間、テキストを表示することもできます。
# 詳細な結果の表示
for segment in result["segments"]:
print(f"開始時間: {segment['start']:.2f}秒")
print(f"終了時間: {segment['end']:.2f}秒")
print(f"テキスト: {segment['text']}")
print("---")
サンプルコード全体
以下に、上記の手順をまとめたサンプルコードを示します。
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
# 音声ファイルのパスを指定
audio_file = "path/to/your/audiofile.mp3"
# 音声ファイルの文字起こし
result = model.transcribe(audio_file)
# 認識結果の表示
print("認識結果:", result["text"])
# 詳細な結果の表示
for segment in result["segments"]:
print(f"開始時間: {segment['start']:.2f}秒")
print(f"終了時間: {segment['end']:.2f}秒")
print(f"テキスト: {segment['text']}")
print("---")
このコードを実行することで、指定した音声ファイルの内容を文字に起こし、その結果を表示することができます。
Whisperは非常に高精度な音声認識を提供するため、さまざまなアプリケーションで活用できるでしょう。
次のステップでは、Whisperのオプション設定について学んでいきます。
Whisperのオプション設定
Whisperを使用する際には、さまざまなオプションを設定することで、音声認識の精度や動作をカスタマイズできます。
以下に、主なオプション設定について説明します。
言語の指定
Whisperは自動的に言語を検出しますが、特定の言語を明示的に指定することも可能です。
これにより、特定の言語に特化したモデルが使用され、認識精度が向上する場合があります。
# 言語を明示的に指定して音声認識
result = model.transcribe(audio_file, language="ja") # 日本語を指定
モデルサイズの選択
Whisperには、異なるサイズのモデルが用意されています。
モデルサイズが大きくなるほど、精度は向上しますが、処理時間も長くなります。
以下のモデルサイズが利用可能です。
tiny
: 最も小さく、最速だが精度は低いbase
: 中程度の精度と速度small
: 精度が向上medium
: 高精度large
: 最も高精度だが、処理が遅い
モデルサイズを指定するには、load_model
メソッドの引数を変更します。
# 大きなモデルをロード
model = whisper.load_model("large")
タイムスタンプの取得
音声認識の結果にタイムスタンプを含めることができます。
これにより、各セグメントの開始時間と終了時間を取得できます。
デフォルトでは、タイムスタンプは含まれませんが、word_timestamps
オプションをTrue
に設定することで取得可能です。
# タイムスタンプを取得
result = model.transcribe(audio_file, word_timestamps=True)
# 各単語のタイムスタンプを表示
for word in result["words"]:
print(f"単語: {word['text']}, 開始時間: {word['start']:.2f}秒, 終了時間: {word['end']:.2f}秒")
ノイズ除去の設定
Whisperは、ノイズの多い環境でも高い精度を保つことができますが、特定のノイズ除去オプションを設定することで、さらに精度を向上させることができます。
suppress_blank
オプションを使用すると、空白のセグメントを抑制できます。
# ノイズ除去を設定
result = model.transcribe(audio_file, suppress_blank=True)
サンプリングレートの指定
音声ファイルのサンプリングレートを指定することも可能です。
デフォルトでは、Whisperは16kHzのサンプリングレートを想定していますが、異なるサンプリングレートの音声ファイルを使用する場合は、sample_rate
オプションを設定します。
# サンプリングレートを指定
result = model.transcribe(audio_file, sample_rate=44100) # 44.1kHzを指定
以下に、これらのオプションを組み合わせたサンプルコードを示します。
import whisper
# Whisperモデルのロード
model = whisper.load_model("medium")
# 音声ファイルのパスを指定
audio_file = "path/to/your/audiofile.mp3"
# 音声ファイルの文字起こし(言語指定、タイムスタンプ取得)
result = model.transcribe(audio_file, language="ja", word_timestamps=True)
# 認識結果の表示
print("認識結果:", result["text"])
# 各単語のタイムスタンプを表示
for word in result["words"]:
print(f"単語: {word['text']}, 開始時間: {word['start']:.2f}秒, 終了時間: {word['end']:.2f}秒")
これにより、Whisperのオプション設定を活用して、音声認識の精度や動作をカスタマイズすることができます。
次のステップでは、実践例として音声データの文字起こしを行います。
実践例:音声データの文字起こし
ここでは、Whisperを使用して音声データを文字起こしする具体的な実践例を示します。
この例では、音声ファイルを指定し、その内容をテキストに変換する手順を詳しく解説します。
音声ファイルの準備
まず、文字起こしを行いたい音声ファイルを用意します。
音声ファイルは、MP3、WAV、M4Aなどのフォーマットがサポートされています。
ここでは、audio_sample.mp3
というファイルを使用することにします。
Whisperモデルのロード
次に、Whisperのモデルをロードします。
ここでは、精度と速度のバランスが取れた base
モデルを使用します。
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
音声ファイルの文字起こし
音声ファイルを指定し、transcribe
メソッドを使用して文字起こしを行います。
以下のコードでは、音声ファイルのパスを指定し、文字起こしを実行します。
# 音声ファイルのパスを指定
audio_file = "path/to/your/audio_sample.mp3"
# 音声ファイルの文字起こし
result = model.transcribe(audio_file)
結果の表示
文字起こしの結果は、result
オブジェクトに格納されます。
ここでは、認識されたテキストを表示します。
また、各セグメントの開始時間と終了時間も表示します。
# 認識結果の表示
print("認識結果:", result["text"])
# 詳細な結果の表示
for segment in result["segments"]:
print(f"開始時間: {segment['start']:.2f}秒")
print(f"終了時間: {segment['end']:.2f}秒")
print(f"テキスト: {segment['text']}")
print("---")
サンプルコード全体
以下に、上記の手順をまとめたサンプルコードを示します。
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
# 音声ファイルのパスを指定
audio_file = "path/to/your/audio_sample.mp3"
# 音声ファイルの文字起こし
result = model.transcribe(audio_file)
# 認識結果の表示
print("認識結果:", result["text"])
# 詳細な結果の表示
for segment in result["segments"]:
print(f"開始時間: {segment['start']:.2f}秒")
print(f"終了時間: {segment['end']:.2f}秒")
print(f"テキスト: {segment['text']}")
print("---")
このコードを実行すると、指定した音声ファイルの内容が文字に起こされ、その結果が表示されます。
例えば、以下のような出力が得られるかもしれません。
認識結果: こんにちは、これは音声認識のテストです。
開始時間: 0.00秒
終了時間: 2.00秒
テキスト: こんにちは、
---
開始時間: 2.00秒
終了時間: 4.00秒
テキスト: これは音声認識のテストです。
---
このように、Whisperを使用することで、簡単に音声データを文字起こしすることができます。
次のステップでは、音声データの翻訳処理について学んでいきます。
実践例:音声データの翻訳
Whisperを使用して音声データを翻訳する方法について説明します。
この実践例では、音声ファイルを文字起こしし、その内容を別の言語に翻訳します。
以下の手順に従って、音声データの翻訳を行いましょう。
音声ファイルの準備
翻訳を行いたい音声ファイルを用意します。
ここでは、英語の音声ファイルenglish_audio.mp3
を使用することにします。
この音声ファイルには、英語で話された内容が含まれています。
Whisperモデルのロード
Whisperのモデルをロードします。
ここでは、精度と速度のバランスが取れた base
モデルを使用します。
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
音声ファイルの文字起こし
音声ファイルを指定し、transcribe
メソッドを使用して文字起こしを行います。
ここでは、音声ファイルのパスを指定し、文字起こしを実行します。
# 音声ファイルのパスを指定
audio_file = "path/to/your/english_audio.mp3"
# 音声ファイルの文字起こし
result = model.transcribe(audio_file)
認識結果の取得
文字起こしの結果は、result
オブジェクトに格納されます。
ここでは、認識されたテキストを取得します。
# 認識結果の取得
transcribed_text = result["text"]
print("認識結果:", transcribed_text)
翻訳処理
次に、翻訳を行います。
ここでは、googletrans
ライブラリを使用して、英語から日本語に翻訳します。
まず、googletrans
をインストールしておく必要があります。
pip install googletrans==4.0.0-rc1
翻訳処理を行うためのコードは以下の通りです。
from googletrans import Translator
# 翻訳器のインスタンスを作成
translator = Translator()
# 英語から日本語に翻訳
translated_text = translator.translate(transcribed_text, src='en', dest='ja').text
print("翻訳結果:", translated_text)
サンプルコード全体
以下に、上記の手順をまとめたサンプルコードを示します。
import whisper
from googletrans import Translator
# Whisperモデルのロード
model = whisper.load_model("base")
# 音声ファイルのパスを指定
audio_file = "path/to/your/english_audio.mp3"
# 音声ファイルの文字起こし
result = model.transcribe(audio_file)
# 認識結果の取得
transcribed_text = result["text"]
print("認識結果:", transcribed_text)
# 翻訳器のインスタンスを作成
translator = Translator()
# 英語から日本語に翻訳
translated_text = translator.translate(transcribed_text, src='en', dest='ja').text
print("翻訳結果:", translated_text)
このコードを実行すると、指定した音声ファイルの内容が文字に起こされ、その後日本語に翻訳されます。
例えば、以下のような出力が得られるかもしれません。
認識結果: Hello, this is a test of the audio recognition system.
翻訳結果: こんにちは、これは音声認識システムのテストです。
このように、Whisperを使用して音声データを文字起こしし、その内容を翻訳することができます。
音声認識と翻訳を組み合わせることで、さまざまな言語の音声コンテンツを理解する手助けとなります。
次のステップでは、Whisperを活用する際の注意点について学んでいきます。
Whisperを活用する際の注意点
Whisperは非常に強力な音声認識ライブラリですが、使用する際にはいくつかの注意点があります。
以下に、Whisperを活用する際に考慮すべきポイントを示します。
音声の品質
音声認識の精度は、入力音声の品質に大きく依存します。
ノイズが多い環境や、音声が不明瞭な場合、認識精度が低下する可能性があります。
以下の点に注意してください。
- クリアな音声: 録音時には、できるだけクリアな音声を確保することが重要です。
- ノイズの除去: 背景ノイズを最小限に抑えるために、適切なマイクを使用し、静かな環境で録音することをお勧めします。
モデルサイズの選択
Whisperには複数のモデルサイズがあり、モデルサイズが大きくなるほど精度は向上しますが、処理時間も長くなります。
使用するモデルサイズは、以下の要因を考慮して選択してください。
- 処理速度: リアルタイム処理が必要な場合は、小さいモデルを選択することが適切です。
- 精度: 高精度が求められる場合は、大きなモデルを使用することを検討してください。
多言語対応の限界
Whisperは多言語に対応していますが、特定の言語や方言に対する認識精度は異なる場合があります。
特に、以下の点に注意が必要です。
- 稀少言語や方言: 一部の言語や方言では、認識精度が低下する可能性があります。
- 言語の明示的指定: 自動言語検出が正確でない場合、言語を明示的に指定することで精度を向上させることができます。
リアルタイム処理の制約
Whisperは主に録音済みの音声ファイルの処理に使用されますが、リアルタイム音声認識にも応用可能です。
ただし、リアルタイム処理には以下の制約があります。
- レイテンシー: 音声入力から認識結果が得られるまでの遅延が発生する可能性があります。
- 処理負荷: 継続的な音声処理は高い計算負荷がかかるため、適切なハードウェアリソースが必要です。
プライバシーとセキュリティ
音声データを扱う際には、プライバシーとセキュリティに注意が必要です。
特に、以下の点に留意してください。
- データの取り扱い: 音声データには個人情報が含まれる可能性があるため、適切に管理することが重要です。
- 匿名化: 必要に応じて、音声データを匿名化することでプライバシーを保護することができます。
後処理の必要性
Whisperの認識結果は非常に高精度ですが、後処理を行うことでさらに品質を向上させることができます。
以下の後処理技術を検討してください。
- テキストの正規化: 認識結果のテキストを小文字化や句読点の除去などで整形します。
- キーワード抽出: 重要な情報を抽出するために、キーワード抽出技術を使用します。
これらの注意点を考慮しながらWhisperを活用することで、より効果的な音声認識システムを構築することができます。
次のステップでは、Whisperの応用例とさらなる活用方法について学んでいきます。
応用例とさらなる活用方法
Whisperは音声認識技術を活用した多様なアプリケーションに利用できる強力なツールです。
以下に、Whisperの応用例とさらなる活用方法をいくつか紹介します。
自動字幕生成
Whisperを使用して、動画や音声ファイルに自動で字幕を生成することができます。
これにより、視聴者が内容を理解しやすくなり、アクセシビリティが向上します。
字幕ファイル(SRT形式)を生成することで、さまざまな動画プレイヤーで利用可能です。
import whisper
import moviepy.editor as mp
from datetime import timedelta
def generate_subtitles(audio_path, output_path):
model = whisper.load_model("base")
result = model.transcribe(audio_path)
with open(output_path, "w", encoding="utf-8") as f:
for i, segment in enumerate(result["segments"], start=1):
start = timedelta(seconds=int(segment["start"]))
end = timedelta(seconds=int(segment["end"]))
text = segment["text"].strip()
f.write(f"{i}\n{start} --> {end}\n{text}\n\n")
# 使用例
generate_subtitles("path/to/your/video_audio.mp3", "output_subtitles.srt")
音声要約
Whisperの音声認識機能を活用して、長時間の音声コンテンツを要約することができます。
音声をテキストに変換した後、自然言語処理技術を使用して要約を生成します。
これにより、重要な情報を迅速に把握することができます。
from transformers import pipeline
def summarize_text(text):
summarizer = pipeline("summarization")
summary = summarizer(text, max_length=150, min_length=50, do_sample=False)
return summary[0]['summary_text']
# 使用例
transcribed_text = "音声から得られたテキスト"
summary = summarize_text(transcribed_text)
print("要約:", summary)
リアルタイム音声認識
Whisperを使用して、マイクからの音声入力をリアルタイムで認識することができます。
これにより、音声アシスタントやインタラクティブなアプリケーションを構築することが可能です。
import pyaudio
import numpy as np
def process_audio_stream(in_data, frame_count, time_info, status):
audio_data = np.frombuffer(in_data, dtype=np.float32)
result = model.transcribe(audio_data)
print("認識結果:", result["text"])
return (in_data, pyaudio.paContinue)
# 音声入力の設定
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=16000, input=True, stream_callback=process_audio_stream)
stream.start_stream()
感情分析との統合
音声認識結果に対して感情分析を行うことで、話者の感情を推定することができます。
これにより、より深いコンテキスト理解が可能になります。
from transformers import pipeline
def analyze_emotion(text):
classifier = pipeline("sentiment-analysis")
result = classifier(text)
return result[0]['label'], result[0]['score']
# 使用例
emotion, confidence = analyze_emotion(transcribed_text)
print(f"感情: {emotion}, 信頼度: {confidence:.2f}")
データベースへの保存
音声認識結果をデータベースに保存することで、後で検索や分析を行うことができます。
SQLiteなどの軽量データベースを使用することで、簡単にデータを管理できます。
import sqlite3
def save_transcription_to_db(audio_file, transcription):
conn = sqlite3.connect('transcriptions.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS transcriptions
(id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_file TEXT,
transcription TEXT)''')
c.execute("INSERT INTO transcriptions (audio_file, transcription) VALUES (?, ?)",
(audio_file, transcription))
conn.commit()
conn.close()
# 使用例
save_transcription_to_db("audio_sample.mp3", transcribed_text)
教育やトレーニングの支援
Whisperを活用して、講義やトレーニングセッションの内容を文字起こしし、参加者に配布することで、学習効果を高めることができます。
また、音声データを分析することで、教育の質を向上させるためのフィードバックを得ることも可能です。
これらの応用例を通じて、Whisperはさまざまな分野での音声認識技術の活用を促進します。
音声データの処理や分析において、Whisperを効果的に活用することで、より多くの価値を引き出すことができるでしょう。
まとめ
この記事では、OpenAI Whisperを使用した音声の文字起こしや翻訳処理の基本から応用までを詳しく解説しました。
Whisperは高精度な音声認識を実現するための強力なツールであり、さまざまなアプリケーションに活用できる可能性を秘めています。
音声データの処理や分析に興味がある方は、ぜひWhisperを試してみて、実際のプロジェクトに取り入れてみてください。