ライブラリのインストール
文字を音声にするのは、わりと早くできたのですが、音声を文字にするのは、けっこう大変でした。
でも最終的にうまくできたので、よかったです。
GoogleColabにコピペするコードなので、環境設定不要、Googleアカウントをもってさえいれば、すぐ活用できます!
ライブラリのインストール
このコードは、音声処理と音声認識のためのライブラリをインストールし、ffmpegツールをシステムにインストールするためのものです。
# ライブラリのインストール
!pip install pydub speechrecognition
!pip install pydub speechrecognition
:pydub
ライブラリをインストールします。これは音声ファイルの操作を簡単にするためのPythonライブラリです。speechrecognition
ライブラリをインストールします。これは音声データをテキストに変換するためのライブラリです。
ffmpegのインストール
# ffmpegのインストール
!apt-get install ffmpeg -y
!apt-get install ffmpeg -y
:ffmpeg
をシステムにインストールします。これは音声や動画の変換や編集に使われる強力なツールです。y
オプションは、インストール中のすべての確認プロンプトに自動的に「yes」と答えるためのものです。
使用ライブラリの簡単な説明
- pydub:
- 音声ファイルの読み込み、書き込み、変換、編集を行うためのライブラリ。
ffmpeg
やavlib
との連携で多様な音声形式を扱うことができます。
- 音声ファイルの読み込み、書き込み、変換、編集を行うためのライブラリ。
- speechrecognition:
- 音声認識エンジンを使用して音声データをテキストに変換するためのライブラリ。Google Web Speech API、Microsoft Bing Voice Recognition、IBM Speech to Textなど、複数の音声認識サービスと連携します。
- ffmpeg:
- 音声および動画の変換、編集、ストリーミングのためのコマンドラインツール。多様なフォーマットのサポートと高い柔軟性が特徴です。
from google.colab import drive drive.mount('/content/drive')
from google.colab import drive
:- Google Colabの
drive
モジュールをインポートします。これは、Google Colab環境からGoogleドライブにアクセスするための特別なモジュールです。
drive.mount('/content/drive')
:- Googleドライブを
/content/drive
ディレクトリにマウントします。このコマンドを実行すると、認証プロセスが始まり、ユーザーはGoogleアカウントにログインして権限を付与する必要があります。マウントが成功すると、Googleドライブのファイルやフォルダに対して通常のファイル操作が可能になります。
- Google Colabの
ライブラリの簡単な説明- google.colab.drive:
- Google ColabでGoogleドライブをマウントするためのモジュールです。これを使うことで、Googleドライブ内のデータセットやファイルを直接Colabのノートブックから読み書きすることができます。
- 実行すると、ユーザーは認証リンクをクリックし、Googleアカウントにログインして、認証コードをコピーしてColabに貼り付けます。マウントが成功すると、Googleドライブの内容が
/content/drive
ディレクトリ以下に表示されます。
from google.colab import files
from google.colab import files
:- Google Colabの
files
モジュールをインポートします。これにより、ローカルファイルのアップロードやダウンロードが可能になります。
- Google Colabの
uploaded = files.upload()
uploaded = files.upload()
:- ユーザーがローカルファイルをGoogle Colab環境にアップロードするためのダイアログを表示します。アップロードされたファイルは、辞書形式で
uploaded
変数に保存されます。この辞書のキーはファイル名で、値はファイルのバイナリデータです。
- ユーザーがローカルファイルをGoogle Colab環境にアップロードするためのダイアログを表示します。アップロードされたファイルは、辞書形式で
for filename in uploaded.keys(): print(f'アップロードされたファイル: {filename}')
for filename in uploaded.keys():
:- アップロードされたファイルのファイル名(辞書のキー)を繰り返し処理します。
print(f'アップロードされたファイル: {filename}')
:- 各ファイル名を出力します。アップロードされたすべてのファイルの名前が表示されます。
ライブラリの簡単な説明- google.colab.files:
- Google Colabでファイルのアップロードやダウンロードを行うためのモジュールです。ローカルファイルをGoogle Colab環境に簡単に取り込むことができます。
- コードを実行すると、ファイルアップロードのダイアログが表示されます。
- ユーザーがファイルを選択すると、そのファイルがアップロードされ、指定されたディレクトリに保存されます。
- アップロードが完了すると、ファイル名が表示されます。例えば:
アップロードされたファイル: example.txt アップロードされたファイル: data.csv
音声をテキストに変換してその結果をGoogleドライブに保存主なタスクこのコードは、音声ファイルを文字起こしするためのもので、以下の主なタスクを実行します:- アップロードされた音声ファイルをWAV形式に変換します。変換されたWAVファイルを使って音声認識を行い、テキストに変換します。音声ファイルが5分以上の場合、5分ごとに分割してそれぞれ文字起こしを行い、結果を結合します。文字起こし結果をテキストファイルとして保存し、Googleドライブに保存されたファイルのパスを表示します。
from pydub import AudioSegment import speech_recognition as sr import os from google.colab import files # サポートされている音声フォーマット SUPPORTED_FORMATS = ['.mp3', '.wav', '.flac', '.ogg', '.aiff', '.mp4', '.aac', '.wma', '.amr', '.m4a']
pydub
ライブラリは音声ファイルの操作(読み込み、変換など)を容易にします。speech_recognition
ライブラリは音声認識を行うために使用されます。os
ライブラリは、ファイルパスの操作に使用されます。google.colab
からfiles
モジュールをインポートして、ファイルのアップロードをサポートします。SUPPORTED_FORMATS
リストは、サポートされている音声ファイル形式を定義します。
# 音声ファイルをWAVファイルに変換 def convert_to_wav(audio_file, wav_file): audio = AudioSegment.from_file(audio_file) audio.export(wav_file, format="wav")
convert_to_wav
関数は、任意の音声ファイルをWAV形式に変換します。
# 音声ファイルを文字起こし def transcribe_audio(wav_file, start_ms=0, end_ms=None): recognizer = sr.Recognizer() audio = AudioSegment.from_wav(wav_file) if end_ms is None: end_ms = len(audio) audio_segment = audio[start_ms:end_ms] audio_segment.export("temp_segment.wav", format="wav") with sr.AudioFile("temp_segment.wav") as source: audio_data = recognizer.record(source) try: text = recognizer.recognize_google(audio_data, language="ja-JP") return text except sr.UnknownValueError: return "音声を理解できませんでした。" except sr.RequestError as e: return f"Google Speech Recognitionサービスにアクセスできませんでした; {e}"
transcribe_audio
関数は、WAVファイルを受け取り、指定された範囲の音声をGoogle Speech Recognition APIを使って文字起こしします。start_ms
とend_ms
で指定された範囲の音声を抽出し、一時的なWAVファイルに保存します。sr.Recognizer
とsr.AudioFile
を使って音声データを読み込み、Googleの音声認識サービスを使ってテキストに変換します。
# メイン処理 uploaded_file = list(uploaded.keys())[0] # アップロードされたファイルの名前を取得 file_ext = os.path.splitext(uploaded_file)[1].lower() # ファイルの拡張子を取得 file_base = os.path.splitext(uploaded_file)[0] # ファイルのベース名を取得
- アップロードされたファイルの名前と拡張子を取得し、ベース名(拡張子を除いた部分)を取得します。
if file_ext in SUPPORTED_FORMATS: if file_ext == '.wav': wav_file = uploaded_file else: wav_file = file_base + ".wav" convert_to_wav(uploaded_file, wav_file) else: raise ValueError(f"サポートされていないファイル形式です: {file_ext}")
- ファイルの拡張子がサポートされている形式かどうかをチェックします。もし
.wav
形式でない場合、convert_to_wav
関数を使ってWAV形式に変換します。
# 音声ファイルの長さを取得 audio = AudioSegment.from_wav(wav_file) audio_length_ms = len(audio)
- 変換されたWAVファイルの長さ(ミリ秒単位)を取得します。
# 5分以内のデータかどうかをチェック if audio_length_ms <= 5 * 60 * 1000: # 5分以内 full_transcription = transcribe_audio(wav_file) else: segment_length_ms = 5 * 60 * 1000 # 5分ごとに分割(300秒) transcriptions = [] for start_ms in range(0, audio_length_ms, segment_length_ms): end_ms = min(start_ms + segment_length_ms, audio_length_ms) print(f"文字起こし中: {start_ms // 1000}秒 から {end_ms // 1000}秒 まで") text = transcribe_audio(wav_file, start_ms, end_ms) transcriptions.append(text) # すべての文字起こし結果を結合 full_transcription = "\\n".join(transcriptions)
- 音声ファイルが5分以内であれば、全体を一度に文字起こしします。5分を超える場合、5分ごとに分割して部分的に文字起こしを行い、結果を結合します。
# 結果を表示 print(full_transcription) # 結果をテキストファイルに保存 output_file_path = f"/content/drive/My Drive/{file_base}.txt" with open(output_file_path, "w") as f: f.write(full_transcription) # Google Driveに保存されたテキストファイルのパスを表示 print(f"文字起こし結果が保存されました: {output_file_path}")
- 最終的な文字起こし結果を表示し、テキストファイルとして保存します。Googleドライブに保存されたファイルのパスを表示します。
- pydub: 音声ファイルの操作(読み込み、変換、分割など)を行うためのライブラリです。speech_recognition: 音声認識を行うためのライブラリで、Google Speech Recognition APIなどを使用して音声をテキストに変換します。os: ファイルパスの操作やシステムコマンドの実行に使用される標準ライブラリです。google.colab.files: Google Colab環境でファイルのアップロードやダウンロードをサポートするモジュールです。
コード
# ライブラリのインストール
!pip install pydub speechrecognition
# ffmpegのインストール
!apt-get install ffmpeg -y
# Googledriveにマウントする
from google.colab import drive
drive.mount('/content/drive')
# 音声ファイルのアップロード
from google.colab import files
uploaded = files.upload()
for filename in uploaded.keys():
print(f'アップロードされたファイル: {filename}')
from pydub import AudioSegment
import speech_recognition as sr
import os
from google.colab import files
# サポートされている音声フォーマット
SUPPORTED_FORMATS = ['.mp3', '.wav', '.flac', '.ogg', '.aiff', '.mp4', '.aac', '.wma', '.amr', '.m4a']
# 音声ファイルをWAVファイルに変換
def convert_to_wav(audio_file, wav_file):
audio = AudioSegment.from_file(audio_file)
audio.export(wav_file, format="wav")
# 音声ファイルを文字起こし
def transcribe_audio(wav_file, start_ms=0, end_ms=None):
recognizer = sr.Recognizer()
audio = AudioSegment.from_wav(wav_file)
if end_ms is None:
end_ms = len(audio)
audio_segment = audio[start_ms:end_ms]
audio_segment.export("temp_segment.wav", format="wav")
with sr.AudioFile("temp_segment.wav") as source:
audio_data = recognizer.record(source)
try:
text = recognizer.recognize_google(audio_data, language="ja-JP")
return text
except sr.UnknownValueError:
return "音声を理解できませんでした。"
except sr.RequestError as e:
return f"Google Speech Recognitionサービスにアクセスできませんでした; {e}"
# メイン処理
uploaded_file = list(uploaded.keys())[0] # アップロードされたファイルの名前を取得
file_ext = os.path.splitext(uploaded_file)[1].lower() # ファイルの拡張子を取得
file_base = os.path.splitext(uploaded_file)[0] # ファイルのベース名を取得
if file_ext in SUPPORTED_FORMATS:
if file_ext == '.wav':
wav_file = uploaded_file
else:
wav_file = file_base + ".wav"
convert_to_wav(uploaded_file, wav_file)
else:
raise ValueError(f"サポートされていないファイル形式です: {file_ext}")
# 音声ファイルの長さを取得
audio = AudioSegment.from_wav(wav_file)
audio_length_ms = len(audio)
# 5分以内のデータかどうかをチェック
if audio_length_ms <= 5 * 60 * 1000: # 5分以内
full_transcription = transcribe_audio(wav_file)
else:
segment_length_ms = 5 * 60 * 1000 # 5分ごとに分割(300秒)
transcriptions = []
for start_ms in range(0, audio_length_ms, segment_length_ms):
end_ms = min(start_ms + segment_length_ms, audio_length_ms)
print(f"文字起こし中: {start_ms // 1000}秒 から {end_ms // 1000}秒 まで")
text = transcribe_audio(wav_file, start_ms, end_ms)
transcriptions.append(text)
# すべての文字起こし結果を結合
full_transcription = "\n".join(transcriptions)
# 結果を表示
print(full_transcription)
# 結果をテキストファイルに保存
output_file_path = f"/content/drive/My Drive/{file_base}.txt"
with open(output_file_path, "w") as f:
f.write(full_transcription)
# Google Driveに保存されたテキストファイルのパスを表示