Image2Music / app.py
Kvikontent's picture
Update app.py
f075301 verified
raw
history blame contribute delete
No virus
1.64 kB
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)