Making it installabel package and switching to segmentation mode
This commit is contained in:
@@ -87,6 +87,7 @@ class InferenceEngine:
|
||||
"class_name": det["class_name"],
|
||||
"bbox": tuple(bbox_normalized),
|
||||
"confidence": det["confidence"],
|
||||
"segmentation_mask": det.get("segmentation_mask"),
|
||||
"metadata": {"class_id": det["class_id"]},
|
||||
}
|
||||
detection_records.append(record)
|
||||
@@ -160,6 +161,7 @@ class InferenceEngine:
|
||||
conf: float = 0.25,
|
||||
bbox_thickness: int = 2,
|
||||
bbox_colors: Optional[Dict[str, str]] = None,
|
||||
draw_masks: bool = True,
|
||||
) -> tuple:
|
||||
"""
|
||||
Detect objects and return annotated image.
|
||||
@@ -169,6 +171,7 @@ class InferenceEngine:
|
||||
conf: Confidence threshold
|
||||
bbox_thickness: Thickness of bounding boxes
|
||||
bbox_colors: Dictionary mapping class names to hex colors
|
||||
draw_masks: Whether to draw segmentation masks (if available)
|
||||
|
||||
Returns:
|
||||
Tuple of (detections, annotated_image_array)
|
||||
@@ -189,12 +192,8 @@ class InferenceEngine:
|
||||
bbox_colors = {}
|
||||
default_color = self._hex_to_bgr(bbox_colors.get("default", "#00FF00"))
|
||||
|
||||
# Draw bounding boxes
|
||||
# Draw detections
|
||||
for det in detections:
|
||||
# Get absolute coordinates
|
||||
bbox_abs = det["bbox_absolute"]
|
||||
x1, y1, x2, y2 = [int(v) for v in bbox_abs]
|
||||
|
||||
# Get color for this class
|
||||
class_name = det["class_name"]
|
||||
color_hex = bbox_colors.get(
|
||||
@@ -202,7 +201,33 @@ class InferenceEngine:
|
||||
)
|
||||
color = self._hex_to_bgr(color_hex)
|
||||
|
||||
# Draw box
|
||||
# Draw segmentation mask if available and requested
|
||||
if draw_masks and det.get("segmentation_mask"):
|
||||
mask_normalized = det["segmentation_mask"]
|
||||
if mask_normalized and len(mask_normalized) > 0:
|
||||
# Convert normalized coordinates to absolute pixels
|
||||
mask_points = np.array(
|
||||
[
|
||||
[int(pt[0] * width), int(pt[1] * height)]
|
||||
for pt in mask_normalized
|
||||
],
|
||||
dtype=np.int32,
|
||||
)
|
||||
|
||||
# Create a semi-transparent overlay
|
||||
overlay = img.copy()
|
||||
cv2.fillPoly(overlay, [mask_points], color)
|
||||
# Blend with original image (30% opacity)
|
||||
cv2.addWeighted(overlay, 0.3, img, 0.7, 0, img)
|
||||
|
||||
# Draw mask contour
|
||||
cv2.polylines(img, [mask_points], True, color, bbox_thickness)
|
||||
|
||||
# Get absolute coordinates for bounding box
|
||||
bbox_abs = det["bbox_absolute"]
|
||||
x1, y1, x2, y2 = [int(v) for v in bbox_abs]
|
||||
|
||||
# Draw bounding box
|
||||
cv2.rectangle(img, (x1, y1), (x2, y2), color, bbox_thickness)
|
||||
|
||||
# Prepare label
|
||||
|
||||
Reference in New Issue
Block a user