sp / app.py
GAS17's picture
Update app.py
c887c55 verified
raw
history blame
2.91 kB
import os
import replicate
import gradio as gr
from pydub import AudioSegment
# Aseg煤rate de que REPLICATE_API_TOKEN est茅 configurado en las variables de entorno
replicate_token = os.getenv("REPLICATE_API_TOKEN")
if not replicate_token:
raise ValueError("No se ha encontrado el token de API de Replicate.")
# Funci贸n para dividir el archivo de audio en segmentos de duraci贸n definida (en milisegundos)
def dividir_audio(audio_path, segment_duration_ms=60000):
audio = AudioSegment.from_file(audio_path)
audio_length = len(audio)
segments = []
# Divide el audio en fragmentos
for i in range(0, audio_length, segment_duration_ms):
segment = audio[i:i+segment_duration_ms]
segment_path = f"segment_{i // 1000}.wav"
segment.export(segment_path, format="wav") # Exporta el fragmento como un archivo WAV
segments.append(segment_path)
return segments
# Funci贸n para transcribir el audio
def transcribe_audio(audio_file):
# Cargar el archivo de audio completo
audio = AudioSegment.from_file(audio_file)
audio_duration_minutes = len(audio) / (1000 * 60) # Duraci贸n en minutos
# Si el audio dura m谩s de 10 minutos, dividirlo en segmentos de 1 minuto
if audio_duration_minutes > 10:
segments = dividir_audio(audio_file, segment_duration_ms=60000)
else:
segments = [audio_file] # Si es menor de 10 minutos, no dividir
# Almacenar todas las transcripciones
all_transcriptions = []
# Procesar cada segmento individualmente
for segment_path in segments:
with open(segment_path, "rb") as audio:
output = replicate.run(
"vaibhavs10/incredibly-fast-whisper:3ab86df6c8f54c11309d4d1f930ac292bad43ace52d10c80d87eb258b3c9f79c",
input={
"task": "transcribe",
"audio": audio, # El archivo de audio cargado en Gradio
"language": "None", # Detecta autom谩ticamente el idioma
"timestamp": "chunk", # Incluye marcas de tiempo
"batch_size": 64,
"diarise_audio": False
}
)
# Almacenar la transcripci贸n del segmento
all_transcriptions.append(output['text'])
# Combina todas las transcripciones en una sola cadena
full_transcription = "\n".join(all_transcriptions)
return full_transcription # Devuelve la transcripci贸n completa
# Crea la interfaz de Gradio
with gr.Blocks() as demo:
gr.Markdown("# Transcripci贸n de Audio usando Whisper")
audio_input = gr.Audio(type="filepath", label="Sube tu archivo de audio")
output_text = gr.Textbox(label="Transcripci贸n")
transcribe_button = gr.Button("Transcribir")
transcribe_button.click(fn=transcribe_audio, inputs=audio_input, outputs=output_text)
# Ejecuta la aplicaci贸n
demo.launch()