|
|
|
@ -460,6 +460,7 @@ class Results(SimpleClass): |
|
|
|
|
show=False, |
|
|
|
|
save=False, |
|
|
|
|
filename=None, |
|
|
|
|
color_mode="class", |
|
|
|
|
): |
|
|
|
|
""" |
|
|
|
|
Plots detection results on an input RGB image. |
|
|
|
@ -481,6 +482,7 @@ class Results(SimpleClass): |
|
|
|
|
show (bool): Whether to display the annotated image. |
|
|
|
|
save (bool): Whether to save the annotated image. |
|
|
|
|
filename (str | None): Filename to save image if save is True. |
|
|
|
|
color_mode (bool): Specify the color mode, e.g., 'instance' or 'class'. Default to 'class'. |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
(np.ndarray): Annotated image as a numpy array. |
|
|
|
@ -491,6 +493,7 @@ class Results(SimpleClass): |
|
|
|
|
... im = result.plot() |
|
|
|
|
... im.show() |
|
|
|
|
""" |
|
|
|
|
assert color_mode in {"instance", "class"}, f"Expected color_mode='instance' or 'class', not {color_mode}." |
|
|
|
|
if img is None and isinstance(self.orig_img, torch.Tensor): |
|
|
|
|
img = (self.orig_img[0].detach().permute(1, 2, 0).contiguous() * 255).to(torch.uint8).cpu().numpy() |
|
|
|
|
|
|
|
|
@ -519,17 +522,22 @@ class Results(SimpleClass): |
|
|
|
|
.contiguous() |
|
|
|
|
/ 255 |
|
|
|
|
) |
|
|
|
|
idx = pred_boxes.cls if pred_boxes else range(len(pred_masks)) |
|
|
|
|
idx = pred_boxes.cls if pred_boxes and color_mode == "class" else reversed(range(len(pred_masks))) |
|
|
|
|
annotator.masks(pred_masks.data, colors=[colors(x, True) for x in idx], im_gpu=im_gpu) |
|
|
|
|
|
|
|
|
|
# Plot Detect results |
|
|
|
|
if pred_boxes is not None and show_boxes: |
|
|
|
|
for d in reversed(pred_boxes): |
|
|
|
|
for i, d in enumerate(reversed(pred_boxes)): |
|
|
|
|
c, conf, id = int(d.cls), float(d.conf) if conf else None, None if d.id is None else int(d.id.item()) |
|
|
|
|
name = ("" if id is None else f"id:{id} ") + names[c] |
|
|
|
|
label = (f"{name} {conf:.2f}" if conf else name) if labels else None |
|
|
|
|
box = d.xyxyxyxy.reshape(-1, 4, 2).squeeze() if is_obb else d.xyxy.squeeze() |
|
|
|
|
annotator.box_label(box, label, color=colors(c, True), rotated=is_obb) |
|
|
|
|
annotator.box_label( |
|
|
|
|
box, |
|
|
|
|
label, |
|
|
|
|
color=colors(i if color_mode == "instance" else c, True), |
|
|
|
|
rotated=is_obb, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# Plot Classify results |
|
|
|
|
if pred_probs is not None and show_probs: |
|
|
|
@ -539,8 +547,14 @@ class Results(SimpleClass): |
|
|
|
|
|
|
|
|
|
# Plot Pose results |
|
|
|
|
if self.keypoints is not None: |
|
|
|
|
for k in reversed(self.keypoints.data): |
|
|
|
|
annotator.kpts(k, self.orig_shape, radius=kpt_radius, kpt_line=kpt_line) |
|
|
|
|
for i, k in enumerate(reversed(self.keypoints.data)): |
|
|
|
|
annotator.kpts( |
|
|
|
|
k, |
|
|
|
|
self.orig_shape, |
|
|
|
|
radius=kpt_radius, |
|
|
|
|
kpt_line=kpt_line, |
|
|
|
|
kpt_color=colors(i, True) if color_mode == "instance" else None, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# Show results |
|
|
|
|
if show: |
|
|
|
|