Spaces:
Running
Running
File size: 4,456 Bytes
1d64201 a52f9ab 1d64201 873ac58 d1af37b 1d64201 873ac58 1d64201 0872418 1d64201 873ac58 d1af37b 873ac58 aca5861 bce365b 1d64201 aca5861 bce365b 1d64201 873ac58 1d64201 873ac58 1d64201 0872418 1d64201 63642bb bce365b 1d64201 0872418 d1af37b 873ac58 1d64201 63642bb 873ac58 4bb5406 1d64201 5071c90 2f7fddd aca5861 74cd29b 0872418 b09ff42 ce26e7b b09ff42 74cd29b aca5861 d1af37b 873ac58 d1af37b aca5861 1d64201 aca5861 873ac58 aca5861 f8b59fe aca5861 1d64201 873ac58 ce26e7b aca5861 f419f09 aca5861 1d64201 873ac58 b09ff42 aca5861 84736b7 873ac58 0872418 873ac58 4bb5406 5071c90 873ac58 c9e469a 873ac58 aca5861 c9e469a 873ac58 bce365b |
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 |
import os
os.environ["GRADIO_API_FORCE_3"] = "1"
import gradio as gr
import sys
import json
import shutil
import gdown
from PIL import Image
print("Gradio App Starting...")
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# Paths
UPLOAD_DIR = "/tmp/uploads/"
JSON_DIR = "/tmp/results/"
OUTPUT_DIR = "/tmp/output/"
MODEL_DIR = os.path.join(BASE_DIR, "rcnn_model", "scripts")
logo_path = os.path.join(BASE_DIR, "public", "logo.png")
model_path = os.path.join(OUTPUT_DIR, "model_final.pth")
# Google Drive model
GOOGLE_DRIVE_FILE_ID = "1yr64AOgaYZPTcQzG6cxG6lWBENHR9qjW"
GDRIVE_URL = f"https://drive.google.com/uc?id={GOOGLE_DRIVE_FILE_ID}"
# Create folders
os.makedirs(UPLOAD_DIR, exist_ok=True)
os.makedirs(JSON_DIR, exist_ok=True)
os.makedirs(OUTPUT_DIR, exist_ok=True)
# Download model if missing
if not os.path.exists(model_path):
print("Model file not found! Downloading...")
try:
gdown.download(GDRIVE_URL, model_path, quiet=False, use_cookies=False)
print("Model downloaded successfully.")
except Exception as e:
print(f"Failed to download model: {e}")
# Import model
sys.path.append(MODEL_DIR)
from rcnn_model.scripts.rcnn_run import main, write_config
cfg = write_config()
def clear_outputs_on_upload(uploaded_file_path):
if uploaded_file_path is None:
return None, None, None, None, None
return gr.update(value=uploaded_file_path), None, None, None, None
def show_uploaded_image(path):
if path is None:
return None
try:
return Image.open(path)
except:
return None
def predict(uploaded_file_path):
if uploaded_file_path is None:
return None, None, "No file uploaded.", None
# Save uploaded file to tmp folder
uploaded_path = os.path.join(UPLOAD_DIR, "input_image.png")
shutil.copy(uploaded_file_path, uploaded_path)
input_filename = "input_image.png"
output_json_name = input_filename.replace(".png", "_result.json").replace(".jpg", "_result.json").replace(".jpeg", "_result.json")
output_image_name = input_filename.replace(".png", "_result.png").replace(".jpg", "_result.png").replace(".jpeg", "_result.png")
output_json_path = os.path.join(JSON_DIR, output_json_name)
output_image_path = os.path.join(JSON_DIR, output_image_name)
# Run model
main(cfg, uploaded_path, output_json_name, output_image_name)
# Read outputs
result_img = Image.open(output_image_path) if os.path.exists(output_image_path) else None
result_json = {}
if os.path.exists(output_json_path):
with open(output_json_path, "r") as jf:
result_json = json.load(jf)
# Save JSON to file for download
download_json_path = os.path.join(JSON_DIR, "output.json")
with open(download_json_path, "w") as f:
json.dump(result_json, f, indent=2)
return result_img, json.dumps(result_json, indent=2), None, download_json_path, uploaded_path
with gr.Blocks() as demo:
with gr.Row():
gr.Markdown(
f"""
<div style='display: flex; align-items: center; justify-content: center;'>
<h1>Inovonics 2D Floorplan Vectorizer</h1>
</div>
"""
)
with gr.Row():
with gr.Column():
uploaded_file = gr.File(label="Upload your Floorplan Image", type="filepath")
uploaded_image_display = gr.Image(label="Uploaded Image", visible=True)
run_button = gr.Button("Run Vectorizer")
with gr.Column():
output_image = gr.Image(label="Output Vectorized Image")
download_button = gr.File(label="Download JSON", visible=True)
output_json = gr.JSON(label="Output JSON")
error_output = gr.Textbox(label="Error Message", visible=False)
uploaded_file.change(
lambda path: (
gr.update(value=path),
None, None, None, show_uploaded_image(path)
),
inputs=[uploaded_file],
outputs=[uploaded_file, output_image, output_json, download_button, uploaded_image_display]
)
run_button.click(
lambda x: (x, gr.update(interactive=False)),
inputs=[uploaded_file],
outputs=[uploaded_file, run_button],
).then(
predict,
inputs=[uploaded_file],
outputs=[output_image, output_json, error_output, download_button, uploaded_image_display]
).then(
lambda: gr.update(interactive=True),
None,
[run_button],
)
demo.launch(server_name="0.0.0.0", server_port=7860, share=True) |