VolumeAnnotationAPI

class VolumeAnnotationAPI[source]

Bases: supervisely.api.entity_annotation.entity_annotation_api.EntityAnnotationAPI

VolumeAnnotation for a single volume. VolumeAnnotationAPI object is immutable.

Parameters
api : Api

API connection to the server.

Usage example
import supervisely as sly

import os
from dotenv import load_dotenv

import supervisely as sly

# Load secrets and create API object from .env file (recommended)
# Learn more here: https://developer.supervisely.com/getting-started/basics-of-authentication
if sly.is_development():
    load_dotenv(os.path.expanduser("~/supervisely.env"))
api = sly.Api.from_env()

# Pass values into the API constructor (optional, not recommended)
# api = sly.Api(server_address="https://app.supervise.ly", token="4r47N...xaTatb")

volume_id = 19581134
ann_info = api.volume.annotation.download(volume_id)

Methods

append

Loads VolumeAnnotation to a given volume ID in the API.

append_objects

Add new VolumeObjects to a volume annotation in Supervisely project.

download

Download information about VolumeAnnotation by volume ID from API.

download_bulk

Download a list of content (annotations with given ids from dataset with given id).

exists

Checks if an entity with the given parent_id and name exists

get_free_name

Generates a free name for an entity with the given parent_id and name.

get_info_by_id

Get information about an entity by its ID from the Supervisely server.

get_info_by_name

Get information about an entity by its name from the Supervisely server.

get_list

Get list of entities in parent entity with given parent ID.

get_list_all_pages

Get list of all or limited quantity entities from the Supervisely server.

get_list_all_pages_generator

This generator function retrieves a list of all or a limited quantity of entities from the Supervisely server, yielding batches of entities as they are retrieved

info_sequence

Get list of all class field names.

info_tuple_name

Get string name of NamedTuple.

upload_paths

Loads VolumeAnnotations from a given paths to a given volumes IDs in the API.

Attributes

MAX_WAIT_ATTEMPTS

Maximum number of attempts that will be made to wait for a certain condition to be met.

WAIT_ATTEMPT_TIMEOUT_SEC

Number of seconds for intervals between attempts.

append(volume_id, ann, key_id_map=None)[source]

Loads VolumeAnnotation to a given volume ID in the API.

Parameters
volume_id : int

Volume ID in Supervisely.

ann : VolumeAnnotation

VolumeAnnotation object.

key_id_map : KeyIdMap, optional

KeyIdMap object.

Returns

None

Return type

NoneType

Usage example
import supervisely as sly

os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
api = sly.Api.from_env()

volume_id = 19581134
api.volume.annotation.append(volume_id, volume_ann)
append_objects(volume_id, objects, key_id_map=None)[source]

Add new VolumeObjects to a volume annotation in Supervisely project.

Parameters
volume_id : int

The ID of the volume.

objects : List[VolumeObject] or VolumeObjectCollection

New volume objects.

key_id_map : KeyIdMap, optional

The KeyIdMap (optional).

Returns

None

Return type

NoneType

Usage example
import os
from dotenv import load_dotenv

import supervisely as sly

# Load secrets and create API object from .env file (recommended)
# Learn more here: https://developer.supervisely.com/getting-started/basics-of-authentication
if sly.is_development():
   load_dotenv(os.path.expanduser("~/supervisely.env"))
api = sly.Api.from_env()

volume_id = 151344
volume_info = api.volume.get_info_by_id(volume_id)
mask_3d_path = "data/mask/lung.nrrd"
lung_obj_class = sly.ObjClass("lung", sly.Mask3D)
lung = sly.VolumeObject(lung_obj_class, mask_3d=mask_3d_path)
objects = sly.VolumeObjectCollection([lung])
api.volume.annotation.append_objects(volume_info.id, objects)
download(volume_id)[source]

Download information about VolumeAnnotation by volume ID from API. :type volume_id: int :param volume_id: Volume ID in Supervisely. :type volume_id: int :return: Information about VolumeAnnotation in json format :rtype: dict :Usage example:

import supervisely as sly

from pprint import pprint

os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
api = sly.Api.from_env()

volume_id = 19581134
ann_info = api.volume.annotation.download(volume_id)
print(ann_info)
# Output:
# {
#     'createdAt': '2023-03-29T12:30:37.078Z',
#     'datasetId': 61803,
#     'description': '',
#     'objects': [],
#     'planes': [],
#     'spatialFigures': [],
#     'tags': [{'createdAt': '2023-04-03T13:21:53.368Z',
#             'id': 12259702,
#             'labelerLogin': 'almaz',
#             'name': 'info',
#             'tagId': 385328,
#             'updatedAt': '2023-04-03T13:21:53.368Z',
#             'value': 'age 31'}],
#     'updatedAt': '2023-03-29T12:30:37.078Z',
#     'volumeId': 19581134,
#     'volumeMeta': {
#             'ACS': 'RAS',
#             'IJK2WorldMatrix': [0.7617, 0, 0,
#                                 -194.2384, 0, 0.76171,
#                                 0, -217.5384, 0,
#                                 0, 2.5, -347.75,
#                                 0, 0, 0, 1],
#             'channelsCount': 1,
#             'dimensionsIJK': {'x': 512, 'y': 512, 'z': 139},
#             'intensity': {'max': 3071, 'min': -3024},
#             'rescaleIntercept': 0,
#             'rescaleSlope': 1,
#             'windowCenter': 23.5,
#             'windowWidth': 6095
# },
#     'volumeName': 'CTChest.nrrd'
# }
download_bulk(dataset_id, entity_ids)

