aiqtech commited on
Commit
92d4ae1
·
verified ·
1 Parent(s): 059f00f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -44
app.py CHANGED
@@ -162,22 +162,6 @@ def gd_detect(img: Image.Image, prompt: str) -> BoundingBox | None:
162
  bboxes = corners_to_pixels_format(results["boxes"].cpu(), width, height)
163
  return bbox_union(bboxes.numpy().tolist())
164
 
165
- def apply_mask(img: Image.Image, mask_img: Image.Image, defringe: bool = True) -> Image.Image:
166
- """마스크 적용 함수"""
167
- assert img.size == mask_img.size
168
- img = img.convert("RGB")
169
- mask_img = mask_img.convert("L")
170
-
171
- if defringe:
172
- rgb, alpha = np.asarray(img) / 255.0, np.asarray(mask_img) / 255.0
173
- foreground = cast(np.ndarray[Any, np.dtype[np.uint8]], estimate_foreground_ml(rgb, alpha))
174
- img = Image.fromarray((foreground * 255).astype("uint8"))
175
-
176
- # 투명한 배경으로 결과 생성
177
- result = Image.new("RGBA", img.size, (0, 0, 0, 0))
178
- result.paste(img, (0, 0), mask_img)
179
-
180
- return result
181
 
182
 
183
  def adjust_size_to_multiple_of_8(width: int, height: int) -> tuple[int, int]:
@@ -270,33 +254,7 @@ def resize_object(image: Image.Image, scale_percent: float) -> Image.Image:
270
  height = int(image.height * scale_percent / 100)
271
  return image.resize((width, height), Image.Resampling.LANCZOS)
272
 
273
- def combine_with_background(foreground: Image.Image, background: Image.Image,
274
- position: str = "bottom-center", scale_percent: float = 100) -> Image.Image:
275
- """전경과 배경 합성 함수"""
276
- print(f"Combining with position: {position}, scale: {scale_percent}")
277
-
278
- # 배경 이미지를 RGBA 모드로 변환
279
- result = background.convert('RGBA')
280
-
281
- # 전경 이미지가 RGBA가 아니면 변환
282
- if foreground.mode != 'RGBA':
283
- foreground = foreground.convert('RGBA')
284
-
285
- # 스케일 조정
286
- scaled_foreground = resize_object(foreground, scale_percent)
287
-
288
- # 위치 계산
289
- x, y = calculate_object_position(position, result.size, scaled_foreground.size)
290
- print(f"Calculated position coordinates: ({x}, {y})")
291
-
292
- # 투명한 배경의 새 이미지 생성
293
- temp = Image.new('RGBA', result.size, (0, 0, 0, 0))
294
- temp.paste(scaled_foreground, (x, y), scaled_foreground)
295
-
296
- # 최종 합성
297
- result = Image.alpha_composite(result, temp)
298
-
299
- return result
300
 
301
  @spaces.GPU(duration=30) # 120초에서 30초로 감소
302
  def _gpu_process(img: Image.Image, prompt: str | BoundingBox | None) -> tuple[Image.Image, BoundingBox | None, list[str]]:
@@ -365,7 +323,35 @@ def on_change_prompt(img: Image.Image | None, prompt: str | None, bg_prompt: str
365
  return gr.update(interactive=bool(img and prompt))
366
 
367
 
368
- ddef process_prompt(img: Image.Image, prompt: str, bg_prompt: str | None = None,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
369
  aspect_ratio: str = "1:1", position: str = "bottom-center",
370
  scale_percent: float = 100) -> tuple[Image.Image, Image.Image]:
371
  try:
@@ -420,6 +406,23 @@ ddef process_prompt(img: Image.Image, prompt: str, bg_prompt: str | None = None,
420
  finally:
421
  clear_memory()
422
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
 
424
  def process_bbox(img: Image.Image, box_input: str) -> tuple[Image.Image, Image.Image]:
425
  try:
 
162
  bboxes = corners_to_pixels_format(results["boxes"].cpu(), width, height)
163
  return bbox_union(bboxes.numpy().tolist())
164
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
 
166
 
167
  def adjust_size_to_multiple_of_8(width: int, height: int) -> tuple[int, int]:
 
254
  height = int(image.height * scale_percent / 100)
255
  return image.resize((width, height), Image.Resampling.LANCZOS)
256
 
257
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
 
259
  @spaces.GPU(duration=30) # 120초에서 30초로 감소
260
  def _gpu_process(img: Image.Image, prompt: str | BoundingBox | None) -> tuple[Image.Image, BoundingBox | None, list[str]]:
 
323
  return gr.update(interactive=bool(img and prompt))
324
 
325
 
326
+ def combine_with_background(foreground: Image.Image, background: Image.Image,
327
+ position: str = "bottom-center", scale_percent: float = 100) -> Image.Image:
328
+ """전경과 배경 합성 함수"""
329
+ print(f"Combining with position: {position}, scale: {scale_percent}")
330
+
331
+ # 배경 이미지를 RGBA 모드로 변환
332
+ result = background.convert('RGBA')
333
+
334
+ # 전경 이미지가 RGBA가 아니면 변환
335
+ if foreground.mode != 'RGBA':
336
+ foreground = foreground.convert('RGBA')
337
+
338
+ # 스케일 조정
339
+ scaled_foreground = resize_object(foreground, scale_percent)
340
+
341
+ # 위치 계산
342
+ x, y = calculate_object_position(position, result.size, scaled_foreground.size)
343
+ print(f"Calculated position coordinates: ({x}, {y})")
344
+
345
+ # 투명한 배경의 새 이미지 생성
346
+ temp = Image.new('RGBA', result.size, (0, 0, 0, 0))
347
+ temp.paste(scaled_foreground, (x, y), scaled_foreground)
348
+
349
+ # 최종 합성
350
+ result = Image.alpha_composite(result, temp)
351
+
352
+ return result
353
+
354
+ def process_prompt(img: Image.Image, prompt: str, bg_prompt: str | None = None,
355
  aspect_ratio: str = "1:1", position: str = "bottom-center",
356
  scale_percent: float = 100) -> tuple[Image.Image, Image.Image]:
357
  try:
 
406
  finally:
407
  clear_memory()
408
 
409
+ def apply_mask(img: Image.Image, mask_img: Image.Image, defringe: bool = True) -> Image.Image:
410
+ """마스크 적용 함수"""
411
+ assert img.size == mask_img.size
412
+ img = img.convert("RGB")
413
+ mask_img = mask_img.convert("L")
414
+
415
+ if defringe:
416
+ rgb, alpha = np.asarray(img) / 255.0, np.asarray(mask_img) / 255.0
417
+ foreground = cast(np.ndarray[Any, np.dtype[np.uint8]], estimate_foreground_ml(rgb, alpha))
418
+ img = Image.fromarray((foreground * 255).astype("uint8"))
419
+
420
+ # 투명한 배경으로 결과 생성
421
+ result = Image.new("RGBA", img.size, (0, 0, 0, 0))
422
+ result.paste(img, (0, 0), mask_img)
423
+
424
+ return result
425
+
426
 
427
  def process_bbox(img: Image.Image, box_input: str) -> tuple[Image.Image, Image.Image]:
428
  try: