Spaces:
Runtime error
Runtime error
File size: 4,369 Bytes
6748e07 78ea8dc bfbdf81 2a55caa 6748e07 2a55caa 6748e07 78ea8dc 6748e07 87e6f23 2a55caa 6748e07 2a55caa 6748e07 2a55caa 6748e07 8e74b09 2a55caa 6748e07 2a55caa 6748e07 07cf72c 6748e07 20017db 2a55caa 6748e07 2a55caa 6748e07 4b414b1 6748e07 4b414b1 2a55caa 6748e07 2a55caa 2b108d4 4b414b1 8e74b09 6748e07 2b108d4 4b414b1 2b108d4 8e74b09 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import os, io, base64, tempfile, requests
import gradio as gr
from PIL import Image
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 1. νκ²½ λ³μ & HF Inference API μ€μ
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
HF_TOKEN = os.getenv("HF_TOKEN")
if not HF_TOKEN:
raise RuntimeError("HF_TOKEN λΉλ° κ°μ΄ μ€μ λμ΄ μμ§ μμ΅λλ€. Spaces Settings β Secretsμμ λ±λ‘ν΄ μ£ΌμΈμ.")
HEADERS = {"Authorization": f"Bearer {HF_TOKEN}"}
CAPTION_API = "https://api-inference.huggingface.co/models/Salesforce/blip-image-captioning-base"
MUSIC_API = "https://api-inference.huggingface.co/models/facebook/musicgen-small"
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 2. μ΄λ―Έμ§ μΊ‘μ
μμ± (BLIP-base via API)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def generate_caption(image_pil: Image.Image) -> str:
buf = io.BytesIO()
image_pil.save(buf, format="PNG")
buf.seek(0)
# binary upload λ°©μ
response = requests.post(CAPTION_API, headers=HEADERS, data=buf.getvalue(), timeout=60)
response.raise_for_status()
result = response.json()
# API μλ΅: [{"generated_text": "..."}]
return result[0]["generated_text"]
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 3. MusicGen-small μμ
μμ± (10μ΄, via API)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def generate_music(prompt: str, duration: int = 10) -> str:
payload = {"inputs": prompt, "parameters": {"duration": duration}}
response = requests.post(MUSIC_API, headers=HEADERS, json=payload, timeout=120)
response.raise_for_status()
# API μλ΅μ WAV λ°μ΄λ리
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".wav")
tmp.write(response.content)
tmp.close()
return tmp.name
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 4. μ 체 νμ΄νλΌμΈ
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def process(image):
caption = generate_caption(image)
audio = generate_music(f"A cheerful melody inspired by: {caption}")
return caption, audio
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 5. Gradio μΈν°νμ΄μ€
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 5. Gradio μΈν°νμ΄μ€ ββββββββββββββββββββββββββββββββββββββ
demo = gr.Interface(
fn=process,
inputs=gr.Image(type="pil"),
outputs=[
gr.Text(label="AIκ° μμ±ν κ·Έλ¦Ό μ€λͺ
"),
gr.Audio(label="μμ±λ AI μμ
(MusicGen)")
],
title="π¨ AI κ·Έλ¦Ό-μμ
μμ±κΈ° (Inference API λ²μ )",
description="μ΄λ―Έμ§λ₯Ό μ
λ‘λνλ©΄ BLIP-baseκ° μ€λͺ
μ μμ±νκ³ , "
"ν΄λΉ μ€λͺ
μΌλ‘ MusicGen-smallμ΄ 10μ΄ μμ
μ λ§λλλ€.",
# concurrency_count=1 β β μμ
queue=True # (μ ν) λμ μμ²μ νμνλ €λ©΄ μ΄λ κ²λ§ λμΈμ
# cache_examples=False # νμνλ©΄ μ μ§
)
if __name__ == "__main__":
demo.launch()
|