[Python] mp3ファイルの音声を文字起こしする方法(Whisper/SpeechRecognition/STT)
Pythonでmp3ファイルの音声を文字起こしするには、いくつかの方法があります。
OpenAIのWhisperは高精度な音声認識モデルで、whisper
ライブラリを使用して音声をテキストに変換できます。
SpeechRecognition
ライブラリも一般的で、Google Web Speech APIなどを利用して音声認識が可能です。
音声ファイルを扱う際は、pydub
やffmpeg
を使ってmp3をwav形式に変換することが推奨されます。
Whisperを使った音声文字起こし
Whisperとは?
Whisperは、OpenAIが開発した汎用的な音声認識モデルです。
多言語に対応しており、音声からの文字起こしや翻訳を行うことができます。
Whisperは、68万時間に及ぶ音声データで学習されており、日本語の単語誤り率(WER)は6.4%と高い精度を誇ります。
モデルサイズは tiny
small
base
medium
large
の5種類があり、サイズが大きくなるほど精度が向上します。
Whisperのインストール方法
Whisperを使用するためには、まずPython環境を整え、必要なライブラリをインストールする必要があります。
以下のコマンドを実行して、Whisperをインストールします。
pip install git+https://github.com/openai/whisper.git
また、音声ファイルの処理にはFFmpegが必要です。
FFmpegをインストールするには、公式サイトからダウンロードし、環境変数にパスを追加してください。
mp3ファイルの読み込みと変換
Whisperはmp3ファイルを直接扱うことができますが、場合によってはwav形式に変換することが推奨されます。
以下のコードは、pydubライブラリを使用してmp3ファイルをwav形式に変換する方法です。
from pydub import AudioSegment
# mp3ファイルを読み込む
audio = AudioSegment.from_mp3("example.mp3")
# wav形式で保存する
audio.export("example.wav", format="wav")
このコードを実行すると、example.wav
という名前のwavファイルが生成されます。
Whisperでの文字起こしの実行
Whisperを使用して音声ファイルを文字起こしするには、以下のようにコードを記述します。
import whisper
# Whisperモデルの読み込み
model = whisper.load_model("tiny")
# 音声ファイルの文字起こし
result = model.transcribe("example.wav")
print(result["text"])
このコードを実行すると、example.wav
の音声が文字起こしされ、結果がコンソールに表示されます。
Whisperの精度とパフォーマンス
Whisperの精度はモデルのサイズによって異なります。
一般的に、サイズが大きいほど精度が向上しますが、処理速度は遅くなる傾向があります。
以下は、各モデルサイズの特徴です。
モデルサイズ | 精度 | 処理速度 |
---|---|---|
tiny | 低 | 高 |
small | 中 | 中 |
base | 中 | 中 |
medium | 高 | 低 |
large | 非常に高 | 非常に低 |
音声の品質や内容によっても精度は変動するため、実際の使用環境に応じてモデルを選択することが重要です。
Whisperの応用例
Whisperはさまざまな場面で活用できます。
以下はその一部です。
- 会議の議事録作成: オンライン会議の音声を文字起こしし、議事録を自動生成することができます。
- ポッドキャストの文字起こし: ポッドキャストのエピソードを文字に起こし、リスナーに提供することができます。
- 音声データの分析: 音声データからキーワードを抽出し、分析を行うことができます。
- 教育用途: 語学学習のために、リスニング教材の文字起こしを行うことができます。
Whisperを活用することで、音声データの処理が効率化され、さまざまな分野での応用が期待されます。
SpeechRecognitionを使った音声文字起こし
SpeechRecognitionとは?
SpeechRecognitionは、Pythonで音声認識を行うためのライブラリです。
このライブラリを使用することで、音声データをテキストに変換することができます。
Google Web Speech APIをはじめ、IBM Watson、Microsoft Azureなど、複数の音声認識サービスに対応しており、簡単に音声文字起こしを実現できます。
特に、Google Web Speech APIは無料で利用できるため、多くの開発者に利用されています。
SpeechRecognitionのインストール方法
SpeechRecognitionを使用するためには、まずPython環境を整え、必要なライブラリをインストールする必要があります。
以下のコマンドを実行して、SpeechRecognitionをインストールします。
pip install SpeechRecognition
また、音声ファイルの処理にはpydubやffmpegが必要です。
pydubをインストールするには、以下のコマンドを実行します。
pip install pydub
FFmpegは公式サイトからダウンロードし、環境変数にパスを追加してください。
mp3ファイルの読み込みと変換
SpeechRecognitionはmp3ファイルを直接扱うことができますが、場合によってはwav形式に変換することが推奨されます。
以下のコードは、pydubライブラリを使用してmp3ファイルをwav形式に変換する方法です。
from pydub import AudioSegment
# mp3ファイルを読み込む
audio = AudioSegment.from_mp3("example.mp3")
# wav形式で保存する
audio.export("example.wav", format="wav")
このコードを実行すると、example.wav
という名前のwavファイルが生成されます。
Google Web Speech APIを使った文字起こし
Google Web Speech APIを使用して音声ファイルを文字起こしするには、以下のようにコードを記述します。
import speech_recognition as sr
# Recognizerのインスタンスを作成
recognizer = sr.Recognizer()
# 音声ファイルを読み込む
with sr.AudioFile("example.wav") as source:
audio_data = recognizer.record(source)
# Google Web Speech APIを使って文字起こし
try:
text = recognizer.recognize_google(audio_data, language='ja-JP')
print("文字起こし結果:", text)
except sr.UnknownValueError:
print("音声を認識できませんでした。")
except sr.RequestError as e:
print(f"APIリクエストエラー: {e}")
このコードを実行すると、example.wav
の音声が文字起こしされ、結果がコンソールに表示されます。
他のAPIを使った文字起こし
SpeechRecognitionライブラリは、Google Web Speech API以外にもさまざまな音声認識APIに対応しています。
以下は、IBM Watsonを使用した文字起こしの例です。
import speech_recognition as sr
# Recognizerのインスタンスを作成
recognizer = sr.Recognizer()
# 音声ファイルを読み込む
with sr.AudioFile("example.wav") as source:
audio_data = recognizer.record(source)
# IBM Watsonを使って文字起こし
try:
text = recognizer.recognize_ibm(audio_data, username='YOUR_IBM_USERNAME', password='YOUR_IBM_PASSWORD', language='ja-JP')
print("文字起こし結果:", text)
except sr.UnknownValueError:
print("音声を認識できませんでした。")
except sr.RequestError as e:
print(f"APIリクエストエラー: {e}")
このコードを実行するには、IBM Cloudのアカウントを作成し、APIキーを取得する必要があります。
SpeechRecognitionの精度とパフォーマンス
SpeechRecognitionの精度は、使用する音声認識APIや音声データの品質によって異なります。
一般的に、Google Web Speech APIは高い精度を誇りますが、音声のクリアさや背景ノイズの影響を受けることがあります。
以下は、各APIの特徴です。
API名 | 精度 | 特徴 |
---|---|---|
Google Web Speech API | 高 | 無料で使える、広範な言語サポート |
IBM Watson | 高 | ビジネス向けの機能が豊富 |
Microsoft Azure | 高 | クラウドサービスとの統合が容易 |
音声の品質や内容によっても精度は変動するため、実際の使用環境に応じてAPIを選択することが重要です。
SpeechRecognitionの応用例
SpeechRecognitionはさまざまな場面で活用できます。
以下はその一部です。
- 会議の議事録作成: オンライン会議の音声を文字起こしし、議事録を自動生成することができます。
- ポッドキャストの文字起こし: ポッドキャストのエピソードを文字に起こし、リスナーに提供することができます。
- 音声データの分析: 音声データからキーワードを抽出し、分析を行うことができます。
- 教育用途: 語学学習のために、リスニング教材の文字起こしを行うことができます。
SpeechRecognitionを活用することで、音声データの処理が効率化され、さまざまな分野での応用が期待されます。
音声ファイルの前処理
mp3ファイルをwav形式に変換する方法
音声認識を行う前に、mp3ファイルをwav形式に変換することが一般的です。
wav形式は、音声データを非圧縮で保存するため、音質が保たれやすく、音声認識の精度向上に寄与します。
以下の方法でmp3ファイルをwav形式に変換できます。
pydubを使った音声ファイルの変換
pydubライブラリを使用すると、簡単に音声ファイルの形式を変換できます。
以下は、pydubを使ってmp3ファイルをwav形式に変換するコードです。
from pydub import AudioSegment
# mp3ファイルを読み込む
audio = AudioSegment.from_mp3("example.mp3")
# wav形式で保存する
audio.export("example.wav", format="wav")
このコードを実行すると、example.wav
という名前のwavファイルが生成されます。
pydubは、音声ファイルの切り出しや結合など、さまざまな音声処理機能も提供しています。
ffmpegを使った音声ファイルの変換
ffmpegは、音声や動画の変換、編集を行うための強力なツールです。
コマンドラインから直接使用することができ、以下のコマンドでmp3ファイルをwav形式に変換できます。
ffmpeg -i example.mp3 example.wav
このコマンドを実行すると、example.wav
という名前のwavファイルが生成されます。
ffmpegは多くのフォーマットに対応しており、音声ファイルの変換だけでなく、エンコードやデコード、フィルタリングなども行えます。
音声ファイルのノイズ除去とクリーニング
音声認識の精度を向上させるためには、音声ファイルのノイズを除去することが重要です。
pydubやlibrosaなどのライブラリを使用して、ノイズ除去を行うことができます。
以下は、pydubを使用して音声ファイルのノイズを除去する例です。
from pydub import AudioSegment
from pydub.playback import play
# 音声ファイルを読み込む
audio = AudioSegment.from_wav("example.wav")
# ノイズを除去するために、音量を下げる
cleaned_audio = audio - 10 # 音量を10dB下げる
# クリーニングした音声を保存する
cleaned_audio.export("cleaned_example.wav", format="wav")
このコードを実行すると、ノイズが除去されたcleaned_example.wav
が生成されます。
音声のクリーニングには、他にもさまざまな手法があり、必要に応じて適切な方法を選択することが重要です。
音声ファイルのサンプリングレートの調整
音声ファイルのサンプリングレートは、音声の品質に大きく影響します。
一般的に、音声認識には16kHzまたは44.1kHzのサンプリングレートが推奨されます。
pydubを使用して音声ファイルのサンプリングレートを調整する方法は以下の通りです。
from pydub import AudioSegment
# 音声ファイルを読み込む
audio = AudioSegment.from_wav("example.wav")
# サンプリングレートを変更する
audio = audio.set_frame_rate(16000) # 16kHzに設定
# 変更した音声を保存する
audio.export("resampled_example.wav", format="wav")
このコードを実行すると、サンプリングレートが16kHzに調整されたresampled_example.wav
が生成されます。
音声認識の精度を向上させるために、適切なサンプリングレートを選択することが重要です。
STT(Speech-to-Text)技術の比較
WhisperとSpeechRecognitionの違い
WhisperとSpeechRecognitionは、どちらも音声認識を行うための技術ですが、いくつかの重要な違いがあります。
- モデルのアプローチ: WhisperはOpenAIが開発した深層学習モデルであり、音声データを直接処理します。
一方、SpeechRecognitionは複数の音声認識API(Google Web Speech API、IBM Watsonなど)を利用するラッパーライブラリです。
- 精度とパフォーマンス: Whisperは高い精度を持ち、多言語に対応していますが、モデルのサイズによって処理速度が変わります。
SpeechRecognitionは、使用するAPIによって精度が異なり、Google Web Speech APIは特に高い精度を誇ります。
- 使用の簡便さ: SpeechRecognitionは、APIを簡単に利用できるため、初心者でも扱いやすいです。
Whisperは、モデルのロードや設定が必要で、少し複雑です。
Whisperの強みと弱み
強み:
- 高い精度: Whisperは多言語に対応し、特に日本語の単語誤り率が低いです。
- オフラインでの使用: Whisperはローカルで動作するため、インターネット接続が不要です。
- 多機能: 音声認識だけでなく、音声翻訳や言語識別も行えます。
弱み:
- モデルサイズ: 大きなモデルはメモリを多く消費し、処理速度が遅くなることがあります。
- セットアップの複雑さ: 環境構築やモデルの選択が必要で、初心者にはハードルが高い場合があります。
SpeechRecognitionの強みと弱み
強み:
- 簡単なインターフェース: APIを簡単に利用できるため、初心者でも扱いやすいです。
- 複数のAPIに対応: Google、IBM、Microsoftなど、さまざまな音声認識サービスを利用できます。
- 無料プラン: Google Web Speech APIは無料で利用できるため、コストを抑えられます。
弱み:
- インターネット接続が必要: 多くのAPIはオンラインで動作するため、インターネット接続が必須です。
- 精度のばらつき: 使用するAPIによって精度が異なり、特に背景ノイズや音質に影響されやすいです。
他のSTTライブラリやAPIの紹介
- Google Cloud Speech-to-Text: 高精度な音声認識を提供し、多言語に対応。
API利用には料金が発生します。
- IBM Watson Speech to Text: ビジネス向けの機能が豊富で、カスタマイズが可能です。
- Microsoft Azure Speech Service: クラウドベースの音声認識サービスで、リアルタイム音声認識が可能です。
- Kaldi: オープンソースの音声認識ツールキットで、高度なカスタマイズが可能ですが、設定が複雑です。
どのSTT技術を選ぶべきか?
STT技術を選ぶ際は、以下のポイントを考慮することが重要です。
- 使用目的: 音声認識の目的(会議の議事録作成、ポッドキャストの文字起こしなど)によって、必要な精度や機能が異なります。
- 環境: オフラインでの使用が必要な場合はWhisperが適していますが、オンラインでの利用が可能であればSpeechRecognitionや他のAPIを選択できます。
- コスト: 無料プランを利用したい場合は、Google Web Speech APIが適していますが、商用利用の場合は他のAPIの料金を考慮する必要があります。
- 技術的なスキル: 環境構築やモデルの選択に自信がない場合は、簡単に使えるSpeechRecognitionを選ぶと良いでしょう。
これらの要素を考慮し、自分のニーズに最適なSTT技術を選択することが重要です。
応用例:音声データの自動分析
会議録の自動文字起こし
音声認識技術を活用することで、会議の音声を自動的に文字起こしし、議事録を作成することができます。
これにより、会議の内容を迅速に記録し、参加者が後から確認できるようになります。
以下は、Whisperを使用した会議録の自動文字起こしの例です。
import whisper
# Whisperモデルの読み込み
model = whisper.load_model("small")
# 会議の音声ファイルを文字起こし
result = model.transcribe("meeting_audio.wav")
print("会議録:", result["text"])
このように、音声ファイルを指定するだけで、会議の内容をテキストとして取得できます。
議事録作成の手間を大幅に削減できるため、業務効率が向上します。
ポッドキャストの文字起こしと要約
ポッドキャストのエピソードを文字起こしし、その内容を要約することで、リスナーにとっての利便性を向上させることができます。
音声認識を用いて、エピソードの内容をテキスト化し、要約アルゴリズムを適用することで、短時間で重要な情報を把握できるようになります。
以下は、SpeechRecognitionを使用したポッドキャストの文字起こしの例です。
import speech_recognition as sr
# Recognizerのインスタンスを作成
recognizer = sr.Recognizer()
# ポッドキャストの音声ファイルを読み込む
with sr.AudioFile("podcast_episode.wav") as source:
audio_data = recognizer.record(source)
# Google Web Speech APIを使って文字起こし
text = recognizer.recognize_google(audio_data, language='ja-JP')
print("ポッドキャストの内容:", text)
このようにして得られたテキストを要約することで、リスナーはエピソードの重要なポイントを短時間で把握できます。
音声データからのキーワード抽出
音声データから重要なキーワードを抽出することで、内容の分析や検索が容易になります。
音声認識を用いて得られたテキストから、自然言語処理技術を使ってキーワードを抽出することができます。
以下は、Pythonのnltk
ライブラリを使用したキーワード抽出の例です。
import nltk
from nltk.tokenize import word_tokenize
from collections import Counter
# 文字起こしされたテキスト
transcribed_text = "音声データからキーワードを抽出することができます。"
# トークン化
tokens = word_tokenize(transcribed_text)
# キーワードの頻度をカウント
keywords = Counter(tokens)
print("キーワード:", keywords.most_common(5))
このコードを実行すると、テキスト内で最も頻出するキーワードを抽出できます。
これにより、音声データの内容を効率的に分析することが可能です。
音声認識を使ったチャットボットの構築
音声認識技術を活用して、音声で対話できるチャットボットを構築することができます。
ユーザーが音声で質問をすると、チャットボットが音声認識を通じてその内容を理解し、適切な応答を返すことができます。
以下は、音声認識を用いたチャットボットの基本的な実装例です。
import speech_recognition as sr
import pyttsx3
# 音声合成エンジンの初期化
engine = pyttsx3.init()
# Recognizerのインスタンスを作成
recognizer = sr.Recognizer()
while True:
with sr.Microphone() as source:
print("質問をどうぞ:")
audio_data = recognizer.listen(source)
try:
# 音声をテキストに変換
question = recognizer.recognize_google(audio_data, language='ja-JP')
print("あなたの質問:", question)
# 簡単な応答
response = "その質問については、まだ学習中です。"
print("チャットボットの応答:", response)
# 音声で応答
engine.say(response)
engine.runAndWait()
except sr.UnknownValueError:
print("音声を認識できませんでした。")
except sr.RequestError as e:
print(f"APIリクエストエラー: {e}")
このコードを実行すると、ユーザーが音声で質問をすると、チャットボットが応答します。
音声認識と音声合成を組み合わせることで、インタラクティブな体験を提供できます。
これらの応用例を通じて、音声データの自動分析がさまざまな分野での業務効率化や利便性向上に寄与することが期待されます。
まとめ
この記事では、音声認識技術であるWhisperとSpeechRecognitionの特徴や使い方、音声ファイルの前処理方法、さらには音声データの自動分析の応用例について詳しく解説しました。
これにより、音声データを効率的に処理し、さまざまな場面で活用する方法が明らかになりました。
音声認識技術を活用することで、業務の効率化や新たなサービスの提供が可能になるため、ぜひ実際に試してみて、自分のプロジェクトに取り入れてみてください。