Spaces:
Running
on
T4
Running
on
T4
Commit
·
7f02de5
1
Parent(s):
fad49fa
feat(api): support invert_mask flag for /inpaint and /inpaint-multipart (selected area removed by default)
Browse files- api/main.py +5 -3
api/main.py
CHANGED
|
@@ -48,6 +48,7 @@ def bearer_auth(authorization: Optional[str] = Header(default=None)) -> None:
|
|
| 48 |
class InpaintRequest(BaseModel):
|
| 49 |
image_id: str
|
| 50 |
mask_id: str
|
|
|
|
| 51 |
|
| 52 |
|
| 53 |
@app.get("/")
|
|
@@ -141,7 +142,7 @@ def inpaint(req: InpaintRequest, _: None = Depends(bearer_auth)) -> Dict[str, st
|
|
| 141 |
mask_img = Image.open(file_store[req.mask_id]["path"]) # may be RGB/gray/RGBA
|
| 142 |
mask_rgba = _load_rgba_mask_from_image(mask_img)
|
| 143 |
|
| 144 |
-
result = process_inpaint(np.array(img_rgba), mask_rgba)
|
| 145 |
result_name = f"output_{uuid.uuid4().hex}.png"
|
| 146 |
result_path = os.path.join(OUTPUT_DIR, result_name)
|
| 147 |
Image.fromarray(result).save(result_path)
|
|
@@ -162,7 +163,7 @@ def inpaint_url(req: InpaintRequest, request: Request, _: None = Depends(bearer_
|
|
| 162 |
mask_img = Image.open(file_store[req.mask_id]["path"]) # may be RGB/gray/RGBA
|
| 163 |
mask_rgba = _load_rgba_mask_from_image(mask_img)
|
| 164 |
|
| 165 |
-
result = process_inpaint(np.array(img_rgba), mask_rgba)
|
| 166 |
result_name = f"output_{uuid.uuid4().hex}.png"
|
| 167 |
result_path = os.path.join(OUTPUT_DIR, result_name)
|
| 168 |
Image.fromarray(result).save(result_path)
|
|
@@ -177,6 +178,7 @@ def inpaint_multipart(
|
|
| 177 |
image: UploadFile = File(...),
|
| 178 |
mask: UploadFile = File(...),
|
| 179 |
request: Request = None,
|
|
|
|
| 180 |
_: None = Depends(bearer_auth),
|
| 181 |
) -> Dict[str, str]:
|
| 182 |
# Load in-memory
|
|
@@ -184,7 +186,7 @@ def inpaint_multipart(
|
|
| 184 |
m = Image.open(mask.file)
|
| 185 |
mask_rgba = _load_rgba_mask_from_image(m)
|
| 186 |
|
| 187 |
-
result = process_inpaint(np.array(img), mask_rgba)
|
| 188 |
result_name = f"output_{uuid.uuid4().hex}.png"
|
| 189 |
result_path = os.path.join(OUTPUT_DIR, result_name)
|
| 190 |
Image.fromarray(result).save(result_path)
|
|
|
|
| 48 |
class InpaintRequest(BaseModel):
|
| 49 |
image_id: str
|
| 50 |
mask_id: str
|
| 51 |
+
invert_mask: bool = True # True => selected/painted area is removed
|
| 52 |
|
| 53 |
|
| 54 |
@app.get("/")
|
|
|
|
| 142 |
mask_img = Image.open(file_store[req.mask_id]["path"]) # may be RGB/gray/RGBA
|
| 143 |
mask_rgba = _load_rgba_mask_from_image(mask_img)
|
| 144 |
|
| 145 |
+
result = process_inpaint(np.array(img_rgba), mask_rgba, invert_mask=req.invert_mask)
|
| 146 |
result_name = f"output_{uuid.uuid4().hex}.png"
|
| 147 |
result_path = os.path.join(OUTPUT_DIR, result_name)
|
| 148 |
Image.fromarray(result).save(result_path)
|
|
|
|
| 163 |
mask_img = Image.open(file_store[req.mask_id]["path"]) # may be RGB/gray/RGBA
|
| 164 |
mask_rgba = _load_rgba_mask_from_image(mask_img)
|
| 165 |
|
| 166 |
+
result = process_inpaint(np.array(img_rgba), mask_rgba, invert_mask=req.invert_mask)
|
| 167 |
result_name = f"output_{uuid.uuid4().hex}.png"
|
| 168 |
result_path = os.path.join(OUTPUT_DIR, result_name)
|
| 169 |
Image.fromarray(result).save(result_path)
|
|
|
|
| 178 |
image: UploadFile = File(...),
|
| 179 |
mask: UploadFile = File(...),
|
| 180 |
request: Request = None,
|
| 181 |
+
invert_mask: bool = True,
|
| 182 |
_: None = Depends(bearer_auth),
|
| 183 |
) -> Dict[str, str]:
|
| 184 |
# Load in-memory
|
|
|
|
| 186 |
m = Image.open(mask.file)
|
| 187 |
mask_rgba = _load_rgba_mask_from_image(m)
|
| 188 |
|
| 189 |
+
result = process_inpaint(np.array(img), mask_rgba, invert_mask=invert_mask)
|
| 190 |
result_name = f"output_{uuid.uuid4().hex}.png"
|
| 191 |
result_path = os.path.join(OUTPUT_DIR, result_name)
|
| 192 |
Image.fromarray(result).save(result_path)
|