|
import transformers |
|
import gradio as gr |
|
from transformers import pipeline |
|
from datasets import load_dataset |
|
import soundfile as sf |
|
import torch |
|
import requests |
|
|
|
|
|
image_to_text_pipe = pipeline("image-to-text", model="Salesforce/blip-image-captioning-large") |
|
API_URL = "https://api-inference.huggingface.co/models/Salesforce/blip-image-captioning-large" |
|
headers = {} |
|
|
|
|
|
def image_to_text(image_path): |
|
with open(image_path, "rb") as f: |
|
data = f.read() |
|
response = requests.post(API_URL, headers=headers, data=data) |
|
response_json = response.json() |
|
generated_text = response_json[0]['generated_text'] |
|
return generated_text |
|
|
|
|
|
text_to_audio_pipe = pipeline("text-to-speech", model="microsoft/speecht5_tts") |
|
embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation") |
|
speaker_embedding = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0) |
|
|
|
def text_to_audio(text): |
|
speech = text_to_audio_pipe(text, forward_params={"speaker_embeddings": speaker_embedding}) |
|
sf.write("speech.wav", speech["audio"], samplerate=speech["sampling_rate"]) |
|
return "speech.wav" |
|
|
|
|
|
iface = gr.Interface( |
|
fn=lambda image: text_to_audio(image_to_text(image)), |
|
inputs=gr.Image(type="filepath"), |
|
outputs=gr.Audio(label="Generated Audio"), |
|
title="Image to Audio", |
|
description="Upload an image to generate audio description." |
|
) |
|
|
|
iface.launch() |