File size: 2,510 Bytes
18be831
 
 
 
 
 
 
 
a7a32fb
18be831
a7a32fb
3498704
 
18be831
a7a32fb
f00a82c
 
18be831
 
a7a32fb
 
f00a82c
 
 
a7a32fb
 
 
 
 
 
 
 
 
89c5d72
18be831
89c5d72
 
18be831
89c5d72
18be831
89c5d72
18be831
a7a32fb
f00a82c
18be831
89c5d72
6f52852
a7a32fb
 
 
 
89c5d72
a7a32fb
89c5d72
 
 
 
 
 
18be831
 
 
 
 
 
5926c9d
18be831
 
 
 
 
 
a7a32fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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")
    
    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)