supervisely 6.73.226__py3-none-any.whl → 6.73.228__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of supervisely might be problematic. Click here for more details.

@@ -11,7 +11,10 @@ class ProjectType(StrEnum):
11
11
  POINT_CLOUD_EPISODES = "point_cloud_episodes"
12
12
 
13
13
 
14
-
15
14
  # Constants for multispectral and multiview projects.
16
15
  _MULTISPECTRAL_TAG_NAME = "multispectral"
17
16
  _MULTIVIEW_TAG_NAME = "multiview"
17
+
18
+ _METADATA_SYSTEM_KEY = "sly_system"
19
+ _METADATA_VALIDATION_SCHEMA_KEY = "validation_schema"
20
+ _METADATA_TIMESTAMP_KEY = "validation_schema_timestamp"
@@ -3,6 +3,7 @@
3
3
  # docs
4
4
  from __future__ import annotations
5
5
 
6
+ import asyncio
6
7
  import os
7
8
  from collections import namedtuple
8
9
  from typing import Callable, Dict, List, NamedTuple, Optional, Tuple, Union
@@ -11,17 +12,18 @@ from tqdm import tqdm
11
12
 
12
13
  from supervisely._utils import batched
13
14
  from supervisely.api.api import Api
15
+ from supervisely.api.dataset_api import DatasetInfo
14
16
  from supervisely.api.module_api import ApiField
15
17
  from supervisely.api.video.video_api import VideoInfo
16
18
  from supervisely.collection.key_indexed_collection import KeyIndexedCollection
17
- from supervisely.io.fs import file_exists, mkdir, touch
18
- from supervisely.io.json import dump_json_file, load_json_file
19
+ from supervisely.io.fs import mkdir, touch, touch_async
20
+ from supervisely.io.json import dump_json_file, dump_json_file_async, load_json_file
19
21
  from supervisely.project.project import Dataset, OpenMode, Project
20
22
  from supervisely.project.project import read_single_project as read_project_wrapper
21
23
  from supervisely.project.project_meta import ProjectMeta
22
24
  from supervisely.project.project_type import ProjectType
23
25
  from supervisely.sly_logger import logger
24
- from supervisely.task.progress import Progress, tqdm_sly
26
+ from supervisely.task.progress import tqdm_sly
25
27
  from supervisely.video import video as sly_video
26
28
  from supervisely.video_annotation.key_id_map import KeyIdMap
27
29
  from supervisely.video_annotation.video_annotation import VideoAnnotation
@@ -1166,6 +1168,78 @@ class VideoProject(Project):
1166
1168
  progress_cb=progress_cb,
1167
1169
  )
1168
1170
 
1171
+ @staticmethod
1172
+ async def download_async(
1173
+ api: Api,
1174
+ project_id: int,
1175
+ dest_dir: str,
1176
+ semaphore: asyncio.Semaphore = None,
1177
+ dataset_ids: List[int] = None,
1178
+ download_videos: bool = True,
1179
+ save_video_info: bool = False,
1180
+ log_progress: bool = True,
1181
+ progress_cb: Optional[Union[tqdm, Callable]] = None,
1182
+ include_custom_data: bool = False,
1183
+ ) -> None:
1184
+ """
1185
+ Download video project from Supervisely to the given directory asynchronously.
1186
+
1187
+ :param api: Supervisely Api class object.
1188
+ :type api: :class:`Api<supervisely.api.api.Api>`
1189
+ :param project_id: Project ID in Supervisely.
1190
+ :type project_id: :class:`int`
1191
+ :param dest_dir: Directory to download video project.
1192
+ :type dest_dir: :class:`str`
1193
+ :param semaphore: Semaphore to limit the number of concurrent downloads of items.
1194
+ :type semaphore: :class:`asyncio.Semaphore`, optional
1195
+ :param dataset_ids: Datasets IDs in Supervisely to download.
1196
+ :type dataset_ids: :class:`list` [ :class:`int` ], optional
1197
+ :param download_videos: Download videos from Supervisely video project in dest_dir or not.
1198
+ :type download_videos: :class:`bool`, optional
1199
+ :param save_video_info: Save video infos or not.
1200
+ :type save_video_info: :class:`bool`, optional
1201
+ :param log_progress: Log download progress or not.
1202
+ :type log_progress: :class:`bool`
1203
+ :param progress_cb: Function for tracking download progress.
1204
+ :type progress_cb: :class:`tqdm`, optional
1205
+ :param include_custom_data: Include custom data in the download.
1206
+ :type include_custom_data: :class:`bool`, optional
1207
+ :return: None
1208
+ :rtype: NoneType
1209
+ :Usage example:
1210
+
1211
+ .. code-block:: python
1212
+
1213
+ import supervisely as sly
1214
+
1215
+ os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
1216
+ os.environ['API_TOKEN'] = 'Your Supervisely API Token'
1217
+ api = sly.Api.from_env()
1218
+
1219
+ save_directory = "/home/admin/work/supervisely/source/video_project"
1220
+ project_id = 8888
1221
+
1222
+ loop = sly.utils.get_or_create_event_loop()
1223
+ coroutine = sly.VideoProject.download_async(api, project_id, save_directory)
1224
+ if loop.is_running():
1225
+ future = asyncio.run_coroutine_threadsafe(coroutine, loop)
1226
+ future.result()
1227
+ else:
1228
+ loop.run_until_complete(coroutine)
1229
+ """
1230
+ await download_video_project_async(
1231
+ api=api,
1232
+ project_id=project_id,
1233
+ dest_dir=dest_dir,
1234
+ semaphore=semaphore,
1235
+ dataset_ids=dataset_ids,
1236
+ download_videos=download_videos,
1237
+ save_video_info=save_video_info,
1238
+ log_progress=log_progress,
1239
+ progress_cb=progress_cb,
1240
+ include_custom_data=include_custom_data,
1241
+ )
1242
+
1169
1243
 
1170
1244
  def download_video_project(
1171
1245
  api: Api,
@@ -1458,3 +1532,219 @@ def upload_video_project(
1458
1532
  raise e
1459
1533
 
1460
1534
  return project.id, project.name
1535
+
1536
+
1537
+ async def download_video_project_async(
1538
+ api: Api,
1539
+ project_id: int,
1540
+ dest_dir: str,
1541
+ semaphore: Optional[asyncio.Semaphore] = None,
1542
+ dataset_ids: Optional[List[int]] = None,
1543
+ download_videos: Optional[bool] = True,
1544
+ save_video_info: Optional[bool] = False,
1545
+ log_progress: bool = True,
1546
+ progress_cb: Optional[Union[tqdm, Callable]] = None,
1547
+ include_custom_data: Optional[bool] = False,
1548
+ ) -> None:
1549
+ """
1550
+ Download video project to the local directory.
1551
+
1552
+ :param api: Supervisely API address and token.
1553
+ :type api: Api
1554
+ :param project_id: Project ID to download
1555
+ :type project_id: int
1556
+ :param dest_dir: Destination path to local directory.
1557
+ :type dest_dir: str
1558
+ :param semaphore: Semaphore to limit the number of simultaneous downloads of items.
1559
+ :type semaphore: asyncio.Semaphore, optional
1560
+ :param dataset_ids: Specified list of Dataset IDs which will be downloaded. Datasets could be downloaded from different projects but with the same data type.
1561
+ :type dataset_ids: list(int), optional
1562
+ :param download_videos: Include videos in the download.
1563
+ :type download_videos: bool, optional
1564
+ :param save_video_info: Include video info in the download.
1565
+ :type save_video_info: bool, optional
1566
+ :param log_progress: Show downloading logs in the output.
1567
+ :type log_progress: bool
1568
+ :param progress_cb: Function for tracking the download progress.
1569
+ :type progress_cb: tqdm or callable, optional
1570
+ :param include_custom_data: Include custom data in the download.
1571
+ :type include_custom_data: bool, optional
1572
+ :return: None.
1573
+ :rtype: NoneType
1574
+ :Usage example:
1575
+
1576
+ .. code-block:: python
1577
+
1578
+ import os
1579
+ from dotenv import load_dotenv
1580
+
1581
+ from tqdm import tqdm
1582
+ import supervisely as sly
1583
+
1584
+ os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
1585
+ os.environ['API_TOKEN'] = 'Your Supervisely API Token'
1586
+ api = sly.Api.from_env()
1587
+
1588
+ dest_dir = 'your/local/dest/dir'
1589
+ project_id = 17758
1590
+
1591
+ loop = sly.utils.get_or_create_event_loop()
1592
+ loop.run_until_complete(
1593
+ sly.download_async(api, project_id, dest_dir)
1594
+ )
1595
+ """
1596
+ if semaphore is None:
1597
+ semaphore = api._get_default_semaphore()
1598
+
1599
+ key_id_map = KeyIdMap()
1600
+
1601
+ project_fs = VideoProject(dest_dir, OpenMode.CREATE)
1602
+
1603
+ meta = ProjectMeta.from_json(api.project.get_meta(project_id))
1604
+ project_fs.set_meta(meta)
1605
+
1606
+ if progress_cb is not None:
1607
+ log_progress = False
1608
+
1609
+ datasets = []
1610
+ if dataset_ids is not None:
1611
+ for ds_id in dataset_ids:
1612
+ datasets.append(api.dataset.get_info_by_id(ds_id))
1613
+ else:
1614
+ datasets = api.dataset.get_list(project_id, recursive=True)
1615
+
1616
+ for dataset in datasets:
1617
+ dataset_fs = project_fs.create_dataset(dataset.name)
1618
+ videos = api.video.get_list(dataset.id)
1619
+
1620
+ if log_progress is True:
1621
+ progress_cb = tqdm_sly(
1622
+ desc="Downloading videos from {!r}".format(dataset.name),
1623
+ total=len(videos),
1624
+ )
1625
+
1626
+ tasks = []
1627
+ for video in videos:
1628
+ task = _download_project_item_async(
1629
+ api=api,
1630
+ video=video,
1631
+ semaphore=semaphore,
1632
+ dataset=dataset,
1633
+ dest_dir=dest_dir,
1634
+ project_fs=project_fs,
1635
+ key_id_map=key_id_map,
1636
+ dataset_fs=dataset_fs,
1637
+ include_custom_data=include_custom_data,
1638
+ download_videos=download_videos,
1639
+ save_video_info=save_video_info,
1640
+ progress_cb=progress_cb,
1641
+ )
1642
+ tasks.append(task)
1643
+ await asyncio.gather(*tasks)
1644
+
1645
+ project_fs.set_key_id_map(key_id_map)
1646
+
1647
+
1648
+ def _log_warning(
1649
+ video: VideoInfo,
1650
+ video_file_path: Optional[str] = None,
1651
+ ann_json: Optional[dict] = None,
1652
+ item_info: Optional[dict] = None,
1653
+ ):
1654
+ """
1655
+ This function logs a warning with additional information for debugging.
1656
+ It is used in the _download_project_item_async function.
1657
+ """
1658
+ logger.info(
1659
+ "INFO FOR DEBUGGING",
1660
+ extra={
1661
+ "project_id": video.project_id,
1662
+ "dataset_id": video.dataset_id,
1663
+ "video_id": video.id,
1664
+ "video_name": video.name,
1665
+ "video_file_path": video_file_path,
1666
+ "ann_json": ann_json,
1667
+ "item_info": item_info,
1668
+ },
1669
+ )
1670
+
1671
+
1672
+ async def _download_project_item_async(
1673
+ api: Api,
1674
+ video: VideoInfo,
1675
+ semaphore: asyncio.Semaphore,
1676
+ dataset: DatasetInfo,
1677
+ dest_dir: str,
1678
+ project_fs: Project,
1679
+ key_id_map: KeyIdMap,
1680
+ dataset_fs: VideoDataset,
1681
+ include_custom_data: bool,
1682
+ download_videos: bool,
1683
+ save_video_info: bool = False,
1684
+ progress_cb: Optional[Union[tqdm, Callable]] = None,
1685
+ ) -> None:
1686
+ """
1687
+ This function downloads a video item from the project in Supervisely platform asynchronously.
1688
+ """
1689
+
1690
+ try:
1691
+ ann_json = await api.video.annotation.download_async(video.id, video, semaphore=semaphore)
1692
+ ann_json = ann_json[0]
1693
+ except Exception as e:
1694
+ _log_warning(video)
1695
+ raise e
1696
+
1697
+ video_file_path = dataset_fs.generate_item_path(video.name)
1698
+
1699
+ if include_custom_data:
1700
+ CUSTOM_DATA_DIR = os.path.join(dest_dir, dataset.name, "custom_data")
1701
+ mkdir(CUSTOM_DATA_DIR)
1702
+ custom_data_path = os.path.join(CUSTOM_DATA_DIR, f"{video.name}.json")
1703
+ await dump_json_file_async(video.custom_data, custom_data_path)
1704
+
1705
+ if download_videos:
1706
+ try:
1707
+ video_file_size = video.file_meta.get("size")
1708
+ if progress_cb is not None and video_file_size is not None:
1709
+ item_progress = tqdm_sly(
1710
+ desc=f"Downloading '{video.name}'",
1711
+ total=int(video_file_size),
1712
+ unit="B",
1713
+ unit_scale=True,
1714
+ leave=False,
1715
+ )
1716
+ await api.video.download_path_async(
1717
+ video.id,
1718
+ video_file_path,
1719
+ semaphore=semaphore,
1720
+ progress_cb=item_progress,
1721
+ progress_cb_type="size",
1722
+ )
1723
+ else:
1724
+ await api.video.download_path_async(video.id, video_file_path, semaphore=semaphore)
1725
+ except Exception as e:
1726
+ _log_warning(video, video_file_path)
1727
+ raise e
1728
+ else:
1729
+ await touch_async(video_file_path)
1730
+ item_info = video._asdict() if save_video_info else None
1731
+ try:
1732
+ video_ann = VideoAnnotation.from_json(ann_json, project_fs.meta, key_id_map)
1733
+ except Exception as e:
1734
+ _log_warning(video, ann_json=ann_json)
1735
+ raise e
1736
+ try:
1737
+ await dataset_fs.add_item_file_async(
1738
+ video.name,
1739
+ video_file_path,
1740
+ ann=video_ann,
1741
+ _validate_item=False,
1742
+ _use_hardlink=True,
1743
+ item_info=item_info,
1744
+ )
1745
+ except Exception as e:
1746
+ _log_warning(video, video_file_path, item_info)
1747
+ raise e
1748
+
1749
+ if progress_cb is not None:
1750
+ progress_cb(1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.226
3
+ Version: 6.73.228
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -1,6 +1,6 @@
1
1
  supervisely/README.md,sha256=XM-DiMC6To3I9RjQZ0c61905EFRR_jnCUx2q3uNR-X8,3331
2
- supervisely/__init__.py,sha256=vS6JEEJYxW_qdYjExCz31JKxihtZtOjVRqEblmYdZSs,10784
3
- supervisely/_utils.py,sha256=OICSsrKhhrWRoNasiWsIl2hlR-VVvrJESQAr07WvUos,12181
2
+ supervisely/__init__.py,sha256=Ghm5UsSQGjTr7cWetpSxewX0Rys9yC3rb3PQJQJD0_E,10799
3
+ supervisely/_utils.py,sha256=2l9e8L7-p9twlwsBTFKZPM71bCU0aeP3rvs31wy0P-A,15059
4
4
  supervisely/function_wrapper.py,sha256=R5YajTQ0GnRp2vtjwfC9hINkzQc0JiyGsu8TER373xY,1912
5
5
  supervisely/sly_logger.py,sha256=LG1wTyyctyEKuCuKM2IKf_SMPH7BzkTsFdO-0tnorzg,6225
6
6
  supervisely/tiny_timer.py,sha256=hkpe_7FE6bsKL79blSs7WBaktuPavEVu67IpEPrfmjE,183
@@ -21,14 +21,14 @@ supervisely/annotation/tag_meta_mapper.py,sha256=RWeTrxJ64syodyhXIRSH007bX6Hr3B4
21
21
  supervisely/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  supervisely/api/advanced_api.py,sha256=Nd5cCnHFWc3PSUrCtENxTGtDjS37_lCHXsgXvUI3Ti8,2054
23
23
  supervisely/api/agent_api.py,sha256=ShWAIlXcWXcyI9fqVuP5GZVCigCMJmjnvdGUfLspD6Y,8890
24
- supervisely/api/annotation_api.py,sha256=Eps-Jf10_SQFy7DjghUnyiM6DcVJBsamHDViRAXv2fg,51403
25
- supervisely/api/api.py,sha256=Jvc0nQqu6q4-1ey26AJiCcw96BzqP0ORBQqsoKO7gOI,60633
24
+ supervisely/api/annotation_api.py,sha256=kgbxlAmvwLX7nMFnQ23hZDZryD3tVSehfqRkLEGXQXA,58828
25
+ supervisely/api/api.py,sha256=BdN99Znu_nLjnt--i6xoN9W4v0Am3kYlkqZZeIy4UuE,60633
26
26
  supervisely/api/app_api.py,sha256=hjoL24Nc1POlIqz5bkpMBij5D-cwCHvkznkaGpODyzA,67086
27
- supervisely/api/dataset_api.py,sha256=7iwAyz3pmzFG2i072gLdXjczfBGbyj-V_rRl7Tx-V30,37944
28
- supervisely/api/file_api.py,sha256=UQM5susk1DMgmEEZZq4tiMCKbglKYl8MqiZn1iPLqus,76821
27
+ supervisely/api/dataset_api.py,sha256=2-SQBlgEnIN-0uvDbtPlSXr6ztBeZ3WPryhkOtpBmk4,40786
28
+ supervisely/api/file_api.py,sha256=RM3clcdcfj0MtSqGdu6afCqUieYj_2q5gcEch_36tCE,82421
29
29
  supervisely/api/github_api.py,sha256=NIexNjEer9H5rf5sw2LEZd7C1WR-tK4t6IZzsgeAAwQ,623
30
30
  supervisely/api/image_annotation_tool_api.py,sha256=YcUo78jRDBJYvIjrd-Y6FJAasLta54nnxhyaGyanovA,5237
31
- supervisely/api/image_api.py,sha256=BQ_X0z7G-AFim3u6CBqSRPVRqvfa8OFo4sYywSCYCAM,158458
31
+ supervisely/api/image_api.py,sha256=BMhlJZwfbxFx8eHBQaKNmGI9a7UbOpJrIEmC6Eci-Ck,162395
32
32
  supervisely/api/import_storage_api.py,sha256=BDCgmR0Hv6OoiRHLCVPKt3iDxSVlQp1WrnKhAK_Zl84,460
33
33
  supervisely/api/issues_api.py,sha256=BqDJXmNoTzwc3xe6_-mA7FDFC5QQ-ahGbXk_HmpkSeQ,17925
34
34
  supervisely/api/labeling_job_api.py,sha256=odnzZjp29yM16Gq-FYkv-OA4WFMNJCLFo4qSikW2A7c,56280
@@ -36,7 +36,7 @@ supervisely/api/module_api.py,sha256=nFMvROP7XB6_BVSsP9W_eEKiTlcGYxezyMCV4pdqk8k
36
36
  supervisely/api/neural_network_api.py,sha256=ktPVRO4Jeulougio8F0mioJJHwRJcX250Djp1wBoQ9c,7620
37
37
  supervisely/api/object_class_api.py,sha256=-rQcKwhBw3iL9KNH9c1ROgoimgWM1ls6Wi_tb1R-MzY,7683
38
38
  supervisely/api/plugin_api.py,sha256=TlfrosdRuYG4NUxk92QiQoVaOdztFspPpygyVa3M3zk,5283
39
- supervisely/api/project_api.py,sha256=CNB3kIh_RfW_yOEy58eNpQaE8u6NMOuBmk70QfVni4s,68654
39
+ supervisely/api/project_api.py,sha256=3_4wP3RqLHhbdftwu2LF2iKUMmFxrhk3FryL-OpplZo,78633
40
40
  supervisely/api/project_class_api.py,sha256=5cyjdGPPb2tpttu5WmYoOxUNiDxqiojschkhZumF0KM,1426
41
41
  supervisely/api/remote_storage_api.py,sha256=xy9-j5hSftVcAILyqF_mQdQ1DUywt9msq2QYuSE-PVY,15032
42
42
  supervisely/api/report_api.py,sha256=Om7CGulUbQ4BuJ16eDtz7luLe0JQNqab-LoLpUXu7YE,7123
@@ -49,12 +49,12 @@ supervisely/api/video_annotation_tool_api.py,sha256=Uy1MvT-M7vjC6y-0-V4wFCO-fZt8
49
49
  supervisely/api/workspace_api.py,sha256=5KAxpI9DKBmgF_pyQaXHpGT30HZ9wRtR6DP3FoYFZtY,9228
50
50
  supervisely/api/entity_annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  supervisely/api/entity_annotation/entity_annotation_api.py,sha256=K79KdDyepQv4FiNQHBj9V4-zLIemxK9WG1ig1bfBKb8,3083
52
- supervisely/api/entity_annotation/figure_api.py,sha256=ZO2W2Px4XNHqgEOFhvw-HGsUJpK5Pek5azbNxDOJ47o,20517
52
+ supervisely/api/entity_annotation/figure_api.py,sha256=WgeB6h8ZQsgeORXnEAq2LCCezLIMeVibetFTC1PxQM8,20896
53
53
  supervisely/api/entity_annotation/object_api.py,sha256=gbcNvN_KY6G80Me8fHKQgryc2Co7VU_kfFd1GYILZ4E,8875
54
54
  supervisely/api/entity_annotation/tag_api.py,sha256=jA6q5XuvJ6qAalM9ktGbscbNM07xw4Qo3odkkstvNKY,10882
55
55
  supervisely/api/pointcloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  supervisely/api/pointcloud/pointcloud_annotation_api.py,sha256=_QABI38FCKBc4_VQ0B7jLOKMoRN9FFSt-w-zlEHd44s,7658
57
- supervisely/api/pointcloud/pointcloud_api.py,sha256=mxT3RP3-LBkHN4Waihmy1L34_bQENZQnLGSGE9JA5rc,53399
57
+ supervisely/api/pointcloud/pointcloud_api.py,sha256=EFOrUG0IO_xuqznoWrIRGcsE0ysGjJAz0RYuLJStbNY,53279
58
58
  supervisely/api/pointcloud/pointcloud_episode_annotation_api.py,sha256=YGpU7g05XNV9o5daH5mFcUMmPPfgd085yIMNzXOVJqc,7009
59
59
  supervisely/api/pointcloud/pointcloud_episode_api.py,sha256=K_oPJeibj5oRYooeEWuSe6VxlxCYK3D8yLunm7vDeM0,7919
60
60
  supervisely/api/pointcloud/pointcloud_episode_object_api.py,sha256=k2_wV0EVPo9vxSTVe1qOvqVOMSVE6zGDSkfR6TRNsKs,691
@@ -63,15 +63,15 @@ supervisely/api/pointcloud/pointcloud_figure_api.py,sha256=r1sk3g9IgYVHuNhxyZT1T
63
63
  supervisely/api/pointcloud/pointcloud_object_api.py,sha256=bO1USWb9HAywG_CW4CDu1HLu6l58OqQFuD3ikS9F3bM,5130
64
64
  supervisely/api/pointcloud/pointcloud_tag_api.py,sha256=iShtr052nOElxsyMyZEUT2vypEm6kP00gnP13ABX24A,4691
65
65
  supervisely/api/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- supervisely/api/video/video_annotation_api.py,sha256=DwZh11fBLa_AWwdYbpbSH1ZGh_5TFfLJiPKcXuOVc14,9319
67
- supervisely/api/video/video_api.py,sha256=_UOBYr6p6fjzQWU6EQQcDaAebmCsRsaIyRBxlHImPb8,93036
66
+ supervisely/api/video/video_annotation_api.py,sha256=epOngGQRzaGHWG9kGxSpNwpoUM-LuFs3Y6zFwinuySI,10978
67
+ supervisely/api/video/video_api.py,sha256=XbygE2XHOezjDXU5qYh4CM3r1uFpHy1vULmVTCyTlbE,92978
68
68
  supervisely/api/video/video_figure_api.py,sha256=quksohjhgrK2l2-PtbbNE99fOW6uWXX59-_4xfc-I-k,6244
69
69
  supervisely/api/video/video_frame_api.py,sha256=4GwSI4xdCNYEUvTqzKc-Ewd44fw5zqkFoD24jrrN_aY,10214
70
70
  supervisely/api/video/video_object_api.py,sha256=IC0NP8EoIT_d3xxDRgz2cA3ixSiuJ5ymy64eS-RfmDM,2227
71
71
  supervisely/api/video/video_tag_api.py,sha256=oJgdJt_0w-5UfXaxZ7jdxK0PetZjax1vOfjm0IMYwe8,12266
72
72
  supervisely/api/volume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  supervisely/api/volume/volume_annotation_api.py,sha256=6s7p9nlNYHOMbhfFmVBGJizEKkA-yKEAiuHJZcAqEzM,18190
74
- supervisely/api/volume/volume_api.py,sha256=j8TGNnOY53IDKybuqpTNIWjnCRi8hmTBmfGTMxCj5oQ,55439
74
+ supervisely/api/volume/volume_api.py,sha256=_HKlu3YBNk5aA3d8wMtVcMdhIBrRkhRl17FcbKJDYsk,55381
75
75
  supervisely/api/volume/volume_figure_api.py,sha256=WwmcMw7o3Nvyv52tzmz64yF-WJI0qzAU-zL2JlD7_w0,26039
76
76
  supervisely/api/volume/volume_object_api.py,sha256=F7pLV2MTlBlyN6fEKdxBSUatIMGWSuu8bWj3Hvcageo,2139
77
77
  supervisely/api/volume/volume_tag_api.py,sha256=yNGgXz44QBSW2VGlNDOVLqLXnH8Q2fFrxDFb_girYXA,3639
@@ -554,7 +554,7 @@ supervisely/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
554
554
  supervisely/collection/key_indexed_collection.py,sha256=x2UVlkprspWhhae9oLUzjTWBoIouiWY9UQSS_MozfH0,37643
555
555
  supervisely/collection/str_enum.py,sha256=Zp29yFGvnxC6oJRYNNlXhO2lTSdsriU1wiGHj6ahEJE,1250
556
556
  supervisely/convert/__init__.py,sha256=gRTV93OYJPI3FNfy78HO2SfR59qQ3FFKFSy_jw1adJ8,2571
557
- supervisely/convert/base_converter.py,sha256=1Fm31rm2eBjwfN0hYvCBZ5fr9omU10k5sKHttSlCFpE,18127
557
+ supervisely/convert/base_converter.py,sha256=5ZHYQO7n2xTM3mVORWGjmyzx2LP93IqFZABdORppxS4,18316
558
558
  supervisely/convert/converter.py,sha256=tWxTDfFv7hwzQhUQrBxzfr6WP8FUGFX_ewg5T2HbUYo,8959
559
559
  supervisely/convert/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
560
560
  supervisely/convert/image/image_converter.py,sha256=r-qdhuwOsk727mXIM26ucQhkoIKigu1M0BF-tw9IfGg,10321
@@ -684,10 +684,10 @@ supervisely/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
684
684
  supervisely/io/docker_utils.py,sha256=hb_HXGM8IYB0PF-nD7NxMwaHgzaxIFxofsUzQ_RCUZI,7935
685
685
  supervisely/io/env.py,sha256=8HGnJz7ikkgjPhz77J3UyNU5_umvJlLhxVOKGCgvdas,16907
686
686
  supervisely/io/exception_handlers.py,sha256=wvSP3Sp8HpAPSqri8rNAcitKO3I9dBfBp_somnmCA8A,36465
687
- supervisely/io/fs.py,sha256=2bJxFURUhwoymR2WN3OPHkYdc-FMclrgskr42XrjaGc,49874
687
+ supervisely/io/fs.py,sha256=2ZpAdt8zua423qSrmuXI71b52pGbZatgCeXqs48dufs,51322
688
688
  supervisely/io/fs_cache.py,sha256=985gvBGzveLcDudgz10E4EWVjP9jxdU1Pa0GFfCBoCA,6520
689
689
  supervisely/io/github_utils.py,sha256=jGmvQJ5bjtACuSFABzrxL0jJdh14SezovrHp8T-9y8g,1779
690
- supervisely/io/json.py,sha256=7RGAk72FpPtlHYcyo7-uWZf5IAvQJg_nM09RpXBpaNo,7588
690
+ supervisely/io/json.py,sha256=VvyqXZl22nb6_DJK3TUOPetd5xq9xwRFKumWqsGs7iI,8679
691
691
  supervisely/io/multipart_stream_decoder.py,sha256=rCheeSCAGdw2tNyaWEYa4dvoIDuldXOxH86RVB82c78,14417
692
692
  supervisely/io/network_exceptions.py,sha256=eegxgbtkbKpbjPdiATXpvUSMpe6AFPiu0IAKyxPSXms,4777
693
693
  supervisely/labeling_jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -932,16 +932,16 @@ supervisely/pointcloud_episodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
932
932
  supervisely/pointcloud_episodes/pointcloud_episodes.py,sha256=NqUkVdHBSIplB2wvzL6a8z8EuGNpAJuOn1j5UrmSrQw,3421
933
933
  supervisely/project/__init__.py,sha256=hlzdj9Pgy53Q3qdP8LMtGTChvZHQuuShdtui2eRUQeE,2601
934
934
  supervisely/project/data_version.py,sha256=nknaWJSUCwoDyNG9_d1KA-GjzidhV9zd9Cn8cg15DOU,19270
935
- supervisely/project/download.py,sha256=HtprYsqdzx0AgBmMlvigerFjhMQDtTGuCE1aQ9LBqN0,19704
935
+ supervisely/project/download.py,sha256=qonvHBiKX-leHW9qWJdyBqFNmpI2_t9s54e68h9orq0,23687
936
936
  supervisely/project/pointcloud_episode_project.py,sha256=fcaFAaHVn_VvdiIfHl4IyEFE5-Q3VFGfo7_YoxEma0I,41341
937
937
  supervisely/project/pointcloud_project.py,sha256=Y8Xhi6Hg-KyztwFncezuDfKTt2FILss96EU_LdXzmrA,49172
938
- supervisely/project/project.py,sha256=r1-yVGOKFW2IPnArBCfrXR26GnopqpoqlXozZwFGDfQ,153076
938
+ supervisely/project/project.py,sha256=8ghaq9OCFRdhTNuKo_morBgVxgFOS1KKpmU8Kyl1vdo,180328
939
939
  supervisely/project/project_meta.py,sha256=26s8IiHC5Pg8B1AQi6_CrsWteioJP2in00cRNe8QlW0,51423
940
940
  supervisely/project/project_settings.py,sha256=NLThzU_DCynOK6hkHhVdFyezwprn9UqlnrLDe_3qhkY,9347
941
- supervisely/project/project_type.py,sha256=XRcZG5zI4RR8-JSlG-n0VVjGA4gJSfLIU-hbqiaNOcc,384
941
+ supervisely/project/project_type.py,sha256=_3RqW2CnDBKFOvSIrQT1RJQaiHirs34_jiQS8CkwCpo,530
942
942
  supervisely/project/readme_template.md,sha256=rGmSLRVUSGjvorjpzl0sZ7YA4sKfDexl95NFtMISj3I,9128
943
943
  supervisely/project/upload.py,sha256=AjgHYgVZwUE25ygC5pqvFjdAladbyB8T78mlet5Qpho,3750
944
- supervisely/project/video_project.py,sha256=fA-Q-WRTLR4ZFDGnWKDDwoP9MxDCyKP2AP-6vs2Ekg0,53528
944
+ supervisely/project/video_project.py,sha256=AoZDIF3TAPke3WVZAOSWnuyIs12sFZsY5CxARSNQ5N8,63740
945
945
  supervisely/project/volume_project.py,sha256=LL4IxQyx0DU4acj2imz6diWO3kHHaWnf7QiycTJUTMU,22367
946
946
  supervisely/pyscripts_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
947
947
  supervisely/pyscripts_utils/utils.py,sha256=scEwHJvHRQa8NHIOn2eTwH6-Zc8CGdLoxM-WzH9jcRo,314
@@ -997,9 +997,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
997
997
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
998
998
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
999
999
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1000
- supervisely-6.73.226.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1001
- supervisely-6.73.226.dist-info/METADATA,sha256=MFZ1QnRu-QzhumIcVsb7aQvcfXiXxcbQ_dX9mrVG1tk,33150
1002
- supervisely-6.73.226.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1003
- supervisely-6.73.226.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1004
- supervisely-6.73.226.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1005
- supervisely-6.73.226.dist-info/RECORD,,
1000
+ supervisely-6.73.228.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1001
+ supervisely-6.73.228.dist-info/METADATA,sha256=gEzztrS-yBBzf4a8JM9h_HWYtonbH_CrRzFgNqGr1Fs,33150
1002
+ supervisely-6.73.228.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1003
+ supervisely-6.73.228.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1004
+ supervisely-6.73.228.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1005
+ supervisely-6.73.228.dist-info/RECORD,,