supervisely 6.73.371__py3-none-any.whl → 6.73.373__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/_utils.py +11 -0
- supervisely/api/labeling_job_api.py +5 -0
- supervisely/api/labeling_queue_api.py +26 -0
- supervisely/api/module_api.py +2 -0
- supervisely/api/nn/deploy_api.py +68 -17
- supervisely/api/nn/neural_network_api.py +9 -4
- supervisely/nn/experiments.py +2 -1
- supervisely/nn/inference/inference.py +19 -8
- {supervisely-6.73.371.dist-info → supervisely-6.73.373.dist-info}/METADATA +1 -1
- {supervisely-6.73.371.dist-info → supervisely-6.73.373.dist-info}/RECORD +14 -14
- {supervisely-6.73.371.dist-info → supervisely-6.73.373.dist-info}/LICENSE +0 -0
- {supervisely-6.73.371.dist-info → supervisely-6.73.373.dist-info}/WHEEL +0 -0
- {supervisely-6.73.371.dist-info → supervisely-6.73.373.dist-info}/entry_points.txt +0 -0
- {supervisely-6.73.371.dist-info → supervisely-6.73.373.dist-info}/top_level.txt +0 -0
supervisely/_utils.py
CHANGED
|
@@ -575,3 +575,14 @@ def removesuffix(string, suffix):
|
|
|
575
575
|
if string.endswith(suffix):
|
|
576
576
|
return string[: -len(suffix)]
|
|
577
577
|
return string
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
def remove_non_printable(text: str) -> str:
|
|
581
|
+
"""Remove non-printable characters from a string.
|
|
582
|
+
|
|
583
|
+
:param text: Input string
|
|
584
|
+
:type text: str
|
|
585
|
+
:return: String with non-printable characters removed
|
|
586
|
+
:rtype: str
|
|
587
|
+
"""
|
|
588
|
+
return "".join(char for char in text if char.isprintable()).strip()
|
|
@@ -340,6 +340,7 @@ class LabelingJobApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
340
340
|
disable_confirm: Optional[bool] = None,
|
|
341
341
|
disable_submit: Optional[bool] = None,
|
|
342
342
|
toolbox_settings: Optional[Dict] = None,
|
|
343
|
+
enable_quality_check: Optional[bool] = None,
|
|
343
344
|
) -> List[LabelingJobInfo]:
|
|
344
345
|
"""
|
|
345
346
|
Creates Labeling Job and assigns given Users to it.
|
|
@@ -382,6 +383,8 @@ class LabelingJobApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
382
383
|
:type disable_submit: bool, optional
|
|
383
384
|
:param toolbox_settings: Settings for the labeling tool. Only video projects are supported.
|
|
384
385
|
:type toolbox_settings: Dict, optional
|
|
386
|
+
:param enable_quality_check: If True, adds an intermediate step between "review" and completing the Labeling Job.
|
|
387
|
+
:type enable_quality_check: bool, optional
|
|
385
388
|
:return: List of information about new Labeling Job. See :class:`info_sequence<info_sequence>`
|
|
386
389
|
:rtype: :class:`List[LabelingJobInfo]`
|
|
387
390
|
:Usage example:
|
|
@@ -499,6 +502,8 @@ class LabelingJobApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
499
502
|
meta.update({"disableConfirm": disable_confirm})
|
|
500
503
|
if disable_submit is not None:
|
|
501
504
|
meta.update({"disableSubmit": disable_submit})
|
|
505
|
+
if enable_quality_check is not None:
|
|
506
|
+
meta.update({"enableIntermediateReview": enable_quality_check})
|
|
502
507
|
|
|
503
508
|
data = {
|
|
504
509
|
ApiField.NAME: name,
|
|
@@ -198,6 +198,8 @@ class LabelingQueueApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
198
198
|
hide_figure_author: Optional[bool] = False,
|
|
199
199
|
allow_review_own_annotations: Optional[bool] = False,
|
|
200
200
|
skip_complete_job_on_empty: Optional[bool] = False,
|
|
201
|
+
enable_quality_check: Optional[bool] = None,
|
|
202
|
+
quality_check_user_ids: Optional[List[int]] = None,
|
|
201
203
|
) -> int:
|
|
202
204
|
"""
|
|
203
205
|
Creates Labeling Queue and assigns given Users to it.
|
|
@@ -210,6 +212,8 @@ class LabelingQueueApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
210
212
|
:type collection_id: int, optional
|
|
211
213
|
:param user_ids: User IDs in Supervisely to assign Users as labelers to Labeling Queue.
|
|
212
214
|
:type user_ids: List[int]
|
|
215
|
+
:param reviewer_ids: User IDs in Supervisely to assign Users as reviewers to Labeling Queue.
|
|
216
|
+
:type reviewer_ids: List[int]
|
|
213
217
|
:param readme: Additional information about Labeling Queue.
|
|
214
218
|
:type readme: str, optional
|
|
215
219
|
:param description: Description of Labeling Queue.
|
|
@@ -242,6 +246,16 @@ class LabelingQueueApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
242
246
|
:type disable_submit: bool, optional
|
|
243
247
|
:param toolbox_settings: Settings for the labeling tool. Only video projects are supported.
|
|
244
248
|
:type toolbox_settings: Dict, optional
|
|
249
|
+
:param hide_figure_author: If True, hides the author of the figure in the labeling tool.
|
|
250
|
+
:type hide_figure_author: bool, optional
|
|
251
|
+
:param allow_review_own_annotations: If True, allows labelers to review their own annotations.
|
|
252
|
+
:type allow_review_own_annotations: bool, optional
|
|
253
|
+
:param skip_complete_job_on_empty: If True, skips completing the Labeling Queue if there are no images to label.
|
|
254
|
+
:type skip_complete_job_on_empty: bool, optional
|
|
255
|
+
:param enable_quality_check: If True, adds an intermediate step between "review" and completing the Labeling Queue.
|
|
256
|
+
:type enable_quality_check: bool, optional
|
|
257
|
+
:param quality_check_user_ids: List of User IDs in Supervisely to assign Users as Quality Checkers to Labeling Queue.
|
|
258
|
+
:type quality_check_user_ids: List[int], optional
|
|
245
259
|
:return: Labeling Queue ID in Supervisely.
|
|
246
260
|
:rtype: int
|
|
247
261
|
:Usage example:
|
|
@@ -348,6 +362,12 @@ class LabelingQueueApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
348
362
|
meta.update({"disableConfirm": disable_confirm})
|
|
349
363
|
if disable_submit is not None:
|
|
350
364
|
meta.update({"disableSubmit": disable_submit})
|
|
365
|
+
if enable_quality_check is not None:
|
|
366
|
+
if quality_check_user_ids is None:
|
|
367
|
+
raise RuntimeError(
|
|
368
|
+
"quality_check_user_ids must be provided if enable_quality_check is True"
|
|
369
|
+
)
|
|
370
|
+
meta.update({"enableIntermediateReview": enable_quality_check})
|
|
351
371
|
|
|
352
372
|
queue_meta = {}
|
|
353
373
|
if allow_review_own_annotations is True:
|
|
@@ -366,6 +386,12 @@ class LabelingQueueApi(RemoveableBulkModuleApi, ModuleWithStatus):
|
|
|
366
386
|
data[ApiField.DATASET_ID] = dataset_id
|
|
367
387
|
if collection_id is not None:
|
|
368
388
|
data[ApiField.COLLECTION_ID] = collection_id
|
|
389
|
+
if quality_check_user_ids is not None:
|
|
390
|
+
if enable_quality_check is not True:
|
|
391
|
+
raise RuntimeError(
|
|
392
|
+
"quality_check_user_ids can be set only if enable_quality_check is True"
|
|
393
|
+
)
|
|
394
|
+
data[ApiField.QUALITY_CHECK_USER_IDS] = quality_check_user_ids
|
|
369
395
|
|
|
370
396
|
if len(queue_meta) > 0:
|
|
371
397
|
data[ApiField.QUEUE_META] = queue_meta
|
supervisely/api/module_api.py
CHANGED
supervisely/api/nn/deploy_api.py
CHANGED
|
@@ -13,10 +13,11 @@ from supervisely._utils import get_valid_kwargs
|
|
|
13
13
|
from supervisely.api.api import Api
|
|
14
14
|
from supervisely.io.fs import get_file_name_with_ext
|
|
15
15
|
from supervisely.nn.experiments import ExperimentInfo
|
|
16
|
+
from supervisely.nn.utils import RuntimeType
|
|
16
17
|
from supervisely.sly_logger import logger
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
def get_runtime(runtime: str):
|
|
20
|
+
def get_runtime(runtime: Optional[str] = None):
|
|
20
21
|
from supervisely.nn.utils import RuntimeType
|
|
21
22
|
|
|
22
23
|
if runtime is None:
|
|
@@ -554,7 +555,10 @@ class DeployApi:
|
|
|
554
555
|
exclude=["self", "module_id", "workspace_id", "agent_id"],
|
|
555
556
|
)
|
|
556
557
|
task_info = self._api.task.start(
|
|
557
|
-
agent_id=agent_id,
|
|
558
|
+
agent_id=agent_id,
|
|
559
|
+
module_id=module_id,
|
|
560
|
+
workspace_id=workspace_id,
|
|
561
|
+
**kwargs,
|
|
558
562
|
)
|
|
559
563
|
ready = self._api.app.wait_until_ready_for_api_calls(
|
|
560
564
|
task_info["id"], _attempts, _attempt_delay_sec
|
|
@@ -691,7 +695,7 @@ class DeployApi:
|
|
|
691
695
|
artifacts_dir: str,
|
|
692
696
|
checkpoint_name: str,
|
|
693
697
|
device: str,
|
|
694
|
-
runtime: str,
|
|
698
|
+
runtime: Optional[str] = None,
|
|
695
699
|
with_module: bool = True,
|
|
696
700
|
):
|
|
697
701
|
from supervisely.nn.experiments import get_experiment_info_by_artifacts_dir
|
|
@@ -723,10 +727,25 @@ class DeployApi:
|
|
|
723
727
|
|
|
724
728
|
checkpoint = None
|
|
725
729
|
if checkpoint_name is not None:
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
+
if checkpoint_name.endswith(".pt") or checkpoint_name.endswith(".pth"):
|
|
731
|
+
for checkpoint_path in experiment_info.checkpoints:
|
|
732
|
+
if get_file_name_with_ext(checkpoint_path) == checkpoint_name:
|
|
733
|
+
checkpoint = get_file_name_with_ext(checkpoint_path)
|
|
734
|
+
break
|
|
735
|
+
elif checkpoint_name.endswith(".onnx"):
|
|
736
|
+
checkpoint_path = experiment_info.export.get("ONNXRuntime")
|
|
737
|
+
if checkpoint_path is None:
|
|
738
|
+
raise ValueError(f"ONNXRuntime export not found in: '{artifacts_dir}'.")
|
|
739
|
+
elif checkpoint_name.endswith(".engine"):
|
|
740
|
+
checkpoint_path = experiment_info.export.get("TensorRT")
|
|
741
|
+
if checkpoint_path is None:
|
|
742
|
+
raise ValueError(f"TensorRT export not found in: '{artifacts_dir}'.")
|
|
743
|
+
else:
|
|
744
|
+
raise ValueError(
|
|
745
|
+
f"Unknown checkpoint format: '{checkpoint_name}'. Expected formats: '.pt', '.pth', '.onnx' or '.engine'"
|
|
746
|
+
)
|
|
747
|
+
|
|
748
|
+
checkpoint = get_file_name_with_ext(checkpoint_path)
|
|
730
749
|
if checkpoint is None:
|
|
731
750
|
raise ValueError(f"Provided checkpoint '{checkpoint_name}' not found")
|
|
732
751
|
else:
|
|
@@ -736,12 +755,15 @@ class DeployApi:
|
|
|
736
755
|
model_info_dict = asdict(experiment_info)
|
|
737
756
|
model_info_dict["artifacts_dir"] = artifacts_dir
|
|
738
757
|
checkpoint_name = checkpoint
|
|
758
|
+
checkpoints_dir = self._get_checkpoints_dir(checkpoint_name)
|
|
759
|
+
checkpoint_path = f"/{artifacts_dir.strip('/')}/{checkpoints_dir}/{checkpoint_name}"
|
|
760
|
+
if runtime is None:
|
|
761
|
+
runtime = self._set_auto_runtime_by_checkpoint(checkpoint_path)
|
|
762
|
+
|
|
739
763
|
deploy_params = {
|
|
740
764
|
"device": device,
|
|
741
765
|
"model_source": ModelSource.CUSTOM,
|
|
742
|
-
"model_files": {
|
|
743
|
-
"checkpoint": f"/{artifacts_dir.strip('/')}/checkpoints/{checkpoint_name}"
|
|
744
|
-
},
|
|
766
|
+
"model_files": {"checkpoint": checkpoint_path},
|
|
745
767
|
"model_info": model_info_dict,
|
|
746
768
|
"runtime": runtime,
|
|
747
769
|
}
|
|
@@ -752,6 +774,16 @@ class DeployApi:
|
|
|
752
774
|
logger.debug(f"Config file added: {experiment_info.artifacts_dir}{config}")
|
|
753
775
|
return module_id, serve_app_name, deploy_params
|
|
754
776
|
|
|
777
|
+
def _set_auto_runtime_by_checkpoint(self, checkpoint_path: str) -> str:
|
|
778
|
+
if checkpoint_path.endswith(".pt") or checkpoint_path.endswith(".pth"):
|
|
779
|
+
return RuntimeType.PYTORCH
|
|
780
|
+
elif checkpoint_path.endswith(".onnx"):
|
|
781
|
+
return RuntimeType.ONNXRUNTIME
|
|
782
|
+
elif checkpoint_path.endswith(".engine"):
|
|
783
|
+
return RuntimeType.TENSORRT
|
|
784
|
+
else:
|
|
785
|
+
raise ValueError(f"Unknown checkpoint format: '{checkpoint_path}'")
|
|
786
|
+
|
|
755
787
|
def wait(self, model_id, target: Literal["started", "deployed"] = "started", timeout=5 * 60):
|
|
756
788
|
t = time.monotonic()
|
|
757
789
|
method = "is_alive" if target == "started" else "is_ready"
|
|
@@ -764,13 +796,24 @@ class DeployApi:
|
|
|
764
796
|
raise ValueError(f"Path must start with '/'")
|
|
765
797
|
|
|
766
798
|
if model.startswith("/experiments"):
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
799
|
+
if model.endswith(".pt") or model.endswith(".pth"):
|
|
800
|
+
try:
|
|
801
|
+
artifacts_dir, checkpoint_name = model.split("/checkpoints/")
|
|
802
|
+
return artifacts_dir, checkpoint_name
|
|
803
|
+
except:
|
|
804
|
+
raise ValueError(
|
|
805
|
+
"Bad format of checkpoint path. Expected format: '/artifacts_dir/checkpoints/checkpoint_name'"
|
|
806
|
+
)
|
|
807
|
+
elif model.endswith(".onnx") or model.endswith(".engine"):
|
|
808
|
+
try:
|
|
809
|
+
artifacts_dir, checkpoint_name = model.split("/export/")
|
|
810
|
+
return artifacts_dir, checkpoint_name
|
|
811
|
+
except:
|
|
812
|
+
raise ValueError(
|
|
813
|
+
"Bad format of checkpoint path. Expected format: '/artifacts_dir/export/checkpoint_name'"
|
|
814
|
+
)
|
|
815
|
+
else:
|
|
816
|
+
raise ValueError(f"Unknown model format: '{get_file_name_with_ext(model)}'")
|
|
774
817
|
|
|
775
818
|
framework_cls = self._get_framework_by_path(model)
|
|
776
819
|
if framework_cls is None:
|
|
@@ -786,6 +829,14 @@ class DeployApi:
|
|
|
786
829
|
artifacts_dir = checkpoints_dir
|
|
787
830
|
return artifacts_dir, checkpoint_name
|
|
788
831
|
|
|
832
|
+
def _get_checkpoints_dir(self, checkpoint_name: str) -> str:
|
|
833
|
+
if checkpoint_name.endswith(".pt") or checkpoint_name.endswith(".pth"):
|
|
834
|
+
return "checkpoints"
|
|
835
|
+
elif checkpoint_name.endswith(".onnx") or checkpoint_name.endswith(".engine"):
|
|
836
|
+
return "export"
|
|
837
|
+
else:
|
|
838
|
+
raise ValueError(f"Unknown checkpoint format: '{checkpoint_name}'")
|
|
839
|
+
|
|
789
840
|
def _get_framework_by_path(self, path: str):
|
|
790
841
|
from supervisely.nn.artifacts import (
|
|
791
842
|
RITM,
|
|
@@ -3,12 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from typing import Dict, List
|
|
6
|
+
from typing import TYPE_CHECKING, Dict, List
|
|
7
7
|
|
|
8
8
|
import supervisely.io.env as sly_env
|
|
9
9
|
import supervisely.io.env as env
|
|
10
10
|
from supervisely.sly_logger import logger
|
|
11
11
|
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from supervisely.api.api import Api
|
|
14
|
+
from supervisely.nn.experiments import ExperimentInfo
|
|
15
|
+
from supervisely.nn.model.model_api import ModelAPI
|
|
16
|
+
|
|
12
17
|
|
|
13
18
|
class NeuralNetworkApi:
|
|
14
19
|
"""
|
|
@@ -30,7 +35,7 @@ class NeuralNetworkApi:
|
|
|
30
35
|
workspace_id: int = None,
|
|
31
36
|
agent_id: int = None,
|
|
32
37
|
**kwargs,
|
|
33
|
-
) ->
|
|
38
|
+
) -> ModelAPI:
|
|
34
39
|
"""
|
|
35
40
|
Deploy a pretrained model or a custom model checkpoint in Supervisely platform.
|
|
36
41
|
This method will start a new Serving App in Supervisely, deploy a given model, and return a `ModelAPI` object for running predictions and managing the model.
|
|
@@ -214,7 +219,7 @@ class NeuralNetworkApi:
|
|
|
214
219
|
)
|
|
215
220
|
return result
|
|
216
221
|
|
|
217
|
-
def get_experiment_info(self, task_id: int) ->
|
|
222
|
+
def get_experiment_info(self, task_id: int) -> ExperimentInfo:
|
|
218
223
|
"""
|
|
219
224
|
Returns the experiment info of a finished training task by its task_id.
|
|
220
225
|
|
|
@@ -237,7 +242,7 @@ class NeuralNetworkApi:
|
|
|
237
242
|
def connect(
|
|
238
243
|
self,
|
|
239
244
|
task_id: int,
|
|
240
|
-
) ->
|
|
245
|
+
) -> ModelAPI:
|
|
241
246
|
"""
|
|
242
247
|
Connect to a running Serving App by its `task_id`. This allows you to make predictions and control the model state via API.
|
|
243
248
|
|
supervisely/nn/experiments.py
CHANGED
|
@@ -207,7 +207,8 @@ def _fetch_experiment_data(api, team_id: int, experiment_path: str) -> Union[Exp
|
|
|
207
207
|
f"Missing required fields: {missing_required_fields} for '{experiment_path}'. Skipping."
|
|
208
208
|
)
|
|
209
209
|
return None
|
|
210
|
-
|
|
210
|
+
all_fields = required_fields | optional_fields
|
|
211
|
+
return ExperimentInfo(**{k: v for k, v in response_json.items() if k in all_fields})
|
|
211
212
|
except requests.exceptions.RequestException as e:
|
|
212
213
|
logger.debug(f"Request failed for '{experiment_path}': {e}")
|
|
213
214
|
except JSONDecodeError as e:
|
|
@@ -611,9 +611,20 @@ class Inference:
|
|
|
611
611
|
deploy_params = {}
|
|
612
612
|
selected_model = None
|
|
613
613
|
for model in self.pretrained_models:
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
614
|
+
model_meta = model.get("meta")
|
|
615
|
+
if model_meta is not None:
|
|
616
|
+
model_name = model_meta.get("model_name")
|
|
617
|
+
if model_name is not None:
|
|
618
|
+
if model_name.lower() == model_name.lower():
|
|
619
|
+
selected_model = model
|
|
620
|
+
break
|
|
621
|
+
else:
|
|
622
|
+
model_name = model.get("model_name")
|
|
623
|
+
if model_name is not None:
|
|
624
|
+
if model_name.lower() == model_name.lower():
|
|
625
|
+
selected_model = model
|
|
626
|
+
break
|
|
627
|
+
|
|
617
628
|
if selected_model is None:
|
|
618
629
|
raise ValueError(f"Model {model_name} not found in models.json of serving app")
|
|
619
630
|
deploy_params["model_files"] = selected_model["meta"]["model_files"]
|
|
@@ -657,11 +668,11 @@ class Inference:
|
|
|
657
668
|
export = {}
|
|
658
669
|
export_model = export.get(deploy_params["runtime"], None)
|
|
659
670
|
if export_model is not None:
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
):
|
|
671
|
+
checkpoint = deploy_params["model_files"]["checkpoint"]
|
|
672
|
+
artifacts_dir = deploy_params["model_info"]["artifacts_dir"].rstrip("/")
|
|
673
|
+
if sly_fs.get_file_name(export_model) == sly_fs.get_file_name(checkpoint):
|
|
663
674
|
deploy_params["model_files"]["checkpoint"] = (
|
|
664
|
-
|
|
675
|
+
artifacts_dir + "/" + export_model
|
|
665
676
|
)
|
|
666
677
|
logger.info(f"Found model checkpoint for '{deploy_params['runtime']}'")
|
|
667
678
|
return self._download_custom_model(deploy_params["model_files"], log_progress)
|
|
@@ -2610,7 +2621,7 @@ class Inference:
|
|
|
2610
2621
|
inference_request.set_stage(InferenceRequest.Stage.PREPARING, 0, file.size)
|
|
2611
2622
|
|
|
2612
2623
|
img_bytes = b""
|
|
2613
|
-
while buf := file.read(64 * 1024 * 1024):
|
|
2624
|
+
while buf := file.file.read(64 * 1024 * 1024):
|
|
2614
2625
|
img_bytes += buf
|
|
2615
2626
|
inference_request.done(len(buf))
|
|
2616
2627
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
supervisely/README.md,sha256=XM-DiMC6To3I9RjQZ0c61905EFRR_jnCUx2q3uNR-X8,3331
|
|
2
2
|
supervisely/__init__.py,sha256=_qphKFT0_toEQmF5IjB1sWjztbF4lP1tLY29PBJhArY,10917
|
|
3
|
-
supervisely/_utils.py,sha256=
|
|
3
|
+
supervisely/_utils.py,sha256=J0-qYN8YAEGJO4mmE5ErNdRx9mSVEYf5oIgqM4efegU,18926
|
|
4
4
|
supervisely/function_wrapper.py,sha256=R5YajTQ0GnRp2vtjwfC9hINkzQc0JiyGsu8TER373xY,1912
|
|
5
5
|
supervisely/sly_logger.py,sha256=z92Vu5hmC0GgTIJO1n6kPDayRW9__8ix8hL6poDZj-Y,6274
|
|
6
6
|
supervisely/tiny_timer.py,sha256=hkpe_7FE6bsKL79blSs7WBaktuPavEVu67IpEPrfmjE,183
|
|
@@ -33,9 +33,9 @@ supervisely/api/image_annotation_tool_api.py,sha256=YcUo78jRDBJYvIjrd-Y6FJAasLta
|
|
|
33
33
|
supervisely/api/image_api.py,sha256=zwyHsphaclKFU2a5gpHy6Cas_kpitViSCMV6vcPqR0s,224592
|
|
34
34
|
supervisely/api/import_storage_api.py,sha256=BDCgmR0Hv6OoiRHLCVPKt3iDxSVlQp1WrnKhAK_Zl84,460
|
|
35
35
|
supervisely/api/issues_api.py,sha256=BqDJXmNoTzwc3xe6_-mA7FDFC5QQ-ahGbXk_HmpkSeQ,17925
|
|
36
|
-
supervisely/api/labeling_job_api.py,sha256=
|
|
37
|
-
supervisely/api/labeling_queue_api.py,sha256=
|
|
38
|
-
supervisely/api/module_api.py,sha256=
|
|
36
|
+
supervisely/api/labeling_job_api.py,sha256=G2_BV_WtA2lAhfw_nAQmWmv1P-pwimD0ba9GVKoGjiA,55537
|
|
37
|
+
supervisely/api/labeling_queue_api.py,sha256=ilNjAL1d9NSa9yabQn6E-W26YdtooT3ZGXIFZtGnAvY,30158
|
|
38
|
+
supervisely/api/module_api.py,sha256=u-xm7DEkmIGJjhJKehCAs3w0GiC3xxNeLvQ_hTyGAF4,45363
|
|
39
39
|
supervisely/api/object_class_api.py,sha256=7-npNFMYjWNtSXYZg6syc6bX56_oCzDU2kFRPGQWCwA,10399
|
|
40
40
|
supervisely/api/plugin_api.py,sha256=SFm0IlTTOjuHBLUMgG4d4k6U3cWJocE-SVb-f08fwMQ,5286
|
|
41
41
|
supervisely/api/project_api.py,sha256=WNTMqAa0ZedYesfiZEkZtaFr5huxIpJ8TFYygTnlAWQ,80309
|
|
@@ -55,8 +55,8 @@ supervisely/api/entity_annotation/figure_api.py,sha256=rmsE3L_JfqN94sLN637pQ0syi
|
|
|
55
55
|
supervisely/api/entity_annotation/object_api.py,sha256=gbcNvN_KY6G80Me8fHKQgryc2Co7VU_kfFd1GYILZ4E,8875
|
|
56
56
|
supervisely/api/entity_annotation/tag_api.py,sha256=h19YsJzJLDp0VIicQzoYCRyVhY149KY7pUysb4XX0RI,11114
|
|
57
57
|
supervisely/api/nn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
-
supervisely/api/nn/deploy_api.py,sha256=
|
|
59
|
-
supervisely/api/nn/neural_network_api.py,sha256=
|
|
58
|
+
supervisely/api/nn/deploy_api.py,sha256=fA5yk3-Q66BL821iu68HpsGWWO2qHXCcWTmrXoHE4gE,37008
|
|
59
|
+
supervisely/api/nn/neural_network_api.py,sha256=dVETXQzMpmrLe3S5-jUx5Hw-rAjX8wdS_2f3XbQa3ic,10648
|
|
60
60
|
supervisely/api/pointcloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
supervisely/api/pointcloud/pointcloud_annotation_api.py,sha256=xIXqCu0rKYsGt5ezh2EFT2utwsVrr2Xo-MOWUCnbvXc,11259
|
|
62
62
|
supervisely/api/pointcloud/pointcloud_api.py,sha256=Gii6INYqo5f3EUCkI14VMi2XuaxbRHEaqSb_HHmJJTA,53497
|
|
@@ -742,7 +742,7 @@ supervisely/metric/pixel_accuracy.py,sha256=qjtxInOTkGDwPeLUnjBdzOrVRT3V6kGGOWjB
|
|
|
742
742
|
supervisely/metric/precision_recall_metric.py,sha256=4AQCkcB84mpYQS94yJ-wkG1LBuXlQf3X_tI9f67vtR8,3426
|
|
743
743
|
supervisely/metric/projects_applier.py,sha256=ORtgLQHYtNi4KYsSGaGPPWiZPexTJF9IWqX_RuLRxPk,3415
|
|
744
744
|
supervisely/nn/__init__.py,sha256=ZGCDjx_cGIW8CxIWNCzVDRVfAzt7QzlkcvKvLBE8wMc,669
|
|
745
|
-
supervisely/nn/experiments.py,sha256=
|
|
745
|
+
supervisely/nn/experiments.py,sha256=hJNQtvAuxZgo8BDlp41_WpJcGVUCeYqQCkyOQi5oN1Q,9735
|
|
746
746
|
supervisely/nn/prediction_dto.py,sha256=oi146DJpUUBDbR-b-vYkL5WAhCZQYOGomqBDEQGbPdY,2700
|
|
747
747
|
supervisely/nn/task_type.py,sha256=UJvSJ4L3I08j_e6sU6Ptu7kS5p1H09rfhfoDUSZ2iys,522
|
|
748
748
|
supervisely/nn/utils.py,sha256=WoEidpLo5__R6eXsvEFH7VRxb4MtXCr9H-kchg25FDY,2965
|
|
@@ -888,7 +888,7 @@ supervisely/nn/benchmark/visualization/widgets/table/__init__.py,sha256=47DEQpj8
|
|
|
888
888
|
supervisely/nn/benchmark/visualization/widgets/table/table.py,sha256=atmDnF1Af6qLQBUjLhK18RMDKAYlxnsuVHMSEa5a-e8,4319
|
|
889
889
|
supervisely/nn/inference/__init__.py,sha256=QFukX2ip-U7263aEPCF_UCFwj6EujbMnsgrXp5Bbt8I,1623
|
|
890
890
|
supervisely/nn/inference/cache.py,sha256=yqVPIWzhIDRHwrCIpdm-gPxUM2rH8BD98omF659RElw,34938
|
|
891
|
-
supervisely/nn/inference/inference.py,sha256=
|
|
891
|
+
supervisely/nn/inference/inference.py,sha256=xRlxOm8ep_Zha97NpRszrxVdg5xDregpShKkZNNTq0g,178340
|
|
892
892
|
supervisely/nn/inference/inference_request.py,sha256=y6yw0vbaRRcEBS27nq3y0sL6Gmq2qLA_Bm0GrnJGegE,14267
|
|
893
893
|
supervisely/nn/inference/session.py,sha256=dIg2F-OBl68pUzcmtmcI0YQIp1WWNnrJTVMjwFN91Q4,35824
|
|
894
894
|
supervisely/nn/inference/uploader.py,sha256=21a9coOimCHhEqAbV-llZWcp12847DEMoQp3N16bpK0,5425
|
|
@@ -1097,9 +1097,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
1097
1097
|
supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
|
|
1098
1098
|
supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
|
|
1099
1099
|
supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
|
|
1100
|
-
supervisely-6.73.
|
|
1101
|
-
supervisely-6.73.
|
|
1102
|
-
supervisely-6.73.
|
|
1103
|
-
supervisely-6.73.
|
|
1104
|
-
supervisely-6.73.
|
|
1105
|
-
supervisely-6.73.
|
|
1100
|
+
supervisely-6.73.373.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
1101
|
+
supervisely-6.73.373.dist-info/METADATA,sha256=9QccODidDNZTM4MfriUbOZMtOFQ7d8SzadddcA2TMZU,35154
|
|
1102
|
+
supervisely-6.73.373.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
|
1103
|
+
supervisely-6.73.373.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
|
|
1104
|
+
supervisely-6.73.373.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
|
|
1105
|
+
supervisely-6.73.373.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|