Skip to main content

A tensor-native, inference-focused fork of Supervision

Project description

Supervision, except the numbers have finally been informed that GPUs exist.

SuperiorVision is Roboflow's tensor-native, inference-focused fork of Supervision. It preserves the import supervision as sv API used by Roboflow Inference, while keeping rectangular numeric state in torch.Tensor objects throughout the supported code paths.

If detections begin as tensors, converting them to NumPy so the next operation can turn them back into tensors is not "compatibility." It is cardio. SuperiorVision declines the workout.

version downloads license python-version codecov

snyk colab gradio discord

roboflow%2Fsupervision | Trendshift

Same API. Fewer NumPy vacations.

For the external multi-object trackers used by Inference, pair SuperiorVision with the private Tracktors fork. The dependency points one way—Tracktors consumes tensor-native sv.Detections—so SuperiorVision keeps its existing sv.ByteTrack compatibility API without a circular package dependency.

📑 Table of Contents

👋 Hello

We are your essential toolkit for computer vision. From data loading to real-time zone counting, we provide the building blocks so you can focus on building applications around your models. 🤝

💻 Install

Pip install the supervision package in a Python>=3.10 environment.

git clone git@github.com:roboflow/superiorvision.git
cd superiorvision
pip install -e .

Both imports are supported:

import supervision as sv       # existing Inference code
import superiorvision as sv    # cheekier spelling, same API

Because SuperiorVision provides the supervision namespace, install it as a replacement for upstream Supervision, not beside it. Two packages cannot both own the same trench coat and pretend everything is fine.

The upstream documentation below remains useful for the compatible API surface.

🔥 Quickstart

Models

Supervision was designed to be model agnostic. Just plug in any classification, detection, or segmentation model. For your convenience, we have created connectors for the most popular libraries like Ultralytics, Transformers, MMDetection, or Inference. Other integrations, like rfdetr, already return sv.Detections directly.

Install the optional dependencies for this example with pip install pillow rfdetr.

import supervision as sv
from PIL import Image
from rfdetr import RFDETRSmall

image = Image.open("path/to/image.jpg")
model = RFDETRSmall()
detections = model.predict(image, threshold=0.5)

len(detections)
# 5
👉 more model connectors
  • inference

    Running with Inference requires a Roboflow API KEY.

    import supervision as sv
    from PIL import Image
    from inference import get_model
    
    image = Image.open("path/to/image.jpg")
    model = get_model(model_id="rfdetr-small", api_key="ROBOFLOW_API_KEY")
    result = model.infer(image)[0]
    detections = sv.Detections.from_inference(result)
    
    len(detections)
    # 5
    

Annotators

Supervision offers a wide range of highly customizable annotators, allowing you to compose the perfect visualization for your use case.

import cv2
import supervision as sv

image = cv2.imread("path/to/image.jpg")
# Assuming detections are obtained from a model
detections = sv.Detections(...)

box_annotator = sv.BoxAnnotator()
annotated_frame = box_annotator.annotate(scene=image.copy(), detections=detections)

https://github.com/roboflow/supervision/assets/26109316/691e219c-0565-4403-9218-ab5644f39bce

Datasets

Supervision provides a set of utils that allow you to load, split, merge, and save datasets in one of the supported formats.

import supervision as sv
from roboflow import Roboflow

project = Roboflow().workspace("WORKSPACE_ID").project("PROJECT_ID")
dataset = project.version("PROJECT_VERSION").download("coco")

ds = sv.DetectionDataset.from_coco(
    images_directory_path=f"{dataset.location}/train",
    annotations_path=f"{dataset.location}/train/_annotations.coco.json",
)

path, image, annotation = ds[0]
# loads image on demand

for path, image, annotation in ds:
    # loads image on demand
    pass
