Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -171,34 +171,35 @@ def _gpu_process(img: Image.Image, prompt: str | BoundingBox | None) -> tuple[Im
|
|
| 171 |
return mask, bbox, time_log
|
| 172 |
|
| 173 |
def _process(img: Image.Image, prompt: str | BoundingBox | None, bg_prompt: str | None = None) -> tuple[tuple[Image.Image, Image.Image, Image.Image], gr.DownloadButton]:
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
|
|
|
| 180 |
|
| 181 |
-
|
| 182 |
-
|
| 183 |
|
| 184 |
-
|
| 185 |
-
try:
|
| 186 |
background = generate_background(bg_prompt, img.width, img.height)
|
| 187 |
combined = combine_with_background(masked_alpha, background)
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
else:
|
| 191 |
-
combined = Image.alpha_composite(Image.new("RGBA", masked_alpha.size, "white"), masked_alpha)
|
| 192 |
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
|
| 201 |
-
|
|
|
|
|
|
|
|
|
|
| 202 |
|
| 203 |
def process_bbox(img: Image.Image, box_input: str) -> tuple[list[Image.Image], str]:
|
| 204 |
try:
|
|
|
|
| 171 |
return mask, bbox, time_log
|
| 172 |
|
| 173 |
def _process(img: Image.Image, prompt: str | BoundingBox | None, bg_prompt: str | None = None) -> tuple[tuple[Image.Image, Image.Image, Image.Image], gr.DownloadButton]:
|
| 174 |
+
try:
|
| 175 |
+
if img.width > 2048 or img.height > 2048:
|
| 176 |
+
orig_res = max(img.width, img.height)
|
| 177 |
+
img.thumbnail((2048, 2048))
|
| 178 |
+
if isinstance(prompt, tuple):
|
| 179 |
+
x0, y0, x1, y1 = (int(x * 2048 / orig_res) for x in prompt)
|
| 180 |
+
prompt = (x0, y0, x1, y1)
|
| 181 |
|
| 182 |
+
mask, bbox, time_log = _gpu_process(img, prompt)
|
| 183 |
+
masked_alpha = apply_mask(img, mask, defringe=True)
|
| 184 |
|
| 185 |
+
if bg_prompt:
|
|
|
|
| 186 |
background = generate_background(bg_prompt, img.width, img.height)
|
| 187 |
combined = combine_with_background(masked_alpha, background)
|
| 188 |
+
else:
|
| 189 |
+
combined = Image.alpha_composite(Image.new("RGBA", masked_alpha.size, "white"), masked_alpha)
|
|
|
|
|
|
|
| 190 |
|
| 191 |
+
thresholded = mask.point(lambda p: 255 if p > 10 else 0)
|
| 192 |
+
bbox = thresholded.getbbox()
|
| 193 |
+
to_dl = masked_alpha.crop(bbox)
|
| 194 |
|
| 195 |
+
temp = tempfile.NamedTemporaryFile(delete=False, suffix=".png")
|
| 196 |
+
to_dl.save(temp, format="PNG")
|
| 197 |
+
temp.close()
|
| 198 |
|
| 199 |
+
return (img, combined, masked_alpha), gr.DownloadButton(value=temp.name, interactive=True)
|
| 200 |
+
|
| 201 |
+
except Exception as e:
|
| 202 |
+
raise gr.Error(f"Processing failed: {str(e)}")
|
| 203 |
|
| 204 |
def process_bbox(img: Image.Image, box_input: str) -> tuple[list[Image.Image], str]:
|
| 205 |
try:
|