Principle:Obss Sahi Result Visualization
| Knowledge Sources | |
|---|---|
| Domains | Object_Detection, Computer_Vision, Visualization |
| Last Updated | 2026-02-08 12:00 GMT |
Overview
The process of rendering object detection predictions (bounding boxes, masks, labels, and confidence scores) as visual overlays on the source image for inspection and export.
Description
Result visualization is the final step in the detection pipeline that transforms numerical predictions into human-interpretable visual output. This involves:
- Bounding box rendering: Drawing rectangles around detected objects
- Label annotation: Overlaying class names and confidence scores near each detection
- Mask visualization: Blending segmentation masks as semi-transparent color overlays
- Oriented bounding box (OBB) support: Drawing rotated polygons for OBB predictions
- Color coding: Assigning distinct colors per category for visual clarity
The visualization must handle diverse prediction types (standard bboxes, instance masks, oriented bounding boxes) and support both interactive display and file export in common image formats (PNG, JPG).
In addition to visual rendering, results can be exported in COCO annotation format (JSON) for downstream evaluation or analysis via PredictionResult.to_coco_annotations() and save_json().
Usage
Use result visualization as the last step in the SAHI inference pipeline to inspect detection quality, generate visual reports, or create annotated images for presentations. Also used for exporting predictions in COCO JSON format for evaluation.
Theoretical Basis
Visualization follows a layered rendering approach:
# Pseudocode for detection visualization
def visualize(image, predictions):
for pred in predictions:
color = category_color_palette[pred.category.id]
label = f"{pred.category.name} {pred.score:.2f}"
if pred.has_mask:
if is_obb(pred.mask):
draw_polygon(image, pred.mask.points, color)
else:
blend_mask(image, pred.mask, color, alpha=0.6)
if not is_obb(pred):
draw_rectangle(image, pred.bbox, color, thickness)
draw_label_background(image, label, position, color)
draw_text(image, label, position, white)
return image
The rendering order matters: masks are drawn first (as background overlays), then bounding boxes, then labels on top. This ensures labels remain readable over masks and boxes.