github roboflow/supervision 0.2.0
supervision-0.2.0

latest releases: 0.22.0rc1, 0.21.0, 0.21.0rc5...
17 months ago

🔪 Killer features

  • Support for PolygonZone and PolygonZoneAnnotator 🔥
👉 Code example
import numpy as np
import supervision as sv
from ultralytics import YOLO

# initiate polygon zone
polygon = np.array([
    [1900, 1250],
    [2350, 1250],
    [3500, 2160],
    [1250, 2160]
])
video_info = sv.VideoInfo.from_video_path(MALL_VIDEO_PATH)
zone = sv.PolygonZone(polygon=polygon, frame_resolution_wh=video_info.resolution_wh)

# initiate annotators
box_annotator = sv.BoxAnnotator(thickness=4, text_thickness=4, text_scale=2)
zone_annotator = sv.PolygonZoneAnnotator(zone=zone, color=sv.Color.white(), thickness=6, text_thickness=6, text_scale=4)

# extract video frame
generator = sv.get_video_frames_generator(MALL_VIDEO_PATH)
iterator = iter(generator)
frame = next(iterator)

# detect
model = YOLO('yolov8s.pt')
results = model(frame, imgsz=1280)[0]
detections = sv.Detections.from_yolov8(results)
detections = detections[detections.class_id == 0]
zone.trigger(detections=detections)

# annotate
box_annotator = sv.BoxAnnotator(thickness=4, text_thickness=4, text_scale=2)
labels = [f"{model.names[class_id]} {confidence:0.2f}" for _, confidence, class_id, _ in detections]
frame = box_annotator.annotate(scene=frame, detections=detections, labels=labels)
frame = zone_annotator.annotate(scene=frame)

supervision-0-2-0

  • Advanced vs.Detections filtering with pandas-like API.
detections = detections[(detections.class_id == 0) & (detections.confidence > 0.5)]
  • Improved integration with YOLOv5 and YOLOv8 models.
import torch
import supervision as sv

model = torch.hub.load('ultralytics/yolov5', 'yolov5x6')
results = model(frame, size=1280)
detections = sv.Detections.from_yolov5(results)
from ultralytics import YOLO
import supervision as sv

model = YOLO('yolov8s.pt')
results = model(frame, imgsz=1280)[0]
detections = sv.Detections.from_yolov8(results)

🚀 Added

  • supervision.get_polygon_center function - takes in a polygon as a 2-dimensional numpy.ndarray and returns the center of the polygon as a Point object
  • supervision.draw_polygon function - draw a polygon on a scene
  • supervision.draw_text function - draw a text on a scene
  • supervision.ColorPalette.default() - class method - to generate default ColorPalette
  • supervision.generate_2d_mask function - generate a 2D mask from a polygon
  • supervision.PolygonZone class - to define polygon zones and validate if supervision.Detections are in the zone
  • supervision.PolygonZoneAnnotator class - to draw supervision.PolygonZone on scene

🌱 Changed

  • VideoInfo API - change the property name resolution -> resolution_wh to make it more descriptive; convert VideoInfo to dataclass
  • process_frame API - change argument name frame -> scene to make it consistent with other classes and methods
  • LineCounter API - rename class LineCounter -> LineZone to make it consistent with PolygonZone
  • LineCounterAnnotator API - rename class LineCounterAnnotator -> LineZoneAnnotator

🏆 Contributors

Don't miss a new supervision release

NewReleases is sending notifications on new releases.