Spaces:
Running
Running
Update SegCloth.py
Browse files- SegCloth.py +10 -4
SegCloth.py
CHANGED
@@ -6,12 +6,13 @@ import cv2 # OpenCV for better mask processing
|
|
6 |
# Initialize segmentation pipeline
|
7 |
segmenter = pipeline(model="mattmdjaga/segformer_b2_clothes")
|
8 |
|
|
|
9 |
def segment_clothing(img, clothes):
|
10 |
# Segment image
|
11 |
segments = segmenter(img)
|
12 |
|
13 |
# Define clothing items to expand
|
14 |
-
EXPAND_CLOTHING = {"Upper-clothes", "Skirt", "Pants", "Dress"}
|
15 |
|
16 |
# Create list of masks
|
17 |
mask_list = []
|
@@ -35,14 +36,19 @@ def segment_clothing(img, clothes):
|
|
35 |
for mask in mask_list:
|
36 |
final_mask = np.maximum(final_mask, mask)
|
37 |
|
38 |
-
# Expand selected clothing masks using
|
39 |
for mask in expand_mask_list:
|
40 |
height, width = mask.shape
|
41 |
kernel_size = max(1, int(0.02 * min(height, width))) # 5% expansion
|
42 |
kernel = np.ones((kernel_size, kernel_size), np.uint8)
|
43 |
|
44 |
-
#
|
45 |
-
|
|
|
|
|
|
|
|
|
|
|
46 |
final_mask = np.maximum(final_mask, dilated_mask)
|
47 |
|
48 |
# Optional: Use contour filling to ensure all areas within contours are filled
|
|
|
6 |
# Initialize segmentation pipeline
|
7 |
segmenter = pipeline(model="mattmdjaga/segformer_b2_clothes")
|
8 |
|
9 |
+
|
10 |
def segment_clothing(img, clothes):
|
11 |
# Segment image
|
12 |
segments = segmenter(img)
|
13 |
|
14 |
# Define clothing items to expand
|
15 |
+
EXPAND_CLOTHING = {"Upper-clothes", "Skirt", "Pants", "Dress", "Belt", "Left-shoe", "Right-shoe"}
|
16 |
|
17 |
# Create list of masks
|
18 |
mask_list = []
|
|
|
36 |
for mask in mask_list:
|
37 |
final_mask = np.maximum(final_mask, mask)
|
38 |
|
39 |
+
# Expand selected clothing masks using closing + dilation
|
40 |
for mask in expand_mask_list:
|
41 |
height, width = mask.shape
|
42 |
kernel_size = max(1, int(0.02 * min(height, width))) # 5% expansion
|
43 |
kernel = np.ones((kernel_size, kernel_size), np.uint8)
|
44 |
|
45 |
+
# **Step 1: Fill gaps using Closing (Dilation + Erosion)**
|
46 |
+
closed_mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)
|
47 |
+
|
48 |
+
# **Step 2: Expand using Dilation**
|
49 |
+
dilated_mask = cv2.dilate(closed_mask, kernel, iterations=1)
|
50 |
+
|
51 |
+
# Merge into final mask
|
52 |
final_mask = np.maximum(final_mask, dilated_mask)
|
53 |
|
54 |
# Optional: Use contour filling to ensure all areas within contours are filled
|