Spaces:
Runtime error
Runtime error
import os, tempfile, soundfile as sf | |
import gradio as gr | |
from PIL import Image | |
from transformers import pipeline | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
# 1. νμ΄νλΌμΈ λ‘λ (CPU: device=-1) | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
CAPTION_ID = "Salesforce/blip-image-captioning-base" # μ©λβ: blip-image-captioning | |
MUSIC_ID = "facebook/musicgen-melody" # μ©λβ: musicgen-small | |
caption_pipe = pipeline( | |
"image-to-text", | |
model=CAPTION_ID, | |
device=-1 | |
) | |
music_pipe = pipeline( | |
"text-to-audio", | |
model=MUSIC_ID, | |
device=-1, | |
generate_kwargs={"duration": 10} # μ΄ λ¨μ | |
) | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
# 2. μ νΈ ν¨μ | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
def generate_caption(img: Image.Image) -> str: | |
return caption_pipe(img)[0]["generated_text"] | |
def generate_music(prompt: str) -> str: | |
result = music_pipe(prompt, forward_params={"do_sample": True})[0] | |
audio, sr = result["audio"], result["sampling_rate"] | |
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".wav") | |
sf.write(tmp.name, audio, sr) | |
return tmp.name | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
# 3. μ 체 νμ΄νλΌμΈ | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
def process(image): | |
caption = generate_caption(image) | |
audio = generate_music(f"A cheerful melody inspired by: {caption}") | |
return caption, audio | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
# 4. Gradio UI | |
# ββββββββββββββββββββββββββββββββββββββββββββββββ | |
demo = gr.Interface( | |
fn=process, | |
inputs=gr.Image(type="pil"), | |
outputs=[ | |
gr.Text(label="AIκ° μμ±ν κ·Έλ¦Ό μ€λͺ "), | |
gr.Audio(label="μμ±λ AI μμ (MusicGen)") | |
], | |
title="π¨ λ‘컬 BLIP-base + MusicGen-melody", | |
description="μ΄λ―Έμ§λ₯Ό μ λ‘λνλ©΄ BLIP-baseκ° μ€λͺ μ μμ±νκ³ , " | |
"κ·Έ μ€λͺ μΌλ‘ MusicGen-melodyκ° 10μ΄ μμ μ λ§λλλ€." | |
).queue() | |
if __name__ == "__main__": | |
demo.launch() | |