import streamlit as st import os import requests import io from PIL import Image from IPython.display import Audio, display from freeGPT import Client api_token = os.environ.get("API_TOKEN") API_URL = "https://api-inference.huggingface.co/models/facebook/musicgen-small" API_URL_IMG = "https://api-inference.huggingface.co/models/Salesforce/blip-image-captioning-large" headers = {"Authorization": f"Bearer {api_token}"} st.title("✨ Image2Music Generator") st.write("Music generator using Facebook MusicGen, ChatGPT3 and Blip image captioning large.") img_prompt = st.file_uploader("Upload Image", type=["jpeg", "jpg", "png"]) subm_btn = st.button("✨ Generate") def musquery(payload): response = requests.post(API_URL, headers=headers, json=payload) return response.content def generate_audio(prompt): return musquery({"inputs": prompt}) if subm_btn and img_prompt is not None: def query(image_bytes): response = requests.post(API_URL_IMG, headers=headers, data=image_bytes) return response.json() image = Image.open(img_prompt) image_bytes = io.BytesIO() image.save(image_bytes, format=image.format) image_bytes = image_bytes.getvalue() output = query(image_bytes) prompt_gpt = output[0]['generated_text'] prompt = Client.create_completion("gpt3", "Write a prompt a to generate music from this: " + prompt_gpt) st.image(image_bytes, caption=f'Generated prompt for input image - "{prompt}"') music = generate_audio(prompt) st.success('Music Generated Successfully!', icon="✅") st.audio(music, format="audio/wav") st.download_button("Download", music)