Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from transformers import pipeline, SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan | |
| from datasets import load_dataset | |
| import torch | |
| replacements = [ | |
| ("á", "a"), | |
| ("í", "i"), | |
| ("ñ", "n"), | |
| ("ó", "o"), | |
| ("ú", "u"), | |
| ("ü", "u"), | |
| ] | |
| def cleanup_text(text): | |
| for src, dst in replacements: | |
| text = text.replace(src, dst) | |
| return text | |
| def modelo1(image): | |
| imageToText = pipeline( | |
| "image-to-text", model="Salesforce/blip-image-captioning-large") | |
| resultado = imageToText(image) | |
| resultado = resultado[0]["generated_text"].replace("araffe ", "") | |
| return resultado | |
| def modelo2(text): | |
| enToEs = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es") | |
| resultado = enToEs(text) | |
| return resultado[0]["translation_text"] | |
| def modelo3En(text): | |
| processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts") | |
| model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts") | |
| vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan") | |
| embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation") | |
| speaker_embeddings = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0) | |
| inputs = processor(text=text, return_tensors="pt") | |
| speech = model.generate_speech(inputs["input_ids"], speaker_embeddings, vocoder=vocoder) | |
| return (16000, speech.cpu().numpy()) | |
| def modelo3Es(text): | |
| model = SpeechT5ForTextToSpeech.from_pretrained("Sandiago21/speecht5_finetuned_facebook_voxpopuli_spanish") | |
| vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan") | |
| embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation") | |
| processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts") | |
| speaker_embeddings = torch.tensor(embeddings_dataset[7440]["xvector"]).unsqueeze(0) | |
| text = cleanup_text(text) | |
| inputs = processor(text=text, return_tensors="pt") | |
| speech = model.generate_speech(inputs["input_ids"], speaker_embeddings, vocoder=vocoder) | |
| return (16000, speech.cpu().numpy()) | |
| def executionIMG(image, lan): | |
| if lan == 'english': | |
| model1res = modelo1(image) | |
| model3res = modelo3En(model1res) | |
| return model3res | |
| elif lan == 'spanish': | |
| model1res = modelo1(image) | |
| model2res = modelo2(model1res) | |
| model3res = modelo3Es(model2res) | |
| return model3res | |
| def executionTEXT(text, lan): | |
| if lan == 'english': | |
| model3res = modelo3En(text) | |
| return model3res | |
| elif lan == 'spanish': | |
| model3res = modelo3Es(text) | |
| return model3res | |
| with gr.Blocks() as demo: | |
| gr.Markdown( | |
| """ | |
| Se quiere hacer un programa que saque un audio de una imagen o de un texto, el cual tiene que ser introducido por el usuario. Para resolver este problema se realiza el siguiente programa. Se van a usar | |
| tres modelos (Salesforce/blip-image-captioning-large, Helsinki-NLP/opus-mt-en-es, microsoft/speecht5_tts), los cuales se describen a continuación cuál es la función de cada uno: \n | |
| - Primero necesitaremos dos Tabs, uno con un input tipo Image (IMAGE) en el que pasaremos una imagen y otro con un input tipo Textbox (TEXT) en el que pasaremos un texto. \n | |
| - En el caso de la imagen, la pasaremos a texto usando un modelo con esta función (Salesforce/blip-image-captioning-large). Este modelo está entrenado para sacar texto describiendo qué hay en la | |
| foto. El modelo nos sacará un texto en inglés. \n | |
| - En caso del texto, no hace falta usar el modelo anterior ya que directamente tenemos el texto que queremos pasar a audio. \n | |
| - Luego, tenemos un evento de tipo Radio, con el cual podemos elegir el idioma en el que vamos a sacar el audio. En el caso de la imagen, dado que el modelo saca el texto de esta imagen en inglés, | |
| si hemos seleccionado que queremos sacar el audio en español tendremos que traducir este texto de inglés a español. En el caso del texto se da por hecho que el texto va a ser introducido en el | |
| mismo idioma que se quiere sacar el audio. \n | |
| - Para traducir el texto usaremos un modelo que está entrenado para pasar texto de inglés a español (Helsinki-NLP/opus-mt-en-es), por lo que nos devolverá un texto casi perfectamente traducido al | |
| español. \n | |
| - Una vez tenemos el texto que queremos pasar a audio en el idioma deseado, con el último modelo pasaremos este texto a audio (microsoft/speecht5_tts). Este modelo está entrenado para sacar audio a | |
| raíz de un texto, en el que | |
| se escucha justo lo que pone en el texto que le mandamos. \n | |
| - Por último tendremos un output de tipo Audio que nos mostrará el audio que hemos conseguido con el último modelo. | |
| """) | |
| with gr.Tab("IMAGE"): | |
| inp = gr.Image(type="pil") | |
| language = gr.Radio(["english", "spanish"], label="Language", info="Choose the language in which you want the audio to appear", value='english', interactive=True) | |
| out = gr.Audio() | |
| btn = gr.Button("RUN") | |
| btn.click(fn=executionIMG, inputs=[inp, language], outputs=out) | |
| with gr.Tab("TEXT"): | |
| inp = gr.Textbox() | |
| language = gr.Radio(["english", "spanish"], label="Language", info="Choose the language in which you want the audio to appear", value='english', interactive=True) | |
| out = gr.Audio() | |
| btn = gr.Button("RUN") | |
| btn.click(fn=executionTEXT, inputs=[inp, language], outputs=out) | |
| demo.launch() | |