Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
from openai import OpenAI | |
from io import BytesIO | |
from pydub import AudioSegment | |
import imageio_ffmpeg | |
# imageio-ffmpegからffmpegの実行可能ファイルのパスを取得 | |
ffmpeg_path = imageio_ffmpeg.get_ffmpeg_exe() | |
# pydubで使用するffmpegのパスを設定 | |
AudioSegment.converter = ffmpeg_path | |
AudioSegment.ffprobe = ffmpeg_path | |
# OpenAIクライアントの初期化 | |
client = OpenAI() | |
def process_audio(audio_file, output_format): | |
# 音声ファイルを読み込む | |
audio_data = audio_file.read() | |
file_type = audio_file.name.split('.')[-1] | |
audio = AudioSegment.from_file(BytesIO(audio_data), format=file_type) | |
if file_type != "mp3": | |
mp3_buffer = BytesIO() | |
audio.export(mp3_buffer, format="mp3") | |
mp3_buffer.seek(0) | |
audio_data = mp3_buffer | |
# OpenAIを使用してテキストに変換 | |
transcript = client.audio.transcriptions.create( | |
model="whisper-1", | |
file=BytesIO(audio_data) | |
) | |
if output_format == "テキスト": | |
return transcript.text | |
elif output_format == "Docx": | |
from docx import Document | |
doc = Document() | |
doc.add_paragraph(transcript.text) | |
docx_buffer = BytesIO() | |
doc.save(docx_buffer) | |
docx_buffer.seek(0) | |
return docx_buffer | |
iface = gr.Interface( | |
fn=process_audio, | |
inputs=[ | |
gr.inputs.Audio(type="file", label="音声ファイルをアップロード"), | |
gr.inputs.Radio(choices=["テキスト", "Docx"], label="出力フォーマットを選択") | |
], | |
outputs=[ | |
gr.outputs.Textbox(label="テキスト出力") if output_format == "テキスト" else gr.outputs.File(label="Word文書をダウンロード") | |
], | |
title="音声ファイルをテキストに変換", | |
description="このツールは音声ファイルをテキストに変換します。出力形式としてテキストまたはWord文書を選択できます。" | |
) | |
iface.launch() | |