import whisper from transformers import pipeline import gradio as gr import numpy as np import torch from bark import generate_audio from scipy.io.wavfile import write import tempfile from transformers import MarianMTModel, MarianTokenizer # Función para transcribir el audio y traducir el audio de entrada def transcribir_audio(audio): # Usamos el pipeline de Hugging Face para la transcripción transcribir = pipeline("automatic-speech-recognition", model="openai/whisper-small") result = transcribir(audio) return result["text"] def traducir_texto(texto): model_name = "Helsinki-NLP/opus-mt-es-en" tokenizer = MarianTokenizer.from_pretrained(model_name) model = MarianMTModel.from_pretrained(model_name) # Tokenizar el texto inputs = tokenizer(texto, return_tensors="pt", padding=True, truncation=True) # Generar la traducción translated = model.generate(**inputs) # Decodificar la traducción traduccion = tokenizer.batch_decode(translated, skip_special_tokens=True)[0] return traduccion # Función para generar el audio def generar_audio(text): if not isinstance(text, str): raise ValueError("El texto debe ser una cadena") audio_array = generate_audio(text) audio_array = np.clip(audio_array, -1.0, 1.0) temp_wav = tempfile.NamedTemporaryFile(delete=False, suffix=".wav") write(temp_wav.name, 24000, (audio_array * 32767).astype(np.int16)) return temp_wav.name def process_audio(audio_file): try: # Paso 1: Transcripción con Whisper transcripcion = transcribir_audio(audio_file) # Paso 2: Traducción con MarianMT transcripcion_traducida = traducir_texto(transcripcion) # Paso 3: Generación de audio con Bark audio_sintetizado = generar_audio(transcripcion_traducida) return transcripcion_traducida, audio_sintetizado except Exception as e: return str(e), None # Crear interfaz Gradio with gr.Blocks() as demo: gr.Markdown("### Transcripción y Síntesis de Voz") gr.Markdown("Selecciona y carga el archivo de audio en español que deseas traducir o grábalo desde tu dispositivo. Ten en cuenta que si el audio dura más de 30 segundos o hay demasiado ruido a tu alrededor, la aplicación será menos precisa en la transcipción y traducción. Luego la aplicación transcribirá automáticamente el audio y lo traducirá al inglés. Tras unos minutos procesando, podrás leer el texto traducido y escuchar la traducción al inglés a través del audio sintetizado que se genera, que podrás dessargar. ¡Y listo! Ahora puedes comunicarte en inglés de manera fácil y efectiva.") with gr.Row(): input_audio = gr.Audio(label="Sube tu archivo de audio", type="filepath") transcription_output = gr.Textbox(label="Texto traducido al inglés") output_audio = gr.Audio(label="Audio generado") process_button = gr.Button("Procesar") process_button.click(process_audio, inputs=input_audio, outputs=[transcription_output, output_audio]) # Lanzar la app demo.launch(share=True)