supervisely 6.73.436__py3-none-any.whl → 6.73.438__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.
- supervisely/api/pointcloud/pointcloud_api.py +38 -0
- supervisely/api/video/video_api.py +38 -0
- supervisely/api/volume/volume_api.py +38 -0
- supervisely/nn/inference/predict_app/gui/gui.py +37 -20
- supervisely/nn/inference/predict_app/predict_app.py +10 -18
- {supervisely-6.73.436.dist-info → supervisely-6.73.438.dist-info}/METADATA +1 -1
- {supervisely-6.73.436.dist-info → supervisely-6.73.438.dist-info}/RECORD +11 -11
- {supervisely-6.73.436.dist-info → supervisely-6.73.438.dist-info}/LICENSE +0 -0
- {supervisely-6.73.436.dist-info → supervisely-6.73.438.dist-info}/WHEEL +0 -0
- {supervisely-6.73.436.dist-info → supervisely-6.73.438.dist-info}/entry_points.txt +0 -0
- {supervisely-6.73.436.dist-info → supervisely-6.73.438.dist-info}/top_level.txt +0 -0
|
@@ -1431,3 +1431,41 @@ class PointcloudApi(RemoveableBulkModuleApi):
|
|
|
1431
1431
|
)
|
|
1432
1432
|
tasks.append(task)
|
|
1433
1433
|
await asyncio.gather(*tasks)
|
|
1434
|
+
|
|
1435
|
+
def rename(
|
|
1436
|
+
self,
|
|
1437
|
+
id: int,
|
|
1438
|
+
name: str,
|
|
1439
|
+
) -> PointcloudInfo:
|
|
1440
|
+
"""Renames Pointcloud with given ID to a new name.
|
|
1441
|
+
|
|
1442
|
+
:param id: Pointcloud ID in Supervisely.
|
|
1443
|
+
:type id: int
|
|
1444
|
+
:param name: New Pointcloud name.
|
|
1445
|
+
:type name: str
|
|
1446
|
+
:return: Information about updated Pointcloud.
|
|
1447
|
+
:rtype: :class:`PointcloudInfo`
|
|
1448
|
+
|
|
1449
|
+
:Usage example:
|
|
1450
|
+
|
|
1451
|
+
.. code-block:: python
|
|
1452
|
+
|
|
1453
|
+
import supervisely as sly
|
|
1454
|
+
|
|
1455
|
+
api = sly.Api.from_env()
|
|
1456
|
+
os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
|
|
1457
|
+
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
|
|
1458
|
+
|
|
1459
|
+
pointcloud_id = 123456
|
|
1460
|
+
new_pointcloud_name = "3333_new.pcd"
|
|
1461
|
+
|
|
1462
|
+
api.pointcloud.rename(id=pointcloud_id, name=new_pointcloud_name)
|
|
1463
|
+
"""
|
|
1464
|
+
|
|
1465
|
+
data = {
|
|
1466
|
+
ApiField.ID: id,
|
|
1467
|
+
ApiField.NAME: name,
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
response = self._api.post("images.editInfo", data)
|
|
1471
|
+
return self._convert_json_info(response.json())
|
|
@@ -2610,3 +2610,41 @@ class VideoApi(RemoveableBulkModuleApi):
|
|
|
2610
2610
|
|
|
2611
2611
|
tasks.append(task)
|
|
2612
2612
|
await asyncio.gather(*tasks)
|
|
2613
|
+
|
|
2614
|
+
def rename(
|
|
2615
|
+
self,
|
|
2616
|
+
id: int,
|
|
2617
|
+
name: str,
|
|
2618
|
+
) -> VideoInfo:
|
|
2619
|
+
"""Renames Video with given ID to a new name.
|
|
2620
|
+
|
|
2621
|
+
:param id: Video ID in Supervisely.
|
|
2622
|
+
:type id: int
|
|
2623
|
+
:param name: New Video name.
|
|
2624
|
+
:type name: str
|
|
2625
|
+
:return: Information about updated Video.
|
|
2626
|
+
:rtype: :class:`VideoInfo`
|
|
2627
|
+
|
|
2628
|
+
:Usage example:
|
|
2629
|
+
|
|
2630
|
+
.. code-block:: python
|
|
2631
|
+
|
|
2632
|
+
import supervisely as sly
|
|
2633
|
+
|
|
2634
|
+
api = sly.Api.from_env()
|
|
2635
|
+
os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
|
|
2636
|
+
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
|
|
2637
|
+
|
|
2638
|
+
video_id = 123456
|
|
2639
|
+
new_video_name = "VID_3333_new.mp4"
|
|
2640
|
+
|
|
2641
|
+
api.video.rename(id=video_id, name=new_video_name)
|
|
2642
|
+
"""
|
|
2643
|
+
|
|
2644
|
+
data = {
|
|
2645
|
+
ApiField.ID: id,
|
|
2646
|
+
ApiField.NAME: name,
|
|
2647
|
+
}
|
|
2648
|
+
|
|
2649
|
+
response = self._api.post("images.editInfo", data)
|
|
2650
|
+
return self._convert_json_info(response.json())
|
|
@@ -1455,3 +1455,41 @@ class VolumeApi(RemoveableBulkModuleApi):
|
|
|
1455
1455
|
)
|
|
1456
1456
|
tasks.append(task)
|
|
1457
1457
|
await asyncio.gather(*tasks)
|
|
1458
|
+
|
|
1459
|
+
def rename(
|
|
1460
|
+
self,
|
|
1461
|
+
id: int,
|
|
1462
|
+
name: str,
|
|
1463
|
+
) -> VolumeInfo:
|
|
1464
|
+
"""Renames Volume with given ID to a new name.
|
|
1465
|
+
|
|
1466
|
+
:param id: Volume ID in Supervisely.
|
|
1467
|
+
:type id: int
|
|
1468
|
+
:param name: New Volume name.
|
|
1469
|
+
:type name: str
|
|
1470
|
+
:return: Information about updated Volume.
|
|
1471
|
+
:rtype: :class:`VolumeInfo`
|
|
1472
|
+
|
|
1473
|
+
:Usage example:
|
|
1474
|
+
|
|
1475
|
+
.. code-block:: python
|
|
1476
|
+
|
|
1477
|
+
import supervisely as sly
|
|
1478
|
+
|
|
1479
|
+
api = sly.Api.from_env()
|
|
1480
|
+
os.environ['SERVER_ADDRESS'] = 'https://app.supervisely.com'
|
|
1481
|
+
os.environ['API_TOKEN'] = 'Your Supervisely API Token'
|
|
1482
|
+
|
|
1483
|
+
volume_id = 123456
|
|
1484
|
+
new_volume_name = "3333_new.nrrd"
|
|
1485
|
+
|
|
1486
|
+
api.volume.rename(id=volume_id, name=new_volume_name)
|
|
1487
|
+
"""
|
|
1488
|
+
|
|
1489
|
+
data = {
|
|
1490
|
+
ApiField.ID: id,
|
|
1491
|
+
ApiField.NAME: name,
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
response = self._api.post("images.editInfo", data)
|
|
1495
|
+
return self._convert_json_info(response.json())
|
|
@@ -548,13 +548,21 @@ class PredictAppGui:
|
|
|
548
548
|
|
|
549
549
|
# Input
|
|
550
550
|
# Input would be newely created project
|
|
551
|
+
input_args = {}
|
|
551
552
|
input_parameters = run_parameters["input"]
|
|
552
553
|
input_project_id = input_parameters.get("project_id", None)
|
|
553
554
|
if input_project_id is None:
|
|
554
555
|
raise ValueError("Input project ID is required for prediction.")
|
|
555
556
|
input_dataset_ids = input_parameters.get("dataset_ids", [])
|
|
556
|
-
|
|
557
|
+
input_image_ids = input_parameters.get("image_ids", [])
|
|
558
|
+
if not (input_dataset_ids or input_image_ids):
|
|
557
559
|
raise ValueError("At least one dataset must be selected for prediction.")
|
|
560
|
+
if input_image_ids:
|
|
561
|
+
input_args["image_ids"] = input_image_ids
|
|
562
|
+
elif input_dataset_ids:
|
|
563
|
+
input_args["dataset_ids"] = input_dataset_ids
|
|
564
|
+
else:
|
|
565
|
+
input_args["project_id"] = input_project_id
|
|
558
566
|
|
|
559
567
|
# Settings
|
|
560
568
|
settings = run_parameters["settings"]
|
|
@@ -582,23 +590,32 @@ class PredictAppGui:
|
|
|
582
590
|
# Always create new project
|
|
583
591
|
# But the actual inference will happen inplace
|
|
584
592
|
output_parameters = run_parameters["output"]
|
|
585
|
-
project_name = output_parameters
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
self.
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
593
|
+
project_name = output_parameters.get("project_name", "")
|
|
594
|
+
upload_to_source_project = output_parameters.get("upload_to_source_project", False)
|
|
595
|
+
if upload_to_source_project:
|
|
596
|
+
output_project_id = input_project_id
|
|
597
|
+
else:
|
|
598
|
+
if not project_name:
|
|
599
|
+
input_project_info = self.api.project.get_info_by_id(input_project_id)
|
|
600
|
+
project_name = input_project_info.name + " [Predictions]"
|
|
601
|
+
logger.warning("Project name is empty, using auto-generated name: " + project_name)
|
|
602
|
+
|
|
603
|
+
# Copy project
|
|
604
|
+
self.set_validator_text("Copying project...", "info")
|
|
605
|
+
created_project = copy_project(
|
|
606
|
+
self.api,
|
|
607
|
+
project_name,
|
|
608
|
+
self.workspace_id,
|
|
609
|
+
input_project_id,
|
|
610
|
+
input_dataset_ids,
|
|
611
|
+
with_annotations,
|
|
612
|
+
self.output_selector.progress,
|
|
613
|
+
)
|
|
614
|
+
output_project_id = created_project.id
|
|
615
|
+
input_args = {
|
|
616
|
+
"project_id": output_project_id,
|
|
617
|
+
}
|
|
618
|
+
|
|
602
619
|
# ------------------------ #
|
|
603
620
|
|
|
604
621
|
# Run prediction
|
|
@@ -607,7 +624,7 @@ class PredictAppGui:
|
|
|
607
624
|
self._is_running = True
|
|
608
625
|
try:
|
|
609
626
|
with model_api.predict_detached(
|
|
610
|
-
|
|
627
|
+
**input_args,
|
|
611
628
|
tqdm=self.output_selector.progress(),
|
|
612
629
|
**kwargs,
|
|
613
630
|
) as session:
|
|
@@ -635,7 +652,7 @@ class PredictAppGui:
|
|
|
635
652
|
|
|
636
653
|
# Set result thumbnail
|
|
637
654
|
self.set_validator_text("Project successfully processed", "success")
|
|
638
|
-
self.output_selector.set_result_thumbnail(
|
|
655
|
+
self.output_selector.set_result_thumbnail(output_project_id)
|
|
639
656
|
# ------------------------ #
|
|
640
657
|
return predictions
|
|
641
658
|
|
|
@@ -3,13 +3,13 @@ from typing import Dict, List, Optional
|
|
|
3
3
|
|
|
4
4
|
from fastapi import BackgroundTasks, Request
|
|
5
5
|
|
|
6
|
+
import supervisely.io.fs as sly_fs
|
|
6
7
|
from supervisely._utils import logger
|
|
7
8
|
from supervisely.api.api import Api
|
|
8
9
|
from supervisely.app.fastapi.subapp import Application
|
|
9
10
|
from supervisely.nn.inference.predict_app.gui.gui import PredictAppGui
|
|
10
|
-
from supervisely.nn.model.prediction import Prediction
|
|
11
11
|
from supervisely.nn.inference.predict_app.gui.utils import disable_enable
|
|
12
|
-
|
|
12
|
+
from supervisely.nn.model.prediction import Prediction
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class PredictApp:
|
|
@@ -91,14 +91,16 @@ class PredictApp:
|
|
|
91
91
|
# "mode": "custom",
|
|
92
92
|
# "train_task_id": 123
|
|
93
93
|
},
|
|
94
|
-
"
|
|
94
|
+
"input": {
|
|
95
95
|
"project_id": 123,
|
|
96
96
|
# "dataset_ids": [...],
|
|
97
97
|
# "video_id": 123
|
|
98
98
|
},
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
|
|
99
|
+
"settings": {
|
|
100
|
+
"inference_settings": {
|
|
101
|
+
"confidence_threshold": 0.5
|
|
102
|
+
},
|
|
103
|
+
}
|
|
102
104
|
"output": {
|
|
103
105
|
"mode": "create",
|
|
104
106
|
"project_name": "Predictions",
|
|
@@ -153,7 +155,7 @@ class PredictApp:
|
|
|
153
155
|
"inference_settings": {
|
|
154
156
|
"conf": 0.6,
|
|
155
157
|
},
|
|
156
|
-
"
|
|
158
|
+
"input": {
|
|
157
159
|
# "project_id": ...,
|
|
158
160
|
# "dataset_ids": [...],
|
|
159
161
|
"image_ids": [1148679, 1148675],
|
|
@@ -162,17 +164,7 @@ class PredictApp:
|
|
|
162
164
|
}
|
|
163
165
|
"""
|
|
164
166
|
state = request.state.state
|
|
165
|
-
|
|
166
|
-
"item": state["item"],
|
|
167
|
-
}
|
|
168
|
-
if "inference_settings" in state:
|
|
169
|
-
run_parameters["inference_settings"] = state["inference_settings"]
|
|
170
|
-
if "output" in state:
|
|
171
|
-
run_parameters["output"] = state["output"]
|
|
172
|
-
else:
|
|
173
|
-
run_parameters["output"] = {"mode": None}
|
|
174
|
-
|
|
175
|
-
predictions = self.run(run_parameters)
|
|
167
|
+
predictions = self.run(state)
|
|
176
168
|
return [prediction.to_json() for prediction in predictions]
|
|
177
169
|
|
|
178
170
|
@server.post("/run")
|
|
@@ -61,7 +61,7 @@ supervisely/api/nn/ecosystem_models_api.py,sha256=giV54hrFwSxOr58f7OLfzSs3yo30BB
|
|
|
61
61
|
supervisely/api/nn/neural_network_api.py,sha256=U1drXTtJsojBA2hJ1fOvbpNES8r3eyDd6b7kA9UxKP0,11019
|
|
62
62
|
supervisely/api/pointcloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
63
|
supervisely/api/pointcloud/pointcloud_annotation_api.py,sha256=xIXqCu0rKYsGt5ezh2EFT2utwsVrr2Xo-MOWUCnbvXc,11259
|
|
64
|
-
supervisely/api/pointcloud/pointcloud_api.py,sha256=
|
|
64
|
+
supervisely/api/pointcloud/pointcloud_api.py,sha256=zkFUcvOYFBmiq9YEsCpDeP07hw42oeqqxMQnvEKq5QM,54915
|
|
65
65
|
supervisely/api/pointcloud/pointcloud_episode_annotation_api.py,sha256=DNmIpjzD8rkdBqfZS7dwk54OPISmrHl9Kju1l57M9SY,7133
|
|
66
66
|
supervisely/api/pointcloud/pointcloud_episode_api.py,sha256=xg1zRKONV9ly0-B72V1dR6OMPFIw35bujazuEdrPGTQ,7922
|
|
67
67
|
supervisely/api/pointcloud/pointcloud_episode_object_api.py,sha256=k2_wV0EVPo9vxSTVe1qOvqVOMSVE6zGDSkfR6TRNsKs,691
|
|
@@ -71,14 +71,14 @@ supervisely/api/pointcloud/pointcloud_object_api.py,sha256=bO1USWb9HAywG_CW4CDu1
|
|
|
71
71
|
supervisely/api/pointcloud/pointcloud_tag_api.py,sha256=iShtr052nOElxsyMyZEUT2vypEm6kP00gnP13ABX24A,4691
|
|
72
72
|
supervisely/api/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
73
|
supervisely/api/video/video_annotation_api.py,sha256=LAdZUC5qB6Q3ufDEUfWERYiglM3I_MYg9Yv1Nn6aKZ4,14137
|
|
74
|
-
supervisely/api/video/video_api.py,sha256=
|
|
74
|
+
supervisely/api/video/video_api.py,sha256=jeW-UjQt5xt7qQHOyTgFc5qe7SergCadxfeNgpLDx-I,95727
|
|
75
75
|
supervisely/api/video/video_figure_api.py,sha256=quksohjhgrK2l2-PtbbNE99fOW6uWXX59-_4xfc-I-k,6244
|
|
76
76
|
supervisely/api/video/video_frame_api.py,sha256=4GwSI4xdCNYEUvTqzKc-Ewd44fw5zqkFoD24jrrN_aY,10214
|
|
77
77
|
supervisely/api/video/video_object_api.py,sha256=IC0NP8EoIT_d3xxDRgz2cA3ixSiuJ5ymy64eS-RfmDM,2227
|
|
78
78
|
supervisely/api/video/video_tag_api.py,sha256=wPe1HeJyg9kV1z2UJq6BEte5sKBoPJ2UGAHpGivis9c,14911
|
|
79
79
|
supervisely/api/volume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
80
|
supervisely/api/volume/volume_annotation_api.py,sha256=_v9IcWYYIajlCIUjVXNc30iWqgfh8i5RRL1kL1hliVE,22376
|
|
81
|
-
supervisely/api/volume/volume_api.py,sha256=
|
|
81
|
+
supervisely/api/volume/volume_api.py,sha256=7mMfKY4HdzrbBvGZFE1SJiRi4OsgDyk3azz4pn-ZR6U,56387
|
|
82
82
|
supervisely/api/volume/volume_figure_api.py,sha256=Fs7j3h76kw7EI-o3vJHjpvL4Vxn3Fu-DzhArgK_qrPk,26523
|
|
83
83
|
supervisely/api/volume/volume_object_api.py,sha256=F7pLV2MTlBlyN6fEKdxBSUatIMGWSuu8bWj3Hvcageo,2139
|
|
84
84
|
supervisely/api/volume/volume_tag_api.py,sha256=yNGgXz44QBSW2VGlNDOVLqLXnH8Q2fFrxDFb_girYXA,3639
|
|
@@ -931,10 +931,10 @@ supervisely/nn/inference/object_detection_3d/object_detection_3d.py,sha256=GmBz7
|
|
|
931
931
|
supervisely/nn/inference/pose_estimation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
932
932
|
supervisely/nn/inference/pose_estimation/pose_estimation.py,sha256=oI-zWO7zY0-tHwGhSFmno3eSwE5I0BDKRDrZBoU9jPY,6452
|
|
933
933
|
supervisely/nn/inference/predict_app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
934
|
-
supervisely/nn/inference/predict_app/predict_app.py,sha256=
|
|
934
|
+
supervisely/nn/inference/predict_app/predict_app.py,sha256=iI_uxCzRpxY-XSXRUzwn261PQEIoQvCZFyRq0jtOv5w,6298
|
|
935
935
|
supervisely/nn/inference/predict_app/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
936
936
|
supervisely/nn/inference/predict_app/gui/classes_selector.py,sha256=V6fmsEnn8-FwoS7c9Bpms1jR_hqWDnGNIBU6s2a-XnQ,2916
|
|
937
|
-
supervisely/nn/inference/predict_app/gui/gui.py,sha256=
|
|
937
|
+
supervisely/nn/inference/predict_app/gui/gui.py,sha256=lLdRQA1iyZApbOPxL6lgFBiwcgm80OkMA-Etu2FoFSk,28831
|
|
938
938
|
supervisely/nn/inference/predict_app/gui/input_selector.py,sha256=Jh-eSU-cnqHtbcBfSjBCfZrq5nfQlPi7bOAzqqo26xc,6187
|
|
939
939
|
supervisely/nn/inference/predict_app/gui/model_selector.py,sha256=sGKzxaPwbTzP7_463sWeJe7qEfxntZHK6hYQPm6smFU,2453
|
|
940
940
|
supervisely/nn/inference/predict_app/gui/output_selector.py,sha256=lDX6q8Liw8wsbOae9DphOIEH1yKj5u2EwMqf0yO1mgY,4885
|
|
@@ -1127,9 +1127,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
1127
1127
|
supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
|
|
1128
1128
|
supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
|
|
1129
1129
|
supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
|
|
1130
|
-
supervisely-6.73.
|
|
1131
|
-
supervisely-6.73.
|
|
1132
|
-
supervisely-6.73.
|
|
1133
|
-
supervisely-6.73.
|
|
1134
|
-
supervisely-6.73.
|
|
1135
|
-
supervisely-6.73.
|
|
1130
|
+
supervisely-6.73.438.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
1131
|
+
supervisely-6.73.438.dist-info/METADATA,sha256=xJe0Ap0FGTYAVYo7tSNMTzla8H72SYeAyLHf-B5d6iU,35433
|
|
1132
|
+
supervisely-6.73.438.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
|
1133
|
+
supervisely-6.73.438.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
|
|
1134
|
+
supervisely-6.73.438.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
|
|
1135
|
+
supervisely-6.73.438.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|