ammariii08 commited on
Commit
9193ad6
·
verified ·
1 Parent(s): 3f791bf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -38
app.py CHANGED
@@ -452,7 +452,7 @@ def predict(
452
  # Apply sharpness enhancement.
453
  if isinstance(image, np.ndarray):
454
  pil_image = Image.fromarray(image)
455
- enhanced_image = ImageEnhance.Sharpness(pil_image).enhance(2)
456
  image = np.array(enhanced_image)
457
 
458
  # ---------------------
@@ -586,6 +586,20 @@ def predict(
586
  gc.collect()
587
  print("DXF generation completed in {:.2f} seconds".format(time.time() - t))
588
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
589
  # ---------------------
590
  # 7) Add optional rectangular boundary (with the 0.75 bottom margin if annotation text is provided)
591
  # ---------------------
@@ -597,39 +611,19 @@ def predict(
597
  if boundary_polygon is not None:
598
  final_polygons_inch.append(boundary_polygon)
599
 
600
- # Compute bounding box of all polygons to know where to place text
601
- min_x = float("inf")
602
- min_y = float("inf")
603
- max_x = -float("inf")
604
- max_y = -float("inf")
605
- for poly in final_polygons_inch:
606
- b = poly.bounds
607
- if b[0] < min_x:
608
- min_x = b[0]
609
- if b[1] < min_y:
610
- min_y = b[1]
611
- if b[2] > max_x:
612
- max_x = b[2]
613
- if b[3] > max_y:
614
- max_y = b[3]
615
-
616
  # ---------------------
617
  # 8) Add annotation text (if provided) in the DXF
618
  # - Text is 0.5 inches high
619
- # - Placed so that there is 0.125 inch ABOVE min_y
620
  # ---------------------
621
  msp = doc.modelspace()
622
  if annotation_text.strip():
623
- text_x = (min_x + max_x) / 2.0 # horizontally centered
624
- text_height_dxf = 0.5
625
-
626
- # If boundary is "yes", we'll place the baseline right above the min_y (0.125 above)
627
- if add_boundary.lower() == "yes":
628
- text_y_dxf = min_y + 0.125
629
- else:
630
- # If no boundary, place it 0.125 above the min_y
631
- text_y_dxf = min_y - 0.125
632
-
633
  text_entity = msp.add_text(
634
  annotation_text.strip(),
635
  dxfattribs={
@@ -652,16 +646,17 @@ def predict(
652
  draw_polygons_inch(final_polygons_inch, new_outlines, scaling_factor, processed_size[0], color=(0, 0, 255), thickness=2)
653
 
654
  if annotation_text.strip():
655
- text_height_cv = 0.5 # same "logical" height in inches
656
- if add_boundary.lower() == "yes":
657
- text_y_in = min_y + 0.125
658
- else:
659
- text_y_in = min_y + 0.125
660
-
661
- # Convert to pixel coords
662
- text_px = int(((min_x + max_x) / 2.0) / scaling_factor)
663
- text_py = int(processed_size[0] - (text_y_in / scaling_factor))
664
- org = (text_px - int(len(annotation_text.strip()) * 6), text_py) # shift left so text is centered
 
665
 
666
  cv2.putText(
667
  output_img,
 
452
  # Apply sharpness enhancement.
453
  if isinstance(image, np.ndarray):
454
  pil_image = Image.fromarray(image)
455
+ enhanced_image = ImageEnhance.Sharpness(pil_image).enhance(1.5)
456
  image = np.array(enhanced_image)
457
 
458
  # ---------------------
 
586
  gc.collect()
587
  print("DXF generation completed in {:.2f} seconds".format(time.time() - t))
588
 
589
+ # ---------------------
590
+ # Compute bounding box of inner tool contours BEFORE adding optional boundary
591
+ # ---------------------
592
+ inner_min_x = float("inf")
593
+ inner_min_y = float("inf")
594
+ inner_max_x = -float("inf")
595
+ inner_max_y = -float("inf")
596
+ for poly in final_polygons_inch:
597
+ b = poly.bounds
598
+ inner_min_x = min(inner_min_x, b[0])
599
+ inner_min_y = min(inner_min_y, b[1])
600
+ inner_max_x = max(inner_max_x, b[2])
601
+ inner_max_y = max(inner_max_y, b[3])
602
+
603
  # ---------------------
604
  # 7) Add optional rectangular boundary (with the 0.75 bottom margin if annotation text is provided)
605
  # ---------------------
 
611
  if boundary_polygon is not None:
612
  final_polygons_inch.append(boundary_polygon)
613
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
614
  # ---------------------
615
  # 8) Add annotation text (if provided) in the DXF
616
  # - Text is 0.5 inches high
617
+ # - Placed so that its top edge is 0.125 inches below the inner tools' contour
618
  # ---------------------
619
  msp = doc.modelspace()
620
  if annotation_text.strip():
621
+ # Use the inner contours bounding box computed earlier.
622
+ text_x = (inner_min_x + inner_max_x) / 2.0
623
+ text_height_dxf = 0.5
624
+ # Place the text so that its top edge is 0.125 inches below the inner tool contour.
625
+ # Since text height is 0.5 inches, the baseline is at inner_min_y - 0.125 - text_height_dxf.
626
+ text_y_dxf = inner_min_y - 0.125 - text_height_dxf
 
 
 
 
627
  text_entity = msp.add_text(
628
  annotation_text.strip(),
629
  dxfattribs={
 
646
  draw_polygons_inch(final_polygons_inch, new_outlines, scaling_factor, processed_size[0], color=(0, 0, 255), thickness=2)
647
 
648
  if annotation_text.strip():
649
+ # Use the same logic as DXF:
650
+ # Text is 0.5 inches high, and its baseline is at inner_min_y - 0.125 - 0.5.
651
+ text_height_cv = 0.5 # logical height in inches
652
+ # Calculate horizontal center (in inches) and convert to pixels
653
+ text_x_img = int(((inner_min_x + inner_max_x) / 2.0) / scaling_factor)
654
+ # Baseline position in inches:
655
+ text_y_in = inner_min_y - 0.125 - text_height_cv
656
+ # Convert the baseline from inches to pixel coordinate
657
+ text_y_img = int(processed_size[0] - (text_y_in / scaling_factor))
658
+ # Shift left to center the text approximately
659
+ org = (text_x_img - int(len(annotation_text.strip()) * 6), text_y_img)
660
 
661
  cv2.putText(
662
  output_img,