mlbench123 commited on
Commit
6413dde
·
verified ·
1 Parent(s): 935fa5e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -10
app.py CHANGED
@@ -310,7 +310,8 @@ def calculate_paper_scaling_factor(paper_contour: np.ndarray, paper_size: str) -
310
  scale_y = expected_height_mm / detected_height_px
311
 
312
  # Use average of both scales
313
- scaling_factor = (scale_x + scale_y) / 2
 
314
 
315
  logger.info(f"Paper detection: {detected_width_px}x{detected_height_px} px -> {expected_width_mm}x{expected_height_mm} mm")
316
  logger.info(f"Calculated scaling factor: {scaling_factor:.4f} mm/px")
@@ -408,11 +409,25 @@ def exclude_paper_area(mask: np.ndarray, paper_contour: np.ndarray, expansion_fa
408
  # Create paper mask with slight expansion to ensure complete removal
409
  paper_mask = np.zeros(mask.shape[:2], dtype=np.uint8)
410
 
411
- # Expand paper contour slightly
412
- epsilon = expansion_factor * cv2.arcLength(paper_contour, True)
413
- expanded_contour = cv2.approxPolyDP(paper_contour, epsilon, True)
414
 
415
- cv2.fillPoly(paper_mask, [expanded_contour], 255)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
416
 
417
  # Invert paper mask and apply to object mask
418
  paper_mask_inv = cv2.bitwise_not(paper_mask)
@@ -469,7 +484,7 @@ def save_dxf_spline(inflated_contours, scaling_factor, height, finger_clearance=
469
  original_polygons = []
470
 
471
  # Scale correction factor
472
- scale_correction = 1.079
473
 
474
  for contour in inflated_contours:
475
  try:
@@ -840,11 +855,13 @@ def predict_with_paper(image, paper_size, offset,offset_unit, finger_clearance=F
840
  # Apply edge rounding if specified
841
  rounded_mask = objects_mask.copy()
842
 
843
- # Apply dilation for offset
844
  if offset_mm > 0:
845
- offset_pixels = (float(offset_mm) / scaling_factor) # Remove the *2 +1 which was causing excessive dilation
846
- kernel = np.ones((int(offset_pixels), int(offset_pixels)), np.uint8)
847
- dilated_mask = cv2.dilate(rounded_mask, kernel)
 
 
848
  else:
849
  dilated_mask = rounded_mask.copy()
850
 
 
310
  scale_y = expected_height_mm / detected_height_px
311
 
312
  # Use average of both scales
313
+ # scaling_factor = (scale_x + scale_y) / 2
314
+ scaling_factor = min(scale_x, scale_y)
315
 
316
  logger.info(f"Paper detection: {detected_width_px}x{detected_height_px} px -> {expected_width_mm}x{expected_height_mm} mm")
317
  logger.info(f"Calculated scaling factor: {scaling_factor:.4f} mm/px")
 
409
  # Create paper mask with slight expansion to ensure complete removal
410
  paper_mask = np.zeros(mask.shape[:2], dtype=np.uint8)
411
 
412
+ # # Expand paper contour slightly
413
+ # epsilon = expansion_factor * cv2.arcLength(paper_contour, True)
414
+ # expanded_contour = cv2.approxPolyDP(paper_contour, epsilon, True)
415
 
416
+ # cv2.fillPoly(paper_mask, [expanded_contour], 255)
417
+ # Create a more aggressive inward shrinking of paper bounds
418
+ rect = cv2.boundingRect(paper_contour)
419
+ shrink_pixels = int(min(rect[2], rect[3]) * 0.05) # Shrink by 5% of smaller dimension
420
+
421
+ # Create shrunken rectangle
422
+ x, y, w, h = rect
423
+ shrunken_contour = np.array([
424
+ [[x + shrink_pixels, y + shrink_pixels]],
425
+ [[x + w - shrink_pixels, y + shrink_pixels]],
426
+ [[x + w - shrink_pixels, y + h - shrink_pixels]],
427
+ [[x + shrink_pixels, y + h - shrink_pixels]]
428
+ ])
429
+
430
+ cv2.fillPoly(paper_mask, [shrunken_contour], 255)
431
 
432
  # Invert paper mask and apply to object mask
433
  paper_mask_inv = cv2.bitwise_not(paper_mask)
 
484
  original_polygons = []
485
 
486
  # Scale correction factor
487
+ scale_correction = 1.0
488
 
489
  for contour in inflated_contours:
490
  try:
 
855
  # Apply edge rounding if specified
856
  rounded_mask = objects_mask.copy()
857
 
858
+ # Apply dilation for offset - more precise calculation
859
  if offset_mm > 0:
860
+ offset_pixels = int(round(float(offset_mm) / scaling_factor))
861
+ if offset_pixels > 0:
862
+ kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (offset_pixels*2+1, offset_pixels*2+1))
863
+ dilated_mask = cv2.dilate(rounded_mask, kernel, iterations=1)
864
+
865
  else:
866
  dilated_mask = rounded_mask.copy()
867