ivanm151 commited on
Commit
611306f
Β·
1 Parent(s): d3fc523
Files changed (2) hide show
  1. app.py +3 -3
  2. utils.py +4 -12
app.py CHANGED
@@ -25,7 +25,7 @@ model3 = load_model3() # freshness (6 классов)
25
  DEVICE = torch.device('cpu')
26
 
27
  # ΠšΠ»Π°ΡΡΡ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ²Π΅ΠΆΠ΅ΡΡ‚ΡŒ
28
- FRESHNESS_ELIGIBLE = {'apple', 'banana', 'orange'}
29
 
30
 
31
  @app.get("/")
@@ -72,7 +72,7 @@ async def predict_full(
72
  cropped_100 = apply_mask_and_crop_letterbox(
73
  orig_np,
74
  mask_256,
75
- margin_ratio=0.02,
76
  target_size=100,
77
  bg_color=(255, 255, 255)
78
  )
@@ -102,7 +102,7 @@ async def predict_full(
102
  cropped_224 = apply_mask_and_crop_letterbox(
103
  orig_np,
104
  mask_256,
105
- margin_ratio=0.05,
106
  target_size=224,
107
  bg_color=(255, 255, 255)
108
  )
 
25
  DEVICE = torch.device('cpu')
26
 
27
  # ΠšΠ»Π°ΡΡΡ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ²Π΅ΠΆΠ΅ΡΡ‚ΡŒ
28
+ FRESHNESS_ELIGIBLE = {'apple', 'banana', 'orange', 'lemon'}
29
 
30
 
31
  @app.get("/")
 
72
  cropped_100 = apply_mask_and_crop_letterbox(
73
  orig_np,
74
  mask_256,
75
+ margin_ratio=0.01,
76
  target_size=100,
77
  bg_color=(255, 255, 255)
78
  )
 
102
  cropped_224 = apply_mask_and_crop_letterbox(
103
  orig_np,
104
  mask_256,
105
+ margin_ratio=0.03,
106
  target_size=224,
107
  bg_color=(255, 255, 255)
108
  )
utils.py CHANGED
@@ -19,19 +19,18 @@ def preprocess_image(image_np: np.ndarray) -> torch.Tensor:
19
  augmented = preprocess_transform(image=image_np)
20
  return augmented['image']
21
 
22
- def postprocess_mask(logits: torch.Tensor, threshold: float = 0.5) -> np.ndarray:
23
  pred = torch.sigmoid(logits).squeeze().cpu().numpy()
24
  binary_mask = (pred > threshold).astype(np.float32)
 
 
 
25
  return binary_mask # shape (256, 256)
26
 
27
  # ────────────────────────────────────────────────
28
  # Для /predict1 β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ маску 256Γ—256
29
  # ────────────────────────────────────────────────
30
 
31
- def resize_mask(mask: np.ndarray, size: int = 256) -> np.ndarray:
32
- return cv2.resize(mask, (size, size), interpolation=cv2.INTER_NEAREST)
33
-
34
-
35
  def mask_to_base64(mask: np.ndarray) -> str:
36
  pil_mask = Image.fromarray((mask * 255).astype(np.uint8)).convert('L')
37
  buffered = io.BytesIO()
@@ -47,13 +46,6 @@ def mask_to_base64(mask: np.ndarray) -> str:
47
  FRUIT_CLASSES = ['apple', 'banana', 'orange', 'strawberry', 'pear', 'lemon', 'cucumber', 'plum', 'raspberry', 'watermelon']
48
 
49
 
50
- def decode_base64_mask(base64_str: str) -> np.ndarray:
51
- img_data = base64.b64decode(base64_str)
52
- pil_img = Image.open(io.BytesIO(img_data)).convert('L')
53
- mask = np.array(pil_img) / 255.0
54
- return mask.astype(np.float32) # shape β‰ˆ (256, 256)
55
-
56
-
57
  def letterbox_resize(img: np.ndarray, target_size: int = 256) -> tuple[np.ndarray, float, tuple[int, int]]:
58
  """
59
  Resize с сохранСниСм ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ + padding Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ
 
19
  augmented = preprocess_transform(image=image_np)
20
  return augmented['image']
21
 
22
+ def postprocess_mask(logits: torch.Tensor, threshold: float = 0.7) -> np.ndarray:
23
  pred = torch.sigmoid(logits).squeeze().cpu().numpy()
24
  binary_mask = (pred > threshold).astype(np.float32)
25
+ kernel = np.ones((3, 3), np.uint8)
26
+ mask = cv2.morphologyEx(binary_mask, cv2.MORPH_CLOSE, kernel) # Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Ρ‹Ρ€ΠΊΠΈ
27
+ binary_mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΡˆΡƒΠΌ
28
  return binary_mask # shape (256, 256)
29
 
30
  # ────────────────────────────────────────────────
31
  # Для /predict1 β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ маску 256Γ—256
32
  # ────────────────────────────────────────────────
33
 
 
 
 
 
34
  def mask_to_base64(mask: np.ndarray) -> str:
35
  pil_mask = Image.fromarray((mask * 255).astype(np.uint8)).convert('L')
36
  buffered = io.BytesIO()
 
46
  FRUIT_CLASSES = ['apple', 'banana', 'orange', 'strawberry', 'pear', 'lemon', 'cucumber', 'plum', 'raspberry', 'watermelon']
47
 
48
 
 
 
 
 
 
 
 
49
  def letterbox_resize(img: np.ndarray, target_size: int = 256) -> tuple[np.ndarray, float, tuple[int, int]]:
50
  """
51
  Resize с сохранСниСм ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ + padding Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