supervisely 6.73.229__py3-none-any.whl → 6.73.231__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.
- supervisely/api/entity_annotation/tag_api.py +1 -1
- supervisely/api/image_api.py +5 -1
- supervisely/api/pointcloud/pointcloud_api.py +2 -2
- supervisely/api/video/video_api.py +31 -16
- supervisely/api/volume/volume_api.py +4 -4
- supervisely/app/fastapi/subapp.py +1 -1
- supervisely/app/v1/__init__.py +1 -1
- supervisely/convert/video/video_converter.py +2 -1
- supervisely/imaging/image.py +14 -0
- supervisely/pointcloud/pointcloud.py +2 -2
- supervisely/pointcloud_episodes/pointcloud_episodes.py +3 -3
- supervisely/project/project.py +14 -2
- {supervisely-6.73.229.dist-info → supervisely-6.73.231.dist-info}/METADATA +1 -1
- {supervisely-6.73.229.dist-info → supervisely-6.73.231.dist-info}/RECORD +18 -18
- {supervisely-6.73.229.dist-info → supervisely-6.73.231.dist-info}/LICENSE +0 -0
- {supervisely-6.73.229.dist-info → supervisely-6.73.231.dist-info}/WHEEL +0 -0
- {supervisely-6.73.229.dist-info → supervisely-6.73.231.dist-info}/entry_points.txt +0 -0
- {supervisely-6.73.229.dist-info → supervisely-6.73.231.dist-info}/top_level.txt +0 -0
|
@@ -74,7 +74,7 @@ class TagApi(ModuleApi):
|
|
|
74
74
|
|
|
75
75
|
:param project_id: :class:`Dataset<supervisely.project.project.Project>` ID in Supervisely.
|
|
76
76
|
:type project_id: int
|
|
77
|
-
:param filters: List of parameters to sort output tags. See: https://
|
|
77
|
+
:param filters: List of parameters to sort output tags. See: https://api.docs.supervisely.com/#tag/Advanced/paths/~1tags.list/get
|
|
78
78
|
:type filters: List[Dict[str, str]], optional
|
|
79
79
|
:return: List of the tags from the project with given id.
|
|
80
80
|
:rtype: list
|
supervisely/api/image_api.py
CHANGED
|
@@ -325,6 +325,7 @@ class ImageApi(RemoveableBulkModuleApi):
|
|
|
325
325
|
return_first_response: Optional[bool] = False,
|
|
326
326
|
project_id: Optional[int] = None,
|
|
327
327
|
only_labelled: Optional[bool] = False,
|
|
328
|
+
fields: Optional[List[str]] = None,
|
|
328
329
|
) -> List[ImageInfo]:
|
|
329
330
|
"""
|
|
330
331
|
List of Images in the given :class:`Dataset<supervisely.project.project.Dataset>`.
|
|
@@ -347,6 +348,8 @@ class ImageApi(RemoveableBulkModuleApi):
|
|
|
347
348
|
:type project_id: :class:`int`
|
|
348
349
|
:param only_labelled: If True, returns only images with labels.
|
|
349
350
|
:type only_labelled: bool, optional
|
|
351
|
+
:param fields: List of fields to return. If None, returns all fields.
|
|
352
|
+
:type fields: List[str], optional
|
|
350
353
|
:return: Objects with image information from Supervisely.
|
|
351
354
|
:rtype: :class:`List[ImageInfo]<ImageInfo>`
|
|
352
355
|
:Usage example:
|
|
@@ -419,7 +422,8 @@ class ImageApi(RemoveableBulkModuleApi):
|
|
|
419
422
|
},
|
|
420
423
|
}
|
|
421
424
|
]
|
|
422
|
-
|
|
425
|
+
if fields is not None:
|
|
426
|
+
data[ApiField.FIELDS] = fields
|
|
423
427
|
return self.get_list_all_pages(
|
|
424
428
|
"images.list",
|
|
425
429
|
data=data,
|
|
@@ -232,7 +232,7 @@ class PointcloudApi(RemoveableBulkModuleApi):
|
|
|
232
232
|
|
|
233
233
|
:param dataset_id: :class:`Dataset<supervisely.project.project.Dataset>` ID in Supervisely.
|
|
234
234
|
:type dataset_id: int
|
|
235
|
-
:param filters: List of parameters to sort output Pointclouds. See: https://
|
|
235
|
+
:param filters: List of parameters to sort output Pointclouds. See: https://api.docs.supervisely.com/#tag/Point-Clouds/paths/~1point-clouds.list/get
|
|
236
236
|
:type filters: List[Dict[str, str]], optional
|
|
237
237
|
:return: List of the point clouds objects from the dataset with given id.
|
|
238
238
|
:rtype: :class:`List[PointcloudInfo]`
|
|
@@ -407,7 +407,7 @@ class PointcloudApi(RemoveableBulkModuleApi):
|
|
|
407
407
|
# 'hash': 'vxA+emfDNUkFP9P6oitMB5Q0rMlnskmV2jvcf47OjGU=',
|
|
408
408
|
# 'link': None,
|
|
409
409
|
# 'preview': '/previews/q/ext:jpeg/resize:fill:50:0:0/q:50/plain/h5ad-public/images/original/S/j/hJ/PwMg.png',
|
|
410
|
-
# 'fullStorageUrl': 'https://
|
|
410
|
+
# 'fullStorageUrl': 'https://app.supervisely.com/hs4-public/images/original/S/j/hJ/PwMg.png',
|
|
411
411
|
# 'name': 'img00'
|
|
412
412
|
# }
|
|
413
413
|
"""
|
|
@@ -339,16 +339,22 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
339
339
|
dataset_id: int,
|
|
340
340
|
filters: Optional[List[Dict[str, str]]] = None,
|
|
341
341
|
raw_video_meta: Optional[bool] = False,
|
|
342
|
+
fields: Optional[List[str]] = None,
|
|
343
|
+
force_metadata_for_links: Optional[bool] = False,
|
|
342
344
|
) -> List[VideoInfo]:
|
|
343
345
|
"""
|
|
344
346
|
Get list of information about all videos for a given dataset ID.
|
|
345
347
|
|
|
346
348
|
:param dataset_id: :class:`Dataset<supervisely.project.project.Dataset>` ID in Supervisely.
|
|
347
349
|
:type dataset_id: int
|
|
348
|
-
:param filters: List of parameters to sort output Videos. See: https://
|
|
350
|
+
:param filters: List of parameters to sort output Videos. See: https://api.docs.supervisely.com/#tag/Videos/paths/~1videos.list/get
|
|
349
351
|
:type filters: List[Dict[str, str]], optional
|
|
350
352
|
:param raw_video_meta: Get normalized metadata from server if False.
|
|
351
353
|
:type raw_video_meta: bool
|
|
354
|
+
:param fields: List of fields to return.
|
|
355
|
+
:type fields: List[str], optional
|
|
356
|
+
:param force_metadata_for_links: Specify whether to force retrieving video metadata from the server.
|
|
357
|
+
:type force_metadata_for_links: Optional[bool]
|
|
352
358
|
:return: List of information about videos in given dataset.
|
|
353
359
|
:rtype: :class:`List[VideoInfo]`
|
|
354
360
|
|
|
@@ -372,15 +378,15 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
372
378
|
print(filtered_video_infos)
|
|
373
379
|
# Output: [VideoInfo(id=19371139, ...)]
|
|
374
380
|
"""
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
)
|
|
381
|
+
data = {
|
|
382
|
+
ApiField.DATASET_ID: dataset_id,
|
|
383
|
+
ApiField.FILTER: filters or [],
|
|
384
|
+
ApiField.RAW_VIDEO_META: raw_video_meta,
|
|
385
|
+
ApiField.FORCE_METADATA_FOR_LINKS: force_metadata_for_links,
|
|
386
|
+
}
|
|
387
|
+
if fields is not None:
|
|
388
|
+
data[ApiField.FIELDS] = fields
|
|
389
|
+
return self.get_list_all_pages("videos.list", data)
|
|
384
390
|
|
|
385
391
|
def get_list_generator(
|
|
386
392
|
self,
|
|
@@ -391,6 +397,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
391
397
|
limit: Optional[int] = None,
|
|
392
398
|
raw_video_meta: Optional[bool] = False,
|
|
393
399
|
batch_size: Optional[int] = None,
|
|
400
|
+
force_metadata_for_links: Optional[bool] = False,
|
|
394
401
|
) -> Iterator[List[VideoInfo]]:
|
|
395
402
|
data = {
|
|
396
403
|
ApiField.DATASET_ID: dataset_id,
|
|
@@ -399,6 +406,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
399
406
|
ApiField.SORT_ORDER: sort_order,
|
|
400
407
|
ApiField.RAW_VIDEO_META: raw_video_meta,
|
|
401
408
|
ApiField.PAGINATION_MODE: ApiField.TOKEN,
|
|
409
|
+
ApiField.FORCE_METADATA_FOR_LINKS: force_metadata_for_links,
|
|
402
410
|
}
|
|
403
411
|
if batch_size is not None:
|
|
404
412
|
data[ApiField.PER_PAGE] = batch_size
|
|
@@ -426,7 +434,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
426
434
|
:type id: int
|
|
427
435
|
:param raise_error: Return an error if the video info was not received.
|
|
428
436
|
:type raise_error: bool
|
|
429
|
-
:param force_metadata_for_links:
|
|
437
|
+
:param force_metadata_for_links: Specify whether to force retrieving video metadata from the server.
|
|
430
438
|
:type force_metadata_for_links: bool
|
|
431
439
|
:return: Information about Video. See :class:`info_sequence<info_sequence>`
|
|
432
440
|
:rtype: :class:`VideoInfo`
|
|
@@ -506,7 +514,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
506
514
|
:type ids: List[int]
|
|
507
515
|
:param progress_cb: Function for tracking download progress.
|
|
508
516
|
:type progress_cb: Optional[Union[tqdm, Callable]]
|
|
509
|
-
:param force_metadata_for_links:
|
|
517
|
+
:param force_metadata_for_links: Specify whether to force retrieving video metadata from the server.
|
|
510
518
|
:type force_metadata_for_links: bool
|
|
511
519
|
:return: List of information about Videos. See :class:`info_sequence<info_sequence>`.
|
|
512
520
|
:rtype: List[VideoInfo]
|
|
@@ -580,6 +588,8 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
580
588
|
:type id: int
|
|
581
589
|
:param raise_error: Return an error if the video info was not received.
|
|
582
590
|
:type raise_error: bool
|
|
591
|
+
:param force_metadata_for_links: Specify whether to force retrieving video metadata from the server.
|
|
592
|
+
:type force_metadata_for_links: bool
|
|
583
593
|
:return: Information about Video. See :class:`info_sequence<info_sequence>`
|
|
584
594
|
:rtype: dict
|
|
585
595
|
|
|
@@ -967,6 +977,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
967
977
|
links_names,
|
|
968
978
|
metas=links_metas,
|
|
969
979
|
skip_download=True,
|
|
980
|
+
force_metadata_for_links=False,
|
|
970
981
|
)
|
|
971
982
|
|
|
972
983
|
for info, pos in zip(res_infos_links, links_order):
|
|
@@ -1042,7 +1053,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
1042
1053
|
if len(set(vid_info.dataset_id for vid_info in ids_info)) > 1:
|
|
1043
1054
|
raise ValueError("Videos ids have to be from the same dataset")
|
|
1044
1055
|
|
|
1045
|
-
existing_videos = self.get_list(dst_dataset_id)
|
|
1056
|
+
existing_videos = self.get_list(dst_dataset_id, force_metadata_for_links=False)
|
|
1046
1057
|
existing_names = {video.name for video in existing_videos}
|
|
1047
1058
|
|
|
1048
1059
|
if change_name_if_conflict:
|
|
@@ -1846,7 +1857,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
1846
1857
|
:type skip_download: Optional[bool]
|
|
1847
1858
|
:param progress_cb: Function for tracking the progress of copying.
|
|
1848
1859
|
:type progress_cb: tqdm or callable, optional
|
|
1849
|
-
:param force_metadata_for_links: Specify
|
|
1860
|
+
:param force_metadata_for_links: Specify whether to force retrieving videos metadata from the server after upload
|
|
1850
1861
|
:type force_metadata_for_links: Optional[bool]
|
|
1851
1862
|
:return: List with information about Videos. See :class:`info_sequence<info_sequence>`
|
|
1852
1863
|
:rtype: :class:`List[VideoInfo]`
|
|
@@ -1939,6 +1950,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
1939
1950
|
hash: Optional[str] = None,
|
|
1940
1951
|
meta: Optional[List[Dict]] = None,
|
|
1941
1952
|
skip_download: Optional[bool] = False,
|
|
1953
|
+
force_metadata_for_links: Optional[bool] = True,
|
|
1942
1954
|
):
|
|
1943
1955
|
"""
|
|
1944
1956
|
Upload Video from given link to Dataset.
|
|
@@ -1957,6 +1969,8 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
1957
1969
|
:type meta: List[Dict], optional
|
|
1958
1970
|
:param skip_download: Skip download video to local storage.
|
|
1959
1971
|
:type skip_download: Optional[bool]
|
|
1972
|
+
:param force_metadata_for_links: Specify whether to force retrieving video metadata from the server after upload
|
|
1973
|
+
:type force_metadata_for_links: Optional[bool]
|
|
1960
1974
|
:return: List with information about Video. See :class:`info_sequence<info_sequence>`
|
|
1961
1975
|
:rtype: :class:`List[VideoInfo]`
|
|
1962
1976
|
|
|
@@ -2041,6 +2055,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
2041
2055
|
hashes=[h],
|
|
2042
2056
|
metas=[meta],
|
|
2043
2057
|
skip_download=skip_download,
|
|
2058
|
+
force_metadata_for_links=force_metadata_for_links
|
|
2044
2059
|
)
|
|
2045
2060
|
if len(links) != 1:
|
|
2046
2061
|
raise RuntimeError(
|
|
@@ -2216,7 +2231,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
2216
2231
|
:rtype: List[str]
|
|
2217
2232
|
"""
|
|
2218
2233
|
|
|
2219
|
-
videos_in_dataset = self.get_list(dataset_id)
|
|
2234
|
+
videos_in_dataset = self.get_list(dataset_id, force_metadata_for_links=False)
|
|
2220
2235
|
used_names = {video_info.name for video_info in videos_in_dataset}
|
|
2221
2236
|
new_names = [
|
|
2222
2237
|
generate_free_name(used_names, name, with_ext=True, extend_used_names=True)
|
|
@@ -2242,7 +2257,7 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
2242
2257
|
:return: None
|
|
2243
2258
|
:rtype: None
|
|
2244
2259
|
"""
|
|
2245
|
-
videos_in_dataset = self.get_list(dataset_id)
|
|
2260
|
+
videos_in_dataset = self.get_list(dataset_id, force_metadata_for_links=False)
|
|
2246
2261
|
used_names = {video_info.name for video_info in videos_in_dataset}
|
|
2247
2262
|
name_intersections = used_names.intersection(set(names))
|
|
2248
2263
|
if message is None:
|
|
@@ -65,7 +65,7 @@ class VolumeInfo(NamedTuple):
|
|
|
65
65
|
'rescaleIntercept': 0
|
|
66
66
|
},
|
|
67
67
|
path_original='/h5af-public/images/original/M/e/7R/vsytec8zX0p.nrrd',
|
|
68
|
-
full_storage_url='https://
|
|
68
|
+
full_storage_url='https://app.supervisely.com/h5un-public/images/original/M/e/7R/zX0p.nrrd',
|
|
69
69
|
tags=[],
|
|
70
70
|
team_id=435,
|
|
71
71
|
workspace_id=685,
|
|
@@ -260,7 +260,7 @@ class VolumeApi(RemoveableBulkModuleApi):
|
|
|
260
260
|
|
|
261
261
|
:param dataset_id: :class:`Dataset<supervisely.project.project.Dataset>` ID in Supervisely.
|
|
262
262
|
:type dataset_id: int
|
|
263
|
-
:param filters: List of parameters to sort output Volumes. See: https://
|
|
263
|
+
:param filters: List of parameters to sort output Volumes. See: https://api.docs.supervisely.com/#tag/Volumes/paths/~1volumes.list/get
|
|
264
264
|
:type filters: List[Dict[str, str]], optional
|
|
265
265
|
:param sort: Attribute to sort the list by. The default is "id". Valid values are "id", "name", "description", "createdAt", "updatedAt".
|
|
266
266
|
:type sort: :class:`str`
|
|
@@ -349,7 +349,7 @@ class VolumeApi(RemoveableBulkModuleApi):
|
|
|
349
349
|
# 'rescaleIntercept': 0
|
|
350
350
|
# },
|
|
351
351
|
# path_original='/h5af-public/images/original/M/e/7R/vs0p.nrrd',
|
|
352
|
-
# full_storage_url='https://
|
|
352
|
+
# full_storage_url='https://app.supervisely.com/.../original/M/e/7R/zX0p.nrrd',
|
|
353
353
|
# tags=[],
|
|
354
354
|
# team_id=435,
|
|
355
355
|
# workspace_id=685,
|
|
@@ -435,7 +435,7 @@ class VolumeApi(RemoveableBulkModuleApi):
|
|
|
435
435
|
# 'rescaleIntercept': 0
|
|
436
436
|
# },
|
|
437
437
|
# path_original='/h5af-public/images/original/M/e/7R/zfsfX0p.nrrd',
|
|
438
|
-
# full_storage_url='https://
|
|
438
|
+
# full_storage_url='https://app.supervisely.com/h5un-public/images/original/M/e/7R/zXdd0p.nrrd',
|
|
439
439
|
# tags=[],
|
|
440
440
|
# team_id=435,
|
|
441
441
|
# workspace_id=685,
|
|
@@ -762,7 +762,7 @@ def _init(
|
|
|
762
762
|
await StateJson.from_request(request)
|
|
763
763
|
|
|
764
764
|
if not ("application/json" not in request.headers.get("Content-Type", "")):
|
|
765
|
-
# {'command': 'inference_batch_ids', 'context': {}, 'state': {'dataset_id': 49711, 'batch_ids': [3120204], 'settings': None}, 'user_api_key': 'XXX', 'api_token': 'XXX', 'instance_type': None, 'server_address': 'https://
|
|
765
|
+
# {'command': 'inference_batch_ids', 'context': {}, 'state': {'dataset_id': 49711, 'batch_ids': [3120204], 'settings': None}, 'user_api_key': 'XXX', 'api_token': 'XXX', 'instance_type': None, 'server_address': 'https://app.supervisely.com'}
|
|
766
766
|
content = await request.json()
|
|
767
767
|
|
|
768
768
|
request.state.context = content.get("context")
|
supervisely/app/v1/__init__.py
CHANGED
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
# }
|
|
15
15
|
|
|
16
16
|
# context_root: Download as, Run App (default), Report
|
|
17
|
-
# [](https://supervisely.com)
|
|
@@ -123,7 +123,8 @@ class VideoConverter(BaseConverter):
|
|
|
123
123
|
|
|
124
124
|
meta, renamed_classes, renamed_tags = self.merge_metas_with_conflicts(api, dataset_id)
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
videos_in_dataset = api.video.get_list(dataset_id, force_metadata_for_links=False)
|
|
127
|
+
existing_names = {video_info.name for video_info in videos_in_dataset}
|
|
127
128
|
|
|
128
129
|
# check video codecs, mimetypes and convert if needed
|
|
129
130
|
convert_progress, convert_progress_cb = self.get_progress(
|
supervisely/imaging/image.py
CHANGED
|
@@ -1386,3 +1386,17 @@ def get_labeling_tool_link(url: str, name: Optional[str] = "open in labeling too
|
|
|
1386
1386
|
:rtype: str
|
|
1387
1387
|
"""
|
|
1388
1388
|
return f'<a href="{url}" rel="noopener noreferrer" target="_blank">{name}<i class="zmdi zmdi-open-in-new" style="margin-left: 5px"></i></a>'
|
|
1389
|
+
|
|
1390
|
+
|
|
1391
|
+
def get_size_from_bytes(data: bytes) -> Tuple[int, int]:
|
|
1392
|
+
"""
|
|
1393
|
+
Get size of image from bytes.
|
|
1394
|
+
|
|
1395
|
+
:param data: Bytes of image.
|
|
1396
|
+
:type data: bytes
|
|
1397
|
+
:return: Height and width of image
|
|
1398
|
+
:rtype: :class:`Tuple[int, int]`
|
|
1399
|
+
"""
|
|
1400
|
+
image = PILImage.open(io.BytesIO(data))
|
|
1401
|
+
width, height = image.size
|
|
1402
|
+
return width, height
|
|
@@ -233,7 +233,7 @@ def get_labeling_tool_url(dataset_id: int, pointcloud_id: int):
|
|
|
233
233
|
|
|
234
234
|
print(url)
|
|
235
235
|
# Output:
|
|
236
|
-
# https://
|
|
236
|
+
# https://app.supervisely.com/app/point-clouds/?datasetId=55875&pointCloudId=19373403
|
|
237
237
|
"""
|
|
238
238
|
|
|
239
239
|
res = f"/app/point-clouds/?datasetId={dataset_id}&pointCloudId={pointcloud_id}"
|
|
@@ -280,7 +280,7 @@ def get_labeling_tool_link(url, name="open in labeling tool"):
|
|
|
280
280
|
print(link)
|
|
281
281
|
# Output:
|
|
282
282
|
# <a
|
|
283
|
-
# href="https://
|
|
283
|
+
# href="https://app.supervisely.com/app/point-clouds/?datasetId=55875&pointCloudId=19373403"
|
|
284
284
|
# rel="noopener noreferrer"
|
|
285
285
|
# target="_blank"
|
|
286
286
|
# >
|
|
@@ -37,7 +37,7 @@ def get_labeling_tool_url(dataset_id, pointcloud_id):
|
|
|
37
37
|
|
|
38
38
|
print(url)
|
|
39
39
|
# Output:
|
|
40
|
-
# https://
|
|
40
|
+
# https://app.supervisely.com/app/point-clouds-tracking/?datasetId=55875&pointCloudId=19373403
|
|
41
41
|
"""
|
|
42
42
|
|
|
43
43
|
res = f"/app/point-clouds-tracking/?datasetId={dataset_id}&pointCloudId={pointcloud_id}"
|
|
@@ -72,7 +72,7 @@ def get_labeling_tool_link(url, name="open in labeling tool"):
|
|
|
72
72
|
api = sly.Api.from_env()
|
|
73
73
|
|
|
74
74
|
# Pass values into the API constructor (optional, not recommended)
|
|
75
|
-
# api = sly.Api(server_address="https://app.
|
|
75
|
+
# api = sly.Api(server_address="https://app.supervisely.com", token="4r47N...xaTatb")
|
|
76
76
|
|
|
77
77
|
pointcloud_id = 19373403
|
|
78
78
|
pcd_info = api.pointcloud.get_info_by_id(pointcloud_id)
|
|
@@ -84,7 +84,7 @@ def get_labeling_tool_link(url, name="open in labeling tool"):
|
|
|
84
84
|
print(link)
|
|
85
85
|
# Output:
|
|
86
86
|
# <a
|
|
87
|
-
# href="https://
|
|
87
|
+
# href="https://app.supervisely.com/app/point-clouds/?datasetId=55875&pointCloudId=19373403"
|
|
88
88
|
# rel="noopener noreferrer"
|
|
89
89
|
# target="_blank"
|
|
90
90
|
# >
|
supervisely/project/project.py
CHANGED
|
@@ -4418,7 +4418,12 @@ async def _download_project_async(
|
|
|
4418
4418
|
else:
|
|
4419
4419
|
dataset_fs = project_fs.create_dataset(dataset.name, dataset_path)
|
|
4420
4420
|
|
|
4421
|
-
|
|
4421
|
+
force_metadata_for_links = False
|
|
4422
|
+
if save_images is False and only_image_tags is True:
|
|
4423
|
+
force_metadata_for_links = True
|
|
4424
|
+
all_images = api.image.get_list(
|
|
4425
|
+
dataset_id, force_metadata_for_links=force_metadata_for_links
|
|
4426
|
+
)
|
|
4422
4427
|
images = [image for image in all_images if images_ids is None or image.id in images_ids]
|
|
4423
4428
|
|
|
4424
4429
|
ds_progress = progress_cb
|
|
@@ -4499,6 +4504,9 @@ async def _download_project_item_async(
|
|
|
4499
4504
|
img_bytes = await api.image.download_bytes_single_async(
|
|
4500
4505
|
img_info.id, semaphore=semaphore, check_hash=True
|
|
4501
4506
|
)
|
|
4507
|
+
if None in [img_info.height, img_info.width]:
|
|
4508
|
+
width, height = sly.image.get_size_from_bytes(img_bytes)
|
|
4509
|
+
img_info = img_info._replace(height=height, width=width)
|
|
4502
4510
|
else:
|
|
4503
4511
|
img_bytes = None
|
|
4504
4512
|
|
|
@@ -4506,9 +4514,13 @@ async def _download_project_item_async(
|
|
|
4506
4514
|
ann_info = await api.annotation.download_async(
|
|
4507
4515
|
img_info.id,
|
|
4508
4516
|
semaphore=semaphore,
|
|
4509
|
-
force_metadata_for_links=
|
|
4517
|
+
force_metadata_for_links=not save_images,
|
|
4510
4518
|
)
|
|
4511
4519
|
ann_json = ann_info.annotation
|
|
4520
|
+
tmp_ann = Annotation.from_json(ann_json, meta)
|
|
4521
|
+
if None in tmp_ann.img_size:
|
|
4522
|
+
tmp_ann = tmp_ann.clone(img_size=(img_info.height, img_info.width))
|
|
4523
|
+
ann_json = tmp_ann.to_json()
|
|
4512
4524
|
else:
|
|
4513
4525
|
tags = TagCollection.from_api_response(
|
|
4514
4526
|
img_info.tags,
|
|
@@ -28,7 +28,7 @@ supervisely/api/dataset_api.py,sha256=2-SQBlgEnIN-0uvDbtPlSXr6ztBeZ3WPryhkOtpBmk
|
|
|
28
28
|
supervisely/api/file_api.py,sha256=WMg80fxqMKOo3ai-IGON2w-IDAySPk90USoVk29JOdE,82415
|
|
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=
|
|
31
|
+
supervisely/api/image_api.py,sha256=X26mRA40-DLU-AGD3iTe5x9VtNgQRbTvFDXrkfwDwe8,162626
|
|
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
|
|
@@ -51,10 +51,10 @@ supervisely/api/entity_annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
|
51
51
|
supervisely/api/entity_annotation/entity_annotation_api.py,sha256=K79KdDyepQv4FiNQHBj9V4-zLIemxK9WG1ig1bfBKb8,3083
|
|
52
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
|
-
supervisely/api/entity_annotation/tag_api.py,sha256=
|
|
54
|
+
supervisely/api/entity_annotation/tag_api.py,sha256=3PQEpLZaIL_3Ds2QWfyjHZctXA1KqvVVRYbVLw7npHU,10881
|
|
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=
|
|
57
|
+
supervisely/api/pointcloud/pointcloud_api.py,sha256=pn72znCr5hkAfgniXxfD6Vi8-HqRb1Nrf6l23-HQ7Bc,53277
|
|
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
|
|
@@ -64,14 +64,14 @@ supervisely/api/pointcloud/pointcloud_object_api.py,sha256=bO1USWb9HAywG_CW4CDu1
|
|
|
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
66
|
supervisely/api/video/video_annotation_api.py,sha256=Um_7UOJtP_E25X6v41mrZfDbJaJuLMGoZm2IULwyg3w,10977
|
|
67
|
-
supervisely/api/video/video_api.py,sha256=
|
|
67
|
+
supervisely/api/video/video_api.py,sha256=2yFm1pbL-ziHl8vDyrf8z1qLbZxlo_22FyqjKPQbNg4,94228
|
|
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
|
|
74
|
+
supervisely/api/volume/volume_api.py,sha256=-n3r5qj4I4EtoERKTHFT8PpsKFJ141SvQfamIcHqWK4,55387
|
|
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
|
|
@@ -93,11 +93,11 @@ supervisely/app/fastapi/index.html,sha256=4kF8PWYvssCX2iH0jOOq0dCcKxQfndpJbTzUF4
|
|
|
93
93
|
supervisely/app/fastapi/no_html_main.html,sha256=NhQP7noyORBx72lFh1CQKgBRupkWjiq6Gaw-9Hkvg7c,37
|
|
94
94
|
supervisely/app/fastapi/offline.py,sha256=CwMMkJ1frD6wiZS-SEoNDtQ1UJcJe1Ob6ohE3r4CQL8,7414
|
|
95
95
|
supervisely/app/fastapi/request.py,sha256=NU7rKmxJ1pfkDZ7_yHckRcRAueJRQIqCor11UO2OHr8,766
|
|
96
|
-
supervisely/app/fastapi/subapp.py,sha256=
|
|
96
|
+
supervisely/app/fastapi/subapp.py,sha256=PaVYX1VpmXsXMEgdCOhFXj4s8CwyeU25c4GXcZuMzL8,43414
|
|
97
97
|
supervisely/app/fastapi/templating.py,sha256=3JO4WmQKfPMmb8xhSuV5knWCen3gTgfdqWpIx4RSJlg,2330
|
|
98
98
|
supervisely/app/fastapi/utils.py,sha256=GZuTWLcVRGVx8TL3jVEYUOZIT2FawbwIe2kAOBLw9ho,398
|
|
99
99
|
supervisely/app/fastapi/websocket.py,sha256=TlRSPOAhRItTv1HGvdukK1ZvhRjMUxRa-lJlsRR9rJw,1308
|
|
100
|
-
supervisely/app/v1/__init__.py,sha256=
|
|
100
|
+
supervisely/app/v1/__init__.py,sha256=OdU0PYv6hLwahYoyaLFO8m3cbJSchvPbqxuG1N3T734,848
|
|
101
101
|
supervisely/app/v1/app_config.md,sha256=-8GKbiQoX25RhEj3EDJ7TxiYuFw5wL2TO3qV5AJLZTs,2536
|
|
102
102
|
supervisely/app/v1/app_service.py,sha256=KGWns_M3OkQLdtsGpH3rBlA2hmSeqGkA-M5q5sTqxe4,23090
|
|
103
103
|
supervisely/app/v1/constants.py,sha256=_BG2dsOSz-gAVKN9CN8--a4Tn1-osu1z9Cwy8ywIzH0,183
|
|
@@ -623,7 +623,7 @@ supervisely/convert/pointcloud_episodes/sly/__init__.py,sha256=47DEQpj8HBSa-_TIm
|
|
|
623
623
|
supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_converter.py,sha256=7ONcZMOUJCNpmc0tmMX6FnNG0lu8Nj9K2SSTQHaSXFM,6188
|
|
624
624
|
supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_helper.py,sha256=h4WvNH6cEHtjxxhCnU7Hs2vkyJMye0qwabqXNYVTywE,3570
|
|
625
625
|
supervisely/convert/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
626
|
-
supervisely/convert/video/video_converter.py,sha256=
|
|
626
|
+
supervisely/convert/video/video_converter.py,sha256=f-b6FexBjXw9xWv5w8lxlNxCh4FvacNolX-WQDibWFs,11338
|
|
627
627
|
supervisely/convert/video/davis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
628
628
|
supervisely/convert/video/davis/davis_converter.py,sha256=zaPsJdN6AvyPT7fVnswuPbgrz5T-X2RFbHEdkuMhWGk,415
|
|
629
629
|
supervisely/convert/video/mot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -679,7 +679,7 @@ supervisely/imaging/_video.py,sha256=JgpHGbDTAqm_y67SDULk8tA7dN4Wq1j5gq7Koi7hw5Q
|
|
|
679
679
|
supervisely/imaging/color.py,sha256=4SW3oIb5gnAQUEdJ-AgefatfXlYKHBG9Vy5hxA9eBEI,6991
|
|
680
680
|
supervisely/imaging/colors.json.gz,sha256=KORWj3sbMFVHv11E4n94cVmbFdEnFO0EzX8k-ENrZLk,555428
|
|
681
681
|
supervisely/imaging/font.py,sha256=0XcmWhlw7y2PAhrWgcsfInyRWj0WnlFpMSEXXilR8UA,2697
|
|
682
|
-
supervisely/imaging/image.py,sha256=
|
|
682
|
+
supervisely/imaging/image.py,sha256=1KNc4qRbP9OlI4Yta07Kc2ohAgSBJ_9alF9Jag74w30,41873
|
|
683
683
|
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=rKLLw1XQqM3s3X3k3ke9Skyy5hPK0LE_xVUBq3Qko0Q,17284
|
|
@@ -912,7 +912,7 @@ supervisely/nn/tracker/utils/gmc.py,sha256=3JX8979H3NA-YHNaRQyj9Z-xb9qtyMittPEjG
|
|
|
912
912
|
supervisely/nn/tracker/utils/kalman_filter.py,sha256=XquwLRFVfZdJMHPqPUtq-kdtuKLY6zgGHbnPGTXL8qU,17044
|
|
913
913
|
supervisely/output/__init__.py,sha256=OY-ZkdTkpg3qMkZa763Uk7UrRF1Q-p55qIBPo-tNPho,4585
|
|
914
914
|
supervisely/pointcloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
915
|
-
supervisely/pointcloud/pointcloud.py,sha256=
|
|
915
|
+
supervisely/pointcloud/pointcloud.py,sha256=wWWnueObO7li5PckhRim7WxHytsm2zn1caK3zghQcfg,11036
|
|
916
916
|
supervisely/pointcloud_annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
917
917
|
supervisely/pointcloud_annotation/constants.py,sha256=5I_3V4WwAOdxPM9QOyVHv_o561-gjV5d_s5IM1RxWrM,360
|
|
918
918
|
supervisely/pointcloud_annotation/pointcloud_annotation.py,sha256=XitdjdjOYujSZy0pHB14djViZcloyN6I0A2ZQ0M_bTw,15881
|
|
@@ -929,13 +929,13 @@ supervisely/pointcloud_annotation/pointcloud_object_collection.py,sha256=2Q41LTe
|
|
|
929
929
|
supervisely/pointcloud_annotation/pointcloud_tag.py,sha256=2HFHZh953pbG5bIHTlT_qMokZn2Ao7xWYZUFt55BMps,14172
|
|
930
930
|
supervisely/pointcloud_annotation/pointcloud_tag_collection.py,sha256=j_TAN23GkTcSNk5Yfwe2mrnigLlarMtJ3b4Jhu4GaEo,10825
|
|
931
931
|
supervisely/pointcloud_episodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
932
|
-
supervisely/pointcloud_episodes/pointcloud_episodes.py,sha256=
|
|
932
|
+
supervisely/pointcloud_episodes/pointcloud_episodes.py,sha256=cRXdtw7bMsbsdVQjxfWxFSESrO-LGiqqsZyyExl2Mbg,3430
|
|
933
933
|
supervisely/project/__init__.py,sha256=hlzdj9Pgy53Q3qdP8LMtGTChvZHQuuShdtui2eRUQeE,2601
|
|
934
934
|
supervisely/project/data_version.py,sha256=nknaWJSUCwoDyNG9_d1KA-GjzidhV9zd9Cn8cg15DOU,19270
|
|
935
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=
|
|
938
|
+
supervisely/project/project.py,sha256=T2ge_9HXlaDyDziEhr-5lcyUcHskaUIbgwtrWs7PqYo,180929
|
|
939
939
|
supervisely/project/project_meta.py,sha256=26s8IiHC5Pg8B1AQi6_CrsWteioJP2in00cRNe8QlW0,51423
|
|
940
940
|
supervisely/project/project_settings.py,sha256=NLThzU_DCynOK6hkHhVdFyezwprn9UqlnrLDe_3qhkY,9347
|
|
941
941
|
supervisely/project/project_type.py,sha256=_3RqW2CnDBKFOvSIrQT1RJQaiHirs34_jiQS8CkwCpo,530
|
|
@@ -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.
|
|
1001
|
-
supervisely-6.73.
|
|
1002
|
-
supervisely-6.73.
|
|
1003
|
-
supervisely-6.73.
|
|
1004
|
-
supervisely-6.73.
|
|
1005
|
-
supervisely-6.73.
|
|
1000
|
+
supervisely-6.73.231.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
1001
|
+
supervisely-6.73.231.dist-info/METADATA,sha256=6Nn3J-8unL0hd-sYLQcavVvRFWolrgNpy30IxKd6-So,33150
|
|
1002
|
+
supervisely-6.73.231.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
1003
|
+
supervisely-6.73.231.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
|
|
1004
|
+
supervisely-6.73.231.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
|
|
1005
|
+
supervisely-6.73.231.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|