👉 more dataset utils
  • load

    dataset = sv.DetectionDataset.from_yolo(
        images_directory_path=...,
        annotations_directory_path=...,
        data_yaml_path=...,
    )
    
    dataset = sv.DetectionDataset.from_pascal_voc(
        images_directory_path=...,
        annotations_directory_path=...,
    )
    
    dataset = sv.DetectionDataset.from_coco(
        images_directory_path=...,
        annotations_path=...,
    )
    
  • split

    train_dataset, test_dataset = dataset.split(split_ratio=0.7)
    test_dataset, valid_dataset = test_dataset.split(split_ratio=0.5)
    
    len(train_dataset), len(test_dataset), len(valid_dataset)
    # (700, 150, 150)
    
  • merge

    ds_1 = sv.DetectionDataset(...)
    len(ds_1)
    # 100
    ds_1.classes
    # ['dog', 'person']
    
    ds_2 = sv.DetectionDataset(...)
    len(ds_2)
    # 200
    ds_2.classes
    # ['cat']
    
    ds_merged = sv.DetectionDataset.merge([ds_1, ds_2])
    len(ds_merged)
    # 300
    ds_merged.classes
    # ['cat', 'dog', 'person']
    
  • save

    dataset.as_yolo(
        images_directory_path=...,
        annotations_directory_path=...,
        data_yaml_path=...,
    )
    
    dataset.as_pascal_voc(
        images_directory_path=...,
        annotations_directory_path=...,
    )
    
    dataset.as_coco(
        images_directory_path=...,
        annotations_path=...,
    )
    
  • convert

    sv.DetectionDataset.from_yolo(
        images_directory_path=...,
        annotations_directory_path=...,
        data_yaml_path=...,
    ).as_pascal_voc(
        images_directory_path=...,
        annotations_directory_path=...,
    )
    

🎬 Tutorials

Want to learn how to use Supervision? Explore our how-to guides, end-to-end examples, cheatsheet, and cookbooks!


Dwell Time Analysis with Computer Vision | Real-Time Stream Processing Dwell Time Analysis with Computer Vision | Real-Time Stream Processing

Created: 5 Apr 2024

Learn how to use computer vision to analyze wait times and optimize processes. This tutorial covers object detection, tracking, and calculating time spent in designated zones. Use these techniques to improve customer experience in retail, traffic management, or other scenarios.


Speed Estimation & Vehicle Tracking | Computer Vision | Open Source Speed Estimation & Vehicle Tracking | Computer Vision | Open Source

Created: 11 Jan 2024

Learn how to track and estimate the speed of vehicles using YOLO, ByteTrack, and Roboflow Inference. This comprehensive tutorial covers object detection, multi-object tracking, filtering detections, perspective transformation, speed estimation, visualization improvements, and more.

💜 Built with Supervision

Did you build something cool using supervision? Let us know!

https://user-images.githubusercontent.com/26109316/207858600-ee862b22-0353-440b-ad85-caa0c4777904.mp4

https://github.com/roboflow/supervision/assets/26109316/c9436828-9fbf-4c25-ae8c-60e9c81b3900

https://github.com/roboflow/supervision/assets/26109316/3ac6982f-4943-4108-9b7f-51787ef1a69f

📚 Documentation

Visit our documentation page to learn how supervision can help you build computer vision applications faster and more reliably.

🏆 Contribution

We love your input! Please see our contributing guide to get started. Thank you 🙏 to all our contributors!


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

superiorvision-0.30.0.dev0.tar.gz (333.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

superiorvision-0.30.0.dev0-py3-none-any.whl (367.0 kB view details)

Uploaded Python 3

File details

Details for the file superiorvision-0.30.0.dev0.tar.gz.

File metadata

  • Download URL: superiorvision-0.30.0.dev0.tar.gz
  • Upload date:
  • Size: 333.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.10

File hashes

Hashes for superiorvision-0.30.0.dev0.tar.gz
Algorithm Hash digest
SHA256 b91a339579f458bbef52e8ddc2a939b58102f75f2ff0e43bc1ce9843b28b0d20
MD5 190cfc54359c27e445c40829c8801286
BLAKE2b-256 a597ac663f232d6f56bce23d07068414bd3a19e0658589de0a4dc617d8e8a581

See more details on using hashes here.

File details

Details for the file superiorvision-0.30.0.dev0-py3-none-any.whl.

File metadata

File hashes

Hashes for superiorvision-0.30.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 8c0b2388d2a8735e0c4ab001b931f8fa6b0369fd962929f507303439fec8cda8
MD5 cc773bccab8ac37b69701cf9f8ea55be
BLAKE2b-256 e29443fbf18ee824b76d3716420ec864f46a26d1a27a2e3d838caa0269a05c52

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page