Changelog
0.10.0 June 14, 2023¶
- Added [#125]: ability to load and save
sv.ClassificationDatasetin a folder structure format.
>>> import supervision as sv
>>> cs = sv.ClassificationDataset.from_folder_structure(
... root_directory_path='...'
... )
>>> cs.as_folder_structure(
... root_directory_path='...'
... )
-
Added [#125]: support for
sv.ClassificationDataset.splitallowing to dividesv.ClassificationDatasetinto two parts. -
Added [#110]: ability to extract masks from Roboflow API results using
sv.Detections.from_roboflow. -
Added [commit hash]: Supervision Quickstart notebook where you can learn more about Detection, Dataset and Video APIs.
-
Changed [#135]:
sv.get_video_frames_generatordocumentation to better describe actual behavior.
0.9.0 June 7, 2023¶
- Added [#118]: ability to select
sv.Detectionsby index, list of indexes or slice. Here is an example illustrating the new selection methods.
>>> import supervision as sv
>>> detections = sv.Detections(...)
>>> len(detections[0])
1
>>> len(detections[[0, 1]])
2
>>> len(detections[0:2])
2
-
Added [#101]: ability to extract masks from YOLOv8 result using
sv.Detections.from_yolov8. Here is an example illustrating how to extract boolean masks from the result of the YOLOv8 model inference. -
Added [#122]: ability to crop image using
sv.crop. Here is an example showing how to get a separate crop for each detection insv.Detections. -
Added [#120]: ability to conveniently save multiple images into directory using
sv.ImageSink. Here is an example showing how to save every tenth video frame as a separate image.
>>> import supervision as sv
>>> with sv.ImageSink(target_dir_path='target/directory/path') as sink:
... for image in sv.get_video_frames_generator(source_path='source_video.mp4', stride=10):
... sink.save_image(image=image)
- Fixed [#106]: inconvenient handling of
sv.PolygonZonecoordinates. Nowsv.PolygonZoneaccepts coordinates in the form of[[x1, y1], [x2, y2], ...]that can be both integers and floats.
0.8.0 May 17, 2023¶
- Added [#100]: support for dataset inheritance. The current
Datasetgot renamed toDetectionDataset. NowDetectionDatasetinherits fromBaseDataset. This change was made to enforce the future consistency of APIs of different types of computer vision datasets. - Added [#100]: ability to save datasets in YOLO format using
DetectionDataset.as_yolo.
>>> import roboflow
>>> from roboflow import Roboflow
>>> import supervision as sv
>>> roboflow.login()
>>> rf = Roboflow()
>>> project = rf.workspace(WORKSPACE_ID).project(PROJECT_ID)
>>> dataset = project.version(PROJECT_VERSION).download("yolov5")
>>> ds = sv.DetectionDataset.from_yolo(
... images_directory_path=f"{dataset.location}/train/images",
... annotations_directory_path=f"{dataset.location}/train/labels",
... data_yaml_path=f"{dataset.location}/data.yaml"
... )
>>> ds.classes
['dog', 'person']
- Added [#102]: support for
DetectionDataset.splitallowing to divideDetectionDatasetinto two parts.
>>> import supervision as sv
>>> ds = sv.DetectionDataset(...)
>>> train_ds, test_ds = ds.split(split_ratio=0.7, random_state=42, shuffle=True)
>>> len(train_ds), len(test_ds)
(700, 300)
- Changed [#100]: default value of
approximation_percentageparameter from0.75to0.0inDetectionDataset.as_yoloandDetectionDataset.as_pascal_voc.
0.7.0 May 11, 2023¶
- Added [#91]:
Detections.from_yolo_nasto enable seamless integration with YOLO-NAS model. - Added [#86]: ability to load datasets in YOLO format using
Dataset.from_yolo. - Added [#84]:
Detections.mergeto merge multipleDetectionsobjects together. - Fixed [#81]:
LineZoneAnnotator.annotatedoes not return annotated frame. - Changed [#44]:
LineZoneAnnotator.annotateto allow for custom text for the in and out tags.
0.6.0 April 19, 2023¶
- Added [#71]: initial
Datasetsupport and ability to saveDetectionsin Pascal VOC XML format. - Added [#71]: new
mask_to_polygons,filter_polygons_by_area,polygon_to_xyxyandapproximate_polygonutilities. - Added [#72]: ability to load Pascal VOC XML object detections dataset as
Dataset. - Changed [#70]: order of
Detectionsattributes to make it consistent with order of objects in__iter__tuple. - Changed [#71]:
generate_2d_masktopolygon_to_mask.
0.5.2 April 13, 2023¶
- Fixed [#63]:
LineZone.triggerfunction expects 4 values instead of 5.
0.5.1 April 12, 2023¶
- Fixed
Detections.__getitem__method did not return mask for selected item. - Fixed
Detections.areacrashed for mask detections.
0.5.0 April 10, 2023¶
- Added [#58]:
Detections.maskto enable segmentation support. - Added [#58]:
MaskAnnotatorto allow easyDetections.maskannotation. - Added [#58]:
Detections.from_samto enable native Segment Anything Model (SAM) support. - Changed [#58]:
Detections.areabehaviour to work not only with boxes but also with masks.
0.4.0 April 5, 2023¶
- Added [#46]:
Detections.emptyto allow easy creation of emptyDetectionsobjects. - Added [#56]:
Detections.from_roboflowto allow easy creation ofDetectionsobjects from Roboflow API inference results. - Added [#56]:
plot_images_gridto allow easy plotting of multiple images on single plot. - Added [#56]: initial support for Pascal VOC XML format with
detections_to_voc_xmlmethod. - Changed [#56]:
show_frame_in_notebookrefactored and renamed toplot_image.
0.3.2 March 23, 2023¶
- Changed [#50]: Allow
Detections.class_idto beNone.
0.3.1 March 6, 2023¶
- Fixed [#41]:
PolygonZonethrows an exception when the object touches the bottom edge of the image. - Fixed [#42]:
Detections.wth_nmsmethod throws an exception whenDetectionsis empty. - Changed [#36]:
Detections.wth_nmssupport class agnostic and non-class agnostic case.
0.3.0 March 6, 2023¶
- Changed: Allow
Detections.confidenceto beNone. - Added:
Detections.from_transformersandDetections.from_detectron2to enable seamless integration with Transformers and Detectron2 models. - Added:
Detections.areato dynamically calculate bounding box area. - Added:
Detections.wth_nmsto filter out double detections with NMS. Initial - only class agnostic - implementation.
0.2.0 February 2, 2023¶
- Added: Advanced
Detectionsfiltering with pandas-like API. - Added:
Detections.from_yolov5andDetections.from_yolov8to enable seamless integration with YOLOv5 and YOLOv8 models.
0.1.0 January 19, 2023¶
Say hello to Supervision 👋