Download a list of content (annotations with given ids from dataset with given id).

Parameters
dataset_id : int

int

entity_ids : List[int]

list of integers

Return type

Dict

Returns

list of content(annotations with given ids from dataset with given id), received after execution post request

exists(parent_id, name)

Checks if an entity with the given parent_id and name exists

Parameters
parent_id : int

ID of the parent entity.

name : str

Name of the entity.

Returns

Returns True if entity exists, and False if not

Return type

bool

Usage example
import supervisely as sly

# You can connect to API directly
address = 'https://app.supervise.ly/'
token = 'Your Supervisely API Token'
api = sly.Api(address, token)

# Or you can use API from environment
os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
api = sly.Api.from_env()


name = "IMG_0315.jpeg"
dataset_id = 55832
exists = api.image.exists(dataset_id, name)
print(exists) # True
get_free_name(parent_id, name)

Generates a free name for an entity with the given parent_id and name. Adds an increasing suffix to original name until a unique name is found.

Parameters
parent_id : int

ID of the parent entity.

name : str

Name of the entity.

Returns

Returns free name.

Return type

str

Usage example
import supervisely as sly

# You can connect to API directly
address = 'https://app.supervise.ly/'
token = 'Your Supervisely API Token'
api = sly.Api(address, token)

# Or you can use API from environment
os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
api = sly.Api.from_env()


name = "IMG_0315.jpeg"
dataset_id = 55832
free_name = api.image.get_free_name(dataset_id, name)
print(free_name) # IMG_0315_001.jpeg
get_info_by_id(id)

Get information about an entity by its ID from the Supervisely server.

Parameters
id : int

ID of the entity.

get_info_by_name(parent_id, name, fields=[])

Get information about an entity by its name from the Supervisely server.

Parameters
parent_id : int

ID of the parent entity.

name : str

Name of the entity for which the information is being retrieved.

fields : List[str]

The list of api fields which will be returned with the response.

Usage example
import supervisely as sly

# You can connect to API directly
address = 'https://app.supervise.ly/'
token = 'Your Supervisely API Token'
api = sly.Api(address, token)

# Or you can use API from environment
os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
api = sly.Api.from_env()


dataset_id = 55832
name = "IMG_0315.jpeg"
info = api.image.get_info_by_name(dataset_id, name)
print(info)
# Output: ImageInfo(id=19369643, name='IMG_0315.jpeg', ...)
get_list(parent_id, filters=None)

Get list of entities in parent entity with given parent ID.

Parameters
parent_id : int

parent ID in Supervisely.

filters : List[Dict[str, str]], optional

List of parameters to sort output entities.

Usage example
import supervisely as sly

# You can connect to API directly
address = 'https://app.supervise.ly/'
token = 'Your Supervisely API Token'
api = sly.Api(address, token)

# Or you can use API from environment
os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
api = sly.Api.from_env()


dataset_id = 55832
images = api.image.get_list(dataset_id)
print(images)
# Output: [
    ImageInfo(id=19369642, ...)
    ImageInfo(id=19369643, ...)
    ImageInfo(id=19369644, ...)
]
get_list_all_pages(method, data, progress_cb=None, convert_json_info_cb=None, limit=None, return_first_response=False)

Get list of all or limited quantity entities from the Supervisely server.

Parameters
method : str

Request method name

data : dict

Dictionary with request body info

progress_cb : Progress, optional

Function for tracking download progress.

convert_json_info_cb : Callable, optional

Function for convert json info

limit : int, optional

Number of entity to retrieve

return_first_response : bool, optional

Specify if return first response

get_list_all_pages_generator(method, data, progress_cb=None, convert_json_info_cb=None, limit=None, return_first_response=False)

This generator function retrieves a list of all or a limited quantity of entities from the Supervisely server, yielding batches of entities as they are retrieved

Parameters
method : str

Request method name

data : dict

Dictionary with request body info

progress_cb : Progress, optional

Function for tracking download progress.

convert_json_info_cb : Callable, optional

Function for convert json info

limit : int, optional

Number of entity to retrieve

return_first_response : bool, optional

Specify if return first response

static info_sequence()

Get list of all class field names.

static info_tuple_name()

Get string name of NamedTuple.

upload_paths(volume_ids, ann_paths, project_meta, interpolation_dirs=None, progress_cb=None, mask_dirs=None)[source]

Loads VolumeAnnotations from a given paths to a given volumes IDs in the API. Volumes IDs must be from one dataset.

Parameters
volume_ids : List[int]

Volumes IDs in Supervisely.

ann_paths : List[str]

Paths to annotation files

project_meta : ProjectMeta

Input ProjectMeta for VolumeAnnotations

interpolation_dirs : List[str], optional

Paths to dirs with interpolation STL files

progress_cb : tqdm or callable, optional

Function for tracking download progress

mask_dirs : List[str], optional

Paths to dirs with Mask3D geometries

Returns

None

Return type

NoneType

Usage example
import supervisely as sly

os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
api = sly.Api.from_env()

volume_ids = [121236918, 121236919]
ann_pathes = ['/home/admin/work/supervisely/example/ann1.json', '/home/admin/work/supervisely/example/ann2.json']
api.volume.annotation.upload_paths(volume_ids, ann_pathes, meta)