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.
@@ -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
- if not input_dataset_ids:
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["project_name"]
586
- if not project_name:
587
- input_project_info = self.api.project.get_info_by_id(input_project_id)
588
- project_name = input_project_info.name + " [Predictions]"
589
- logger.warning("Project name is empty, using auto-generated name: " + project_name)
590
-
591
- # Copy project
592
- self.set_validator_text("Copying project...", "info")
593
- created_project = copy_project(
594
- self.api,
595
- project_name,
596
- self.workspace_id,
597
- input_project_id,
598
- input_dataset_ids,
599
- with_annotations,
600
- self.output_selector.progress,
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
- project_id=created_project.id,
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(created_project.id)
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
- import supervisely.io.fs as sly_fs
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
- "items": {
94
+ "input": {
95
95
  "project_id": 123,
96
96
  # "dataset_ids": [...],
97
97
  # "video_id": 123
98
98
  },
99
- "inference_settings": {
100
- "confidence_threshold": 0.5
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
- "item": {
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
- run_parameters = {
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")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.436
3
+ Version: 6.73.438
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -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=mPnVXWnxPxrb2P5giFLuabU969vV0xpeP6biETBNvUI,53875
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=H4Lm6S4CSZ2fP2mCchWtqUrczlzfDVsb7Tc5ZNPXDcc,94738
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=rz_yaBbbTkVeAHmF449zPI8Va_YpDHfHYjXgjGAjMJg,55390
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=AIEKqAzU0g2Nksw7r7_bwcbOXOwh1V2Xp7rLLntYNSY,6621
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=RquvLtlWQ9OWB0fOJx6DAoiHCRdmPLMKUld3-VkOoh4,28096
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.436.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1131
- supervisely-6.73.436.dist-info/METADATA,sha256=gOzWnbgJZtUwif9iy9Sy7pRg76KXC8dkqOSGciSk_p4,35433
1132
- supervisely-6.73.436.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1133
- supervisely-6.73.436.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1134
- supervisely-6.73.436.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1135
- supervisely-6.73.436.dist-info/RECORD,,
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,,