Spaces:
Sleeping
Sleeping
Update faceless_processing.py
Browse files- faceless_processing.py +6 -4
faceless_processing.py
CHANGED
|
@@ -10,8 +10,10 @@ import urllib.request
|
|
| 10 |
from rembg import remove, new_session
|
| 11 |
import threading
|
| 12 |
|
|
|
|
| 13 |
try:
|
| 14 |
from scipy.interpolate import splprep, splev
|
|
|
|
| 15 |
_SCIPY_AVAILABLE = True
|
| 16 |
except ImportError:
|
| 17 |
_SCIPY_AVAILABLE = False
|
|
@@ -141,7 +143,7 @@ class LineartConfig:
|
|
| 141 |
lineart_coarse: bool = True
|
| 142 |
|
| 143 |
# AUMENTADO: For莽a a ignorar dobras de roupa e focar s贸 na estrutura
|
| 144 |
-
lineart_threshold: int =
|
| 145 |
|
| 146 |
# AJUSTE DE CABELO E CORPO: Diminu铆do para capturar fios e dobras de roupa.
|
| 147 |
lineart_min_perimeter: float = 70.0
|
|
@@ -407,13 +409,13 @@ def build_interior_edges(rgb: np.ndarray, subject_mask: np.ndarray, cfg: Lineart
|
|
| 407 |
cv2.drawContours(filtered, [cnt], -1, 255, cfg.interior_line_thickness)
|
| 408 |
|
| 409 |
# Gentle dilation for solid, embroiderable strokes
|
| 410 |
-
|
| 411 |
filtered = cv2.dilate(filtered, kernel_dilate, iterations=1)
|
| 412 |
filtered = cv2.GaussianBlur(filtered, (3, 3), 0)
|
| 413 |
filtered = cv2.threshold(filtered, 127, 255, cv2.THRESH_BINARY)
|
| 414 |
return filtered
|
| 415 |
except Exception as e:
|
| 416 |
-
print(f"[AI] Neural lineart failed,
|
| 417 |
|
| 418 |
# ---------------- Legacy Canny fallback ----------------
|
| 419 |
return _build_interior_edges_canny(rgb, subject_mask, cfg)
|
|
@@ -446,6 +448,7 @@ def _build_interior_edges_canny(rgb: np.ndarray, subject_mask: np.ndarray, cfg:
|
|
| 446 |
return filtered
|
| 447 |
|
| 448 |
|
|
|
|
| 449 |
_LANDMARKER_LOCK = threading.Lock()
|
| 450 |
_LANDMARKER_CACHE = None
|
| 451 |
_LANDMARKER_NUM_FACES = None
|
|
@@ -723,7 +726,6 @@ def make_faceless_cutout(img: Image.Image) -> Image.Image:
|
|
| 723 |
return remove_background_subject(img)
|
| 724 |
|
| 725 |
|
| 726 |
-
|
| 727 |
def build_faceless_embroidery_assets(img: Image.Image, cfg: Optional[LineartConfig] = None, **kwargs) -> Tuple[Image.Image, Image.Image]:
|
| 728 |
if cfg is None:
|
| 729 |
cfg = LineartConfig()
|
|
|
|
| 10 |
from rembg import remove, new_session
|
| 11 |
import threading
|
| 12 |
|
| 13 |
+
|
| 14 |
try:
|
| 15 |
from scipy.interpolate import splprep, splev
|
| 16 |
+
|
| 17 |
_SCIPY_AVAILABLE = True
|
| 18 |
except ImportError:
|
| 19 |
_SCIPY_AVAILABLE = False
|
|
|
|
| 143 |
lineart_coarse: bool = True
|
| 144 |
|
| 145 |
# AUMENTADO: For莽a a ignorar dobras de roupa e focar s贸 na estrutura
|
| 146 |
+
lineart_threshold: int = 105
|
| 147 |
|
| 148 |
# AJUSTE DE CABELO E CORPO: Diminu铆do para capturar fios e dobras de roupa.
|
| 149 |
lineart_min_perimeter: float = 70.0
|
|
|
|
| 409 |
cv2.drawContours(filtered, [cnt], -1, 255, cfg.interior_line_thickness)
|
| 410 |
|
| 411 |
# Gentle dilation for solid, embroiderable strokes
|
| 412 |
+
kernel_dilate = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
|
| 413 |
filtered = cv2.dilate(filtered, kernel_dilate, iterations=1)
|
| 414 |
filtered = cv2.GaussianBlur(filtered, (3, 3), 0)
|
| 415 |
filtered = cv2.threshold(filtered, 127, 255, cv2.THRESH_BINARY)
|
| 416 |
return filtered
|
| 417 |
except Exception as e:
|
| 418 |
+
print(f"[AI] Neural lineart failed, fallink back to Canny: {e}")
|
| 419 |
|
| 420 |
# ---------------- Legacy Canny fallback ----------------
|
| 421 |
return _build_interior_edges_canny(rgb, subject_mask, cfg)
|
|
|
|
| 448 |
return filtered
|
| 449 |
|
| 450 |
|
| 451 |
+
|
| 452 |
_LANDMARKER_LOCK = threading.Lock()
|
| 453 |
_LANDMARKER_CACHE = None
|
| 454 |
_LANDMARKER_NUM_FACES = None
|
|
|
|
| 726 |
return remove_background_subject(img)
|
| 727 |
|
| 728 |
|
|
|
|
| 729 |
def build_faceless_embroidery_assets(img: Image.Image, cfg: Optional[LineartConfig] = None, **kwargs) -> Tuple[Image.Image, Image.Image]:
|
| 730 |
if cfg is None:
|
| 731 |
cfg = LineartConfig()
|