Spaces:
Running
Running
File size: 3,366 Bytes
81d8245 8b5fe62 81d8245 2e40cec 637d576 8b5fe62 81d8245 8b5fe62 |
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 |
from utils_html import HTML_TEMPLATE
from io import BytesIO
import gradio as gr
import numpy as np
import requests
import modal
import PIL
f = modal.Cls.lookup("casa-interior-hf-v4", "DesignModel")
f_gc = modal.Cls.lookup("casa-interior-gc-v2", "GetProduct")
def casa_ai_run_tab1(image=None, text=None):
if image is None:
print('Please provide image of empty room to design')
return None
if text is None:
print('Please provide a text prompt')
return None
result_image = f.inference.remote("tab1", image, text)
return result_image
def casa_ai_run_tab2(dict=None, text=None):
image = dict["background"].convert("RGB")
mask = dict["layers"][0].convert('L')
if np.sum(np.array(mask)) == 0:
mask = None
if mask is None:
print('Please provide a mask over the object you want to generate again.')
if image is None and text is None:
print('Please provide context in form of image, text')
return None
result_image = f.inference.remote("tab2", image, text, mask)
return result_image
def casa_ai_run_tab3(dict=None):
selected_crop = dict["composite"]
if selected_crop is None:
print('Please provide cropped object')
return None
selected_crop = PIL.Image.fromarray(selected_crop).convert('RGB')
results = f_gc.inference.remote(selected_crop)
return results
with gr.Blocks() as casa:
title = "Casa-AI Demo"
description = "A Gradio interface to use CasaAI for virtual staging"
gr.HTML(value=HTML_TEMPLATE, show_label=False)
with gr.Tab("Reimagine"):
with gr.Row():
with gr.Column():
inputs = [
gr.Image(sources='upload', type="pil", label="Upload"),
gr.Textbox(label="Room description.")
]
with gr.Column():
outputs = [gr.Image(label="Generated room image")]
submit_btn = gr.Button("Generate!")
submit_btn.click(casa_ai_run_tab1, inputs=inputs, outputs=outputs)
with gr.Tab("Redesign"):
with gr.Row():
with gr.Column():
inputs = [
gr.ImageEditor(sources='upload', brush=gr.Brush(colors=["#FFFFFF"]), elem_id="image_upload", type="pil", label="Upload", layers=False, eraser=True, transforms=[]),
gr.Textbox(label="Description for redesigning masked object")]
with gr.Column():
outputs = [gr.Image(label="Image with new designed object")]
submit_btn = gr.Button("Redesign!")
submit_btn.click(casa_ai_run_tab2, inputs=inputs, outputs=outputs)
with gr.Tab("Recommendation"):
with gr.Row():
with gr.Column():
inputs = [
gr.ImageEditor(sources='upload', elem_id="image_upload", type="numpy", label="Upload", layers=False, eraser=False, brush=False, transforms=['crop']),
]
with gr.Column():
outputs = [gr.Gallery(label="Similar products")]
submit_btn = gr.Button("Find similar products!")
submit_btn.click(casa_ai_run_tab3, inputs=inputs, outputs=outputs)
casa.launch() |