Spaces:
Sleeping
Sleeping
from transformers import pipeline | |
from pydub import AudioSegment | |
from pydub.utils import make_chunks | |
import os | |
import gradio as gr | |
# Inicializar el modelo de Hugging Face | |
modelo = pipeline("automatic-speech-recognition", model="facebook/wav2vec2-large-xlsr-53-spanish") | |
# Funci贸n para dividir audios largos en fragmentos | |
def dividir_audio(input_path, output_dir, chunk_length_ms=30000): | |
""" | |
Divide un archivo de audio en fragmentos m谩s peque帽os. | |
Args: | |
input_path (str): Ruta al archivo de audio original. | |
output_dir (str): Carpeta donde se guardar谩n los fragmentos. | |
chunk_length_ms (int): Duraci贸n de cada fragmento en milisegundos. | |
""" | |
audio = AudioSegment.from_file(input_path) | |
chunks = make_chunks(audio, chunk_length_ms) | |
os.makedirs(output_dir, exist_ok=True) | |
for i, chunk in enumerate(chunks): | |
chunk_name = os.path.join(output_dir, f"chunk_{i}.wav") | |
chunk.export(chunk_name, format="wav") | |
print(f"Guardado: {chunk_name}") | |
# Funci贸n para transcribir audios | |
def transcribir_audio(audio_path): | |
""" | |
Transcribe un archivo de audio usando Hugging Face. | |
Args: | |
audio_path (str): Ruta al archivo de audio. | |
Returns: | |
str: Texto transcrito. | |
""" | |
print(f"Procesando: {audio_path}") | |
result = modelo(audio_path) | |
return result["text"] | |
# Funci贸n principal para manejar la transcripci贸n desde la interfaz | |
def procesar_audio(input_audio): | |
output_dir = "chunks" | |
chunk_length_ms = 30000 # Dividir en fragmentos de 30 segundos | |
# Guardar el archivo cargado temporalmente | |
input_audio_path = "input_audio.wav" | |
input_audio.export(input_audio_path, format="wav") | |
print("Dividiendo audio...") | |
dividir_audio(input_audio_path, output_dir, chunk_length_ms) | |
print("Transcribiendo fragmentos...") | |
transcripcion_final = [] | |
for filename in sorted(os.listdir(output_dir)): | |
if filename.endswith(".wav"): | |
filepath = os.path.join(output_dir, filename) | |
texto = transcribir_audio(filepath) | |
transcripcion_final.append(texto) | |
# Concatenar la transcripci贸n final | |
transcripcion_completa = " ".join(transcripcion_final) | |
# Devolver la transcripci贸n completa | |
return transcripcion_completa | |
# Crear la interfaz de usuario con Gradio | |
interface = gr.Interface( | |
fn=procesar_audio, | |
inputs=gr.Audio(source="upload", type="file", label="Sube tu archivo de audio"), | |
outputs=gr.Textbox(label="Transcripci贸n"), | |
title="Transcriptor de Audio", | |
description="Sube un archivo de audio de una reuni贸n y obt茅n la transcripci贸n completa." | |
) | |
# Ejecutar la aplicaci贸n | |
if __name__ == "__main__": | |
interface.launch() | |