supervisely 6.73.282__py3-none-any.whl → 6.73.283__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.

@@ -168,6 +168,7 @@ class BaseConverter:
168
168
  self._upload_as_links: bool = upload_as_links
169
169
  self._remote_files_map: Optional[Dict[str, str]] = remote_files_map
170
170
  self._supports_links = False # if converter supports uploading by links
171
+ self._force_shape_for_links = False
171
172
  self._api = Api.from_env() if self._upload_as_links else None
172
173
  self._team_id = team_id() if self._upload_as_links else None
173
174
  self._converter = None
@@ -34,6 +34,8 @@ class CityscapesConverter(ImageConverter):
34
34
  super().__init__(input_data, labeling_interface, upload_as_links, remote_files_map)
35
35
 
36
36
  self._classes_mapping = {}
37
+ self._supports_links = True
38
+ self._force_shape_for_links = self.upload_as_links
37
39
 
38
40
  def __str__(self):
39
41
  return AvailableImageConverters.CITYSCAPES
@@ -41,6 +43,10 @@ class CityscapesConverter(ImageConverter):
41
43
  @property
42
44
  def key_file_ext(self) -> str:
43
45
  return ".json"
46
+
47
+ @property
48
+ def ann_ext(self) -> str:
49
+ return ".json"
44
50
 
45
51
  def ann_file_ext(self) -> str:
46
52
  return ".json"
@@ -108,6 +114,8 @@ class CityscapesConverter(ImageConverter):
108
114
  return False
109
115
 
110
116
  def validate_format(self) -> bool:
117
+ if self.upload_as_links:
118
+ self._download_remote_ann_files()
111
119
  detected_ann_cnt = 0
112
120
  images_list, ann_dict = [], {}
113
121
  for root, _, files in os.walk(self._input_data):
@@ -37,6 +37,7 @@ class FastCOCOConverter(COCOConverter, ImageConverter):
37
37
  self._items = []
38
38
  meta = ProjectMeta()
39
39
  warnings = defaultdict(list)
40
+ item_names = set()
40
41
  for ann_path in ann_paths:
41
42
  try:
42
43
  with coco_helper.HiddenCocoPrints():
@@ -74,11 +75,18 @@ class FastCOCOConverter(COCOConverter, ImageConverter):
74
75
  coco_ann = coco_anns[image_id]
75
76
  if len(coco_ann) == 0 or coco_ann is None or image_name is None:
76
77
  continue
78
+ if image_name in item_names:
79
+ # * Block to handle the case when there are mixed annotations: caption and segmentations for the same images
80
+ item = next(item for item in self._items if item.name == image_name)
81
+ if item.shape == (height, width):
82
+ item.ann_data.extend(coco_ann)
83
+ continue
77
84
  item = self.Item(image_name) if image_url is None else self.Item(image_url)
78
85
  item.name = image_name
79
86
  item.ann_data = coco_ann
80
87
  item.set_shape((height, width))
81
88
  self._items.append(item)
89
+ item_names.add(image_name)
82
90
  detected_ann_cnt += len(coco_ann)
83
91
 
84
92
  self._meta = meta
@@ -25,6 +25,8 @@ class COCOConverter(ImageConverter):
25
25
  super().__init__(input_data, labeling_interface, upload_as_links, remote_files_map)
26
26
 
27
27
  self._coco_categories = []
28
+ self._supports_links = True
29
+ self._force_shape_for_links = self.upload_as_links
28
30
 
29
31
  def __str__(self) -> str:
30
32
  return AvailableImageConverters.COCO
@@ -56,6 +58,8 @@ class COCOConverter(ImageConverter):
56
58
  def validate_format(self) -> bool:
57
59
  from pycocotools.coco import COCO # pylint: disable=import-error
58
60
 
61
+ if self.upload_as_links:
62
+ self._download_remote_ann_files()
59
63
  detected_ann_cnt = 0
60
64
  images_list, ann_paths = [], []
61
65
  for root, _, files in os.walk(self._input_data):
@@ -145,7 +149,8 @@ class COCOConverter(ImageConverter):
145
149
  if item.ann_data is None:
146
150
  return Annotation.from_img_path(item.path)
147
151
  else:
148
- item.set_shape()
152
+ if not self.upload_as_links:
153
+ item.set_shape()
149
154
  ann = coco_helper.create_supervisely_annotation(
150
155
  item,
151
156
  meta,
@@ -182,7 +182,7 @@ def convert_rle_mask_to_polygon(coco_ann):
182
182
  return Bitmap(mask).to_contours()
183
183
 
184
184
 
185
- def convert_polygon_vertices(coco_ann, image_size):
185
+ def convert_polygon_vertices(coco_ann, image_size: Tuple[int, int]):
186
186
  polygons = coco_ann["segmentation"]
187
187
  if all(type(coord) is float for coord in polygons):
188
188
  polygons = [polygons]
@@ -136,20 +136,16 @@ class ImageConverter(BaseConverter):
136
136
  item_names = []
137
137
  item_paths = []
138
138
  item_metas = []
139
- anns = []
140
139
  for item in batch:
141
140
  item.path = self.validate_image(item.path)
142
141
  if item.path is None:
143
142
  continue # image has failed validation
144
- item.name = f"{get_file_name(item.path)}{get_file_ext(item.path).lower()}"
145
- if self.upload_as_links and not self.supports_links:
146
- ann = None
147
- else:
148
- ann = self.to_supervisely(item, meta, renamed_classes, renamed_tags)
149
- name = generate_free_name(
150
- existing_names, item.name, with_ext=True, extend_used_names=True
143
+ name = f"{get_file_name(item.path)}{get_file_ext(item.path).lower()}"
144
+
145
+ item.name = generate_free_name(
146
+ existing_names, name, with_ext=True, extend_used_names=True
151
147
  )
152
- item_names.append(name)
148
+ item_names.append(item.name)
153
149
  item_paths.append(item.path)
154
150
 
155
151
  if isinstance(item.meta, str): # path to file
@@ -159,9 +155,6 @@ class ImageConverter(BaseConverter):
159
155
  else:
160
156
  item_metas.append({})
161
157
 
162
- if ann is not None:
163
- anns.append(ann)
164
-
165
158
  with ApiContext(
166
159
  api=api, project_id=project_id, dataset_id=dataset_id, project_meta=meta
167
160
  ):
@@ -173,7 +166,7 @@ class ImageConverter(BaseConverter):
173
166
  metas=item_metas,
174
167
  batch_size=batch_size,
175
168
  conflict_resolution="rename",
176
- force_metadata_for_links=False,
169
+ force_metadata_for_links=self._force_shape_for_links,
177
170
  )
178
171
  else:
179
172
  img_infos = api.image.upload_paths(
@@ -183,8 +176,15 @@ class ImageConverter(BaseConverter):
183
176
  metas=item_metas,
184
177
  conflict_resolution="rename",
185
178
  )
186
-
187
179
  img_ids = [img_info.id for img_info in img_infos]
180
+
181
+ anns = []
182
+ if not (self.upload_as_links and not self.supports_links):
183
+ for info, item in zip(img_infos, batch):
184
+ if self._force_shape_for_links:
185
+ item.set_shape((info.height, info.width))
186
+ anns.append(self.to_supervisely(item, meta, renamed_classes, renamed_tags))
187
+
188
188
  if len(anns) == len(img_ids):
189
189
  api.annotation.upload_anns(
190
190
  img_ids, anns, skip_bounds_validation=self.upload_as_links
@@ -1,6 +1,6 @@
1
1
  import os
2
2
  from collections import defaultdict
3
- from typing import Dict, Union
3
+ from typing import Dict, Union, Optional
4
4
 
5
5
  from supervisely import ProjectMeta, generate_free_name, is_development, logger
6
6
  from supervisely.api.api import Api, ApiContext
@@ -13,6 +13,18 @@ from supervisely.project.project_settings import LabelingInterface
13
13
 
14
14
  class MultiViewImageConverter(ImageConverter):
15
15
 
16
+ def __init__(
17
+ self,
18
+ input_data: str,
19
+ labeling_interface: Optional[Union[LabelingInterface, str]],
20
+ upload_as_links: bool,
21
+ remote_files_map: Optional[Dict[str, str]] = None,
22
+ ):
23
+ super().__init__(input_data, labeling_interface, upload_as_links, remote_files_map)
24
+
25
+ self._supports_links = True
26
+ self._force_shape_for_links = self.upload_as_links
27
+
16
28
  def __str__(self):
17
29
  return AvailableImageConverters.MULTI_VIEW
18
30
 
@@ -79,13 +91,16 @@ class MultiViewImageConverter(ImageConverter):
79
91
  logger.warn(f"Image '{name}' already exists. Renamed to '{new_name}'.")
80
92
  os.rename(image, os.path.join(group_path, new_name))
81
93
  image = os.path.join(group_path, new_name)
94
+ if self._upload_as_links:
95
+ image = self.remote_files_map.get(image, image)
82
96
  images.append(image)
83
97
 
84
98
  with ApiContext(
85
99
  api=api, project_id=project_id, dataset_id=dataset_id, project_meta=meta
86
100
  ):
101
+ kwarg = {"links": images} if self.upload_as_links else {"paths": images}
87
102
  api.image.upload_multiview_images(
88
- dataset.id, group_name, images, progress_cb=progress_cb
103
+ dataset.id, group_name, **kwarg, progress_cb=progress_cb
89
104
  )
90
105
 
91
106
  if log_progress:
@@ -38,6 +38,8 @@ class YOLOConverter(ImageConverter):
38
38
  self._coco_classes_dict: dict = {}
39
39
  self._num_kpts = None
40
40
  self._num_dims = None
41
+ self._supports_links = True
42
+ self._force_shape_for_links = self.upload_as_links
41
43
 
42
44
  def __str__(self) -> str:
43
45
  return AvailableImageConverters.YOLO
@@ -151,6 +153,9 @@ class YOLOConverter(ImageConverter):
151
153
  return False
152
154
 
153
155
  def validate_format(self) -> bool:
156
+ if self.upload_as_links:
157
+ self._download_remote_ann_files()
158
+
154
159
  detected_ann_cnt = 0
155
160
  config_path = None
156
161
  images_list, ann_dict = [], {}
@@ -238,7 +243,8 @@ class YOLOConverter(ImageConverter):
238
243
 
239
244
  try:
240
245
  labels = []
241
- item.set_shape()
246
+ if not self.upload_as_links:
247
+ item.set_shape()
242
248
  height, width = item.shape
243
249
  with open(item.ann_data, "r") as ann_file:
244
250
  lines = ann_file.readlines()
@@ -61,35 +61,27 @@ class NuscenesEpisodesConverter(PointcloudEpisodeConverter):
61
61
  return False
62
62
 
63
63
  def filter_fn(path):
64
- return all(
65
- [
66
- (Path(path) / name).exists()
67
- for name in ["maps", "samples", "sweeps", "v1.0-mini"]
68
- ]
69
- )
64
+ return all([(Path(path) / name).exists() for name in ["maps", "samples"]])
70
65
 
71
- try:
72
- input_path = [d for d in fs.dirs_filter(self._input_data, filter_fn)].pop()
73
- except IndexError:
66
+ input_path = next((d for d in fs.dirs_filter(self._input_data, filter_fn)), None)
67
+ if input_path is None:
74
68
  return False
75
69
 
76
70
  sample_dir = input_path + "/samples/"
77
71
  if any([not fs.dir_exists(f"{sample_dir}/{d}") for d in helpers.DIR_NAMES]):
78
72
  return False
79
73
 
80
- sweeps_dir = input_path + "/sweeps/"
81
- if any([not fs.dir_exists(f"{sweeps_dir}/{d}") for d in helpers.DIR_NAMES]):
82
- return False
83
-
84
- ann_dir = input_path + "/v1.0-mini/"
85
- if any([not fs.file_exists(f"{ann_dir}/{d}.json") for d in helpers.TABLE_NAMES]):
74
+ fil_fn = lambda p: all(fs.file_exists(f"{p}/{name}.json") for name in helpers.TABLE_NAMES)
75
+ ann_dir = next((d for d in fs.dirs_filter(input_path, fil_fn)), None)
76
+ if ann_dir is None:
86
77
  return False
87
78
 
79
+ version = osp.basename(ann_dir)
88
80
  try:
89
81
  t = TinyTimer()
90
- nuscenes = NuScenes(dataroot=input_path, verbose=False)
82
+ nuscenes = NuScenes(version=version, dataroot=input_path, verbose=False)
91
83
  self._nuscenes: NuScenes = nuscenes
92
- logger.info(f"NuScenes initialization took {t.get_sec():.3f} sec")
84
+ logger.debug(f"NuScenes initialization took {t.get_sec():.3f} sec")
93
85
  except Exception as e:
94
86
  logger.debug(f"Failed to initialize NuScenes: {e}")
95
87
  return False
@@ -184,7 +176,9 @@ class NuscenesEpisodesConverter(PointcloudEpisodeConverter):
184
176
  scene_name_to_dataset[scene_names[0]] = dataset_info
185
177
 
186
178
  if log_progress:
187
- progress, progress_cb = self.get_progress(total_sample_cnt, "Converting episode scenes...")
179
+ progress, progress_cb = self.get_progress(
180
+ total_sample_cnt, "Converting episode scenes..."
181
+ )
188
182
  else:
189
183
  progress_cb = None
190
184
 
@@ -16,11 +16,11 @@ DIR_NAMES = [
16
16
  "CAM_FRONT_LEFT",
17
17
  "CAM_FRONT_RIGHT",
18
18
  "LIDAR_TOP",
19
- "RADAR_FRONT",
20
- "RADAR_FRONT_LEFT",
21
- "RADAR_FRONT_RIGHT",
22
- "RADAR_BACK_LEFT",
23
- "RADAR_BACK_RIGHT",
19
+ # "RADAR_FRONT",
20
+ # "RADAR_FRONT_LEFT",
21
+ # "RADAR_FRONT_RIGHT",
22
+ # "RADAR_BACK_LEFT",
23
+ # "RADAR_BACK_RIGHT",
24
24
  ]
25
25
 
26
26
  TABLE_NAMES = [
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.282
3
+ Version: 6.73.283
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -561,18 +561,18 @@ supervisely/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
561
561
  supervisely/collection/key_indexed_collection.py,sha256=x2UVlkprspWhhae9oLUzjTWBoIouiWY9UQSS_MozfH0,37643
562
562
  supervisely/collection/str_enum.py,sha256=Zp29yFGvnxC6oJRYNNlXhO2lTSdsriU1wiGHj6ahEJE,1250
563
563
  supervisely/convert/__init__.py,sha256=pF1bOrg8SzkdFn90AWGRmVa9OQrHABY0gTlgurJ86Tw,962
564
- supervisely/convert/base_converter.py,sha256=NHbOYxfZ8Yfs6qJz8zuR5kzKSlkfQs9-fpuafwdAGnA,18583
564
+ supervisely/convert/base_converter.py,sha256=m4wh1BZIW_wbzZk4eS3PN50TMIsb2ZPud2RjVcPfQxY,18627
565
565
  supervisely/convert/converter.py,sha256=tWxTDfFv7hwzQhUQrBxzfr6WP8FUGFX_ewg5T2HbUYo,8959
566
566
  supervisely/convert/image/__init__.py,sha256=JEuyaBiiyiYmEUYqdn8Mog5FVXpz0H1zFubKkOOm73I,1395
567
- supervisely/convert/image/image_converter.py,sha256=r-qdhuwOsk727mXIM26ucQhkoIKigu1M0BF-tw9IfGg,10321
567
+ supervisely/convert/image/image_converter.py,sha256=8vak8ZoKTN1ye2ZmCTvCZ605-Rw1AFLIEo7bJMfnR68,10426
568
568
  supervisely/convert/image/image_helper.py,sha256=fdV0edQD6hVGQ8TXn2JGDzsnrAXPDMacHBQsApzOME8,3677
569
569
  supervisely/convert/image/cityscapes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
570
- supervisely/convert/image/cityscapes/cityscapes_converter.py,sha256=msmsR2W-Xiod06dwn-MzmkbrEmQQqlKh7zyfTrW6YQw,7854
570
+ supervisely/convert/image/cityscapes/cityscapes_converter.py,sha256=tnelQJHvGz_IGMXWe-EKWAkBhexRzmkv_0Kln5sN12E,8100
571
571
  supervisely/convert/image/cityscapes/cityscapes_helper.py,sha256=in5nR7__q_u5dCkVtZmynfZ_ZuvsIAHrTzyTG4EvNgU,2988
572
572
  supervisely/convert/image/coco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
573
- supervisely/convert/image/coco/coco_anntotation_converter.py,sha256=79rhAy_nkudxEgJDLW0BziUz808-fSqTOnlUeN-kvn8,6603
574
- supervisely/convert/image/coco/coco_converter.py,sha256=7czTd4I1we_HxEc9diQiXPC2pXAtnoqSnFSVCtNOmP4,5431
575
- supervisely/convert/image/coco/coco_helper.py,sha256=dUk5vCsIxeZDbpjs8_oviPGQDW7CosjqbnjwaJQd0mU,32849
573
+ supervisely/convert/image/coco/coco_anntotation_converter.py,sha256=O1PQbwrbnpQBks2pcz2nbAnhSqpKqNk13B2ARk_roFM,7078
574
+ supervisely/convert/image/coco/coco_converter.py,sha256=7dW7vE6yTRz7O31vTVSnEA4MDCc_UXTqc2UFEqaKorI,5650
575
+ supervisely/convert/image/coco/coco_helper.py,sha256=ykZe_M_yfDqJT9FoQXQ3zuLbQMO0l1WP75QMbvKEx5Y,32866
576
576
  supervisely/convert/image/csv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
577
577
  supervisely/convert/image/csv/csv_converter.py,sha256=iLyc2PAVtlsAq7blnGH4iS1_D7Ai6-4UsdI_RlDVB9Q,11677
578
578
  supervisely/convert/image/csv/csv_helper.py,sha256=-nR192IfMU0vTlNRoKXu5FS6tTs9fENqySyeKKyemRs,8409
@@ -592,7 +592,7 @@ supervisely/convert/image/medical2d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
592
592
  supervisely/convert/image/medical2d/medical2d_converter.py,sha256=cYEaRfr8YFxEG_Pv-_SVMxrqZudi3kWbGQ3aArL2mds,8156
593
593
  supervisely/convert/image/medical2d/medical2d_helper.py,sha256=pfLRCSFbFa5EIhmbB7kdmdWRu01OwIEDPXeNHzAeagg,12329
594
594
  supervisely/convert/image/multi_view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
595
- supervisely/convert/image/multi_view/multi_view.py,sha256=TF53gXEpfudMb2MPbzunNqrR44tMTCOBBMBqGGwqQAQ,3794
595
+ supervisely/convert/image/multi_view/multi_view.py,sha256=V-6oFN6oDre7UhejfyDkGKAg4rbM3C9JCQ8pHhuUBb8,4436
596
596
  supervisely/convert/image/multispectral/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
597
597
  supervisely/convert/image/multispectral/multispectral_converter.py,sha256=T3etYVNI0AUUrQsQhxw_r85NthXrqhqmdZQfz8kUY0g,5194
598
598
  supervisely/convert/image/pascal_voc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -606,7 +606,7 @@ supervisely/convert/image/sly/fast_sly_image_converter.py,sha256=pZmQzhx9FrHwgVn
606
606
  supervisely/convert/image/sly/sly_image_converter.py,sha256=097ijLa_62ZBu0elRx0xX_wpi9tmwgNZonVvBccfclg,12842
607
607
  supervisely/convert/image/sly/sly_image_helper.py,sha256=5Ri8fKb5dzh5b3v8AJ5u8xVFOQfAtoWqZ7HktPsCjTI,7373
608
608
  supervisely/convert/image/yolo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
609
- supervisely/convert/image/yolo/yolo_converter.py,sha256=cg5___X5MzvR-rZbNLmaKtr0MdRnyqtEzbBq5UBnYZ0,11171
609
+ supervisely/convert/image/yolo/yolo_converter.py,sha256=Wn5dR05y4SEPONcaxWr9ofnbvbf-SbRZN0fkksk5Dps,11391
610
610
  supervisely/convert/image/yolo/yolo_helper.py,sha256=IwyBMZE_3eblsHhw8egeZUR9h_NciwjrxvVLNuZbxY4,19194
611
611
  supervisely/convert/pointcloud/__init__.py,sha256=WPeIpPoTWDIKAa0lF6t2SMUhFNZ0l-vKujf6yD6w7SA,589
612
612
  supervisely/convert/pointcloud/pointcloud_converter.py,sha256=yCCpzm7GrvL6WT4lNesvtYWWwdO3DO32JIOBBSSQgSA,7130
@@ -637,8 +637,8 @@ supervisely/convert/pointcloud_episodes/bag/bag_converter.py,sha256=jzWKXoFUWu11
637
637
  supervisely/convert/pointcloud_episodes/lyft/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
638
638
  supervisely/convert/pointcloud_episodes/lyft/lyft_converter.py,sha256=QXreWUJ-QhoWgLPqRxCayatYCCCuSV6Z2XCZKScrD3o,10419
639
639
  supervisely/convert/pointcloud_episodes/nuscenes_conv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
640
- supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_converter.py,sha256=hveKmKVe-jOvME1mMbDwynTlL5kKqd53T9BDmFitbkM,12808
641
- supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_helper.py,sha256=RrTlskRrqxwzrjFfT4e5aI9YeAxnun7Io9fjoicZmnY,8959
640
+ supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_converter.py,sha256=4HWouf-H4e5M_Hwd481DpLq17mIZMGkhRVOBgY4alXM,12692
641
+ supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_helper.py,sha256=cJTwhFn1JgblbPjrTrZu30y6FxyjGF-12sMFfvN1xzM,8969
642
642
  supervisely/convert/pointcloud_episodes/sly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
643
643
  supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_converter.py,sha256=fSEGxuTtFTAOLNBAZncOxw9PVALBOtB7yZ8qTCaET7w,6102
644
644
  supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_helper.py,sha256=h4WvNH6cEHtjxxhCnU7Hs2vkyJMye0qwabqXNYVTywE,3570
@@ -1070,9 +1070,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1070
1070
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1071
1071
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1072
1072
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1073
- supervisely-6.73.282.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1074
- supervisely-6.73.282.dist-info/METADATA,sha256=qGp4_zjqrTMz3V40SpkZe9J1yy-1HCAPicbSc5vpeGo,33573
1075
- supervisely-6.73.282.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1076
- supervisely-6.73.282.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1077
- supervisely-6.73.282.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1078
- supervisely-6.73.282.dist-info/RECORD,,
1073
+ supervisely-6.73.283.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1074
+ supervisely-6.73.283.dist-info/METADATA,sha256=gGM5GzwuguFaiu6gAtr9fqRwh9yRE4P49Y65qkNoHEA,33573
1075
+ supervisely-6.73.283.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1076
+ supervisely-6.73.283.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1077
+ supervisely-6.73.283.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1078
+ supervisely-6.73.283.dist-info/RECORD,,