Spaces:
Sleeping
Sleeping
File size: 5,944 Bytes
b2e3aaf 623d09e b2e3aaf defb482 b2e3aaf 623d09e b2e3aaf c00bdb7 b94709f c00bdb7 b94709f 54dc13d c00bdb7 b2e3aaf 623d09e b2e3aaf |
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import gradio as gr
import requests
import base64
from PIL import Image
import io
import time
import os
# Your endpoint URL and token (you might want to use environment variables for these in production)
API_URL = "https://ca80xvp8jmhqanbz.us-east-1.aws.endpoints.huggingface.cloud"
def process_image(input_image, prompt):
# Convert Gradio's image input to base64
if input_image is None:
return None, "Please upload an image"
# Convert PIL Image directly to base64 string
buffer = io.BytesIO()
input_image.save(buffer, format="WEBP")
base64_image = f"data:image/webp;base64,{base64.b64encode(buffer.getvalue()).decode('utf-8')}"
# Prepare headers and data
headers = {
"Authorization": f"Bearer {os.getenv('HF_API_KEY')}",
"Content-Type": "application/json",
"Accept": "application/json"
}
data = {
"inputs": {
"prompt": prompt,
"image": base64_image
}
}
# Make the API request with retry mechanism
max_retries = 5
retry_delay = 60 # seconds
for retry in range(max_retries):
try:
response = requests.post(API_URL, headers=headers, json=data, timeout=300)
if response.status_code == 200:
# Convert the response base64 directly to PIL Image
result = response.json()
image_bytes = base64.b64decode(result["final_image"])
output_image = Image.open(io.BytesIO(image_bytes))
# Return both the image and the parameters used
params_text = "\nParameters used:\n"
for key, value in result["parameters"].items():
params_text += f"{key}: {value}\n"
return output_image, params_text
elif response.status_code == 503:
if retry < max_retries - 1:
time.sleep(retry_delay)
continue
return None, f"Service unavailable after {max_retries} retries"
else:
return None, f"Error: {response.status_code}\n{response.text}"
except requests.exceptions.RequestException as e:
if retry < max_retries - 1:
time.sleep(retry_delay)
continue
return None, f"Request error: {str(e)}"
return None, "Maximum retries reached"
# Create Gradio interface
with gr.Blocks(title="Room Design Diffusion", theme=gr.themes.Soft()) as demo:
gr.Markdown("""
# Room Design Diffusion
Upload a room image and provide a prompt describing how you'd like to redesign it.
The AI will generate a new version of your room based on your description.
""")
with gr.Row():
with gr.Column():
input_image = gr.Image(label="Upload Room Image", type="pil")
prompt = gr.Textbox(
label="Describe how you want to redesign the room",
placeholder="Example: A modern living room with a comfortable gray sectional sofa, glass coffee table, minimalist TV stand, and geometric area rug",
lines=3
)
submit_btn = gr.Button("Generate Design", variant="primary")
with gr.Column():
output_image = gr.Image(label="Generated Design")
output_text = gr.Textbox(label="Processing Details", lines=5)
submit_btn.click(
fn=process_image,
inputs=[input_image, prompt],
outputs=[output_image, output_text]
)
gr.Examples(
examples=[
[
os.path.join(os.path.dirname(__file__), "examples/free-photo-of-empty-living-room-with-with-walls.jpeg"),
"A living room featuring a comfortable sofa with neutral cushions, a classic wooden coffee table, a functional TV stand with storage, and a cozy area rug that ties the space together."
],
[
os.path.join(os.path.dirname(__file__), "examples/2.webp"),
"A living room featuring a rugged leather sofa, a rustic wood and metal coffee table, a sturdy industrial-style media stand, and a vintage-inspired rug adding warmth to the space."
],
[
os.path.join(os.path.dirname(__file__), "examples/3.webp"),
"A modern minimalist living room with a sleek sectional sofa, contemporary glass coffee table, floating media console, and geometric pattern area rug."
],
[
os.path.join(os.path.dirname(__file__), "examples/download (36).jpg"),
"A living room featuring a comfortable sofa with neutral cushions, a classic wooden coffee table, a functional TV stand with storage, and a cozy area rug that ties the space together."
],
[
os.path.join(os.path.dirname(__file__), "examples/popular-flooring.jpeg"),
"A living room with a sleek sectional sofa, a minimalist glass coffee table, a contemporary media console, and a geometric rug adding a touch of modern flair."
],
[
os.path.join(os.path.dirname(__file__), "examples/free-photo-of-newly-renovated-empty-bedroom.jpeg"),
"A bedroom featuring a gray upholstered bed with soft bedding, a gold and glass nightstand with a textured lamp, a simple console table with fresh greenery, and a cozy patterned rug underfoot."
]
],
inputs=[input_image, prompt],
)
gr.Markdown("""
### Tips for best results:
- Use clear, detailed prompts describing the desired room style
- Make sure the input image is well-lit and clearly shows the room
- Be patient as generation can take a few minutes
""")
# Launch the app with sharing enabled
demo.launch(share=True) |