dtlpy 1.115.44__py3-none-any.whl → 1.117.6__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.
- dtlpy/__init__.py +491 -491
- dtlpy/__version__.py +1 -1
- dtlpy/assets/__init__.py +26 -26
- dtlpy/assets/code_server/config.yaml +2 -2
- dtlpy/assets/code_server/installation.sh +24 -24
- dtlpy/assets/code_server/launch.json +13 -13
- dtlpy/assets/code_server/settings.json +2 -2
- dtlpy/assets/main.py +53 -53
- dtlpy/assets/main_partial.py +18 -18
- dtlpy/assets/mock.json +11 -11
- dtlpy/assets/model_adapter.py +83 -83
- dtlpy/assets/package.json +61 -61
- dtlpy/assets/package_catalog.json +29 -29
- dtlpy/assets/package_gitignore +307 -307
- dtlpy/assets/service_runners/__init__.py +33 -33
- dtlpy/assets/service_runners/converter.py +96 -96
- dtlpy/assets/service_runners/multi_method.py +49 -49
- dtlpy/assets/service_runners/multi_method_annotation.py +54 -54
- dtlpy/assets/service_runners/multi_method_dataset.py +55 -55
- dtlpy/assets/service_runners/multi_method_item.py +52 -52
- dtlpy/assets/service_runners/multi_method_json.py +52 -52
- dtlpy/assets/service_runners/single_method.py +37 -37
- dtlpy/assets/service_runners/single_method_annotation.py +43 -43
- dtlpy/assets/service_runners/single_method_dataset.py +43 -43
- dtlpy/assets/service_runners/single_method_item.py +41 -41
- dtlpy/assets/service_runners/single_method_json.py +42 -42
- dtlpy/assets/service_runners/single_method_multi_input.py +45 -45
- dtlpy/assets/voc_annotation_template.xml +23 -23
- dtlpy/caches/base_cache.py +32 -32
- dtlpy/caches/cache.py +473 -473
- dtlpy/caches/dl_cache.py +201 -201
- dtlpy/caches/filesystem_cache.py +89 -89
- dtlpy/caches/redis_cache.py +84 -84
- dtlpy/dlp/__init__.py +20 -20
- dtlpy/dlp/cli_utilities.py +367 -367
- dtlpy/dlp/command_executor.py +764 -764
- dtlpy/dlp/dlp +1 -1
- dtlpy/dlp/dlp.bat +1 -1
- dtlpy/dlp/dlp.py +128 -128
- dtlpy/dlp/parser.py +651 -651
- dtlpy/entities/__init__.py +83 -83
- dtlpy/entities/analytic.py +347 -347
- dtlpy/entities/annotation.py +1879 -1879
- dtlpy/entities/annotation_collection.py +699 -699
- dtlpy/entities/annotation_definitions/__init__.py +20 -20
- dtlpy/entities/annotation_definitions/base_annotation_definition.py +100 -100
- dtlpy/entities/annotation_definitions/box.py +195 -195
- dtlpy/entities/annotation_definitions/classification.py +67 -67
- dtlpy/entities/annotation_definitions/comparison.py +72 -72
- dtlpy/entities/annotation_definitions/cube.py +204 -204
- dtlpy/entities/annotation_definitions/cube_3d.py +149 -149
- dtlpy/entities/annotation_definitions/description.py +32 -32
- dtlpy/entities/annotation_definitions/ellipse.py +124 -124
- dtlpy/entities/annotation_definitions/free_text.py +62 -62
- dtlpy/entities/annotation_definitions/gis.py +69 -69
- dtlpy/entities/annotation_definitions/note.py +139 -139
- dtlpy/entities/annotation_definitions/point.py +117 -117
- dtlpy/entities/annotation_definitions/polygon.py +182 -182
- dtlpy/entities/annotation_definitions/polyline.py +111 -111
- dtlpy/entities/annotation_definitions/pose.py +92 -92
- dtlpy/entities/annotation_definitions/ref_image.py +86 -86
- dtlpy/entities/annotation_definitions/segmentation.py +240 -240
- dtlpy/entities/annotation_definitions/subtitle.py +34 -34
- dtlpy/entities/annotation_definitions/text.py +85 -85
- dtlpy/entities/annotation_definitions/undefined_annotation.py +74 -74
- dtlpy/entities/app.py +220 -220
- dtlpy/entities/app_module.py +107 -107
- dtlpy/entities/artifact.py +174 -174
- dtlpy/entities/assignment.py +399 -399
- dtlpy/entities/base_entity.py +214 -214
- dtlpy/entities/bot.py +113 -113
- dtlpy/entities/codebase.py +292 -292
- dtlpy/entities/collection.py +38 -38
- dtlpy/entities/command.py +169 -169
- dtlpy/entities/compute.py +449 -449
- dtlpy/entities/dataset.py +1299 -1299
- dtlpy/entities/directory_tree.py +44 -44
- dtlpy/entities/dpk.py +470 -470
- dtlpy/entities/driver.py +235 -235
- dtlpy/entities/execution.py +397 -397
- dtlpy/entities/feature.py +124 -124
- dtlpy/entities/feature_set.py +152 -145
- dtlpy/entities/filters.py +798 -798
- dtlpy/entities/gis_item.py +107 -107
- dtlpy/entities/integration.py +184 -184
- dtlpy/entities/item.py +975 -959
- dtlpy/entities/label.py +123 -123
- dtlpy/entities/links.py +85 -85
- dtlpy/entities/message.py +175 -175
- dtlpy/entities/model.py +684 -684
- dtlpy/entities/node.py +1005 -1005
- dtlpy/entities/ontology.py +810 -803
- dtlpy/entities/organization.py +287 -287
- dtlpy/entities/package.py +657 -657
- dtlpy/entities/package_defaults.py +5 -5
- dtlpy/entities/package_function.py +185 -185
- dtlpy/entities/package_module.py +113 -113
- dtlpy/entities/package_slot.py +118 -118
- dtlpy/entities/paged_entities.py +299 -299
- dtlpy/entities/pipeline.py +624 -624
- dtlpy/entities/pipeline_execution.py +279 -279
- dtlpy/entities/project.py +394 -394
- dtlpy/entities/prompt_item.py +505 -505
- dtlpy/entities/recipe.py +301 -301
- dtlpy/entities/reflect_dict.py +102 -102
- dtlpy/entities/resource_execution.py +138 -138
- dtlpy/entities/service.py +974 -963
- dtlpy/entities/service_driver.py +117 -117
- dtlpy/entities/setting.py +294 -294
- dtlpy/entities/task.py +495 -495
- dtlpy/entities/time_series.py +143 -143
- dtlpy/entities/trigger.py +426 -426
- dtlpy/entities/user.py +118 -118
- dtlpy/entities/webhook.py +124 -124
- dtlpy/examples/__init__.py +19 -19
- dtlpy/examples/add_labels.py +135 -135
- dtlpy/examples/add_metadata_to_item.py +21 -21
- dtlpy/examples/annotate_items_using_model.py +65 -65
- dtlpy/examples/annotate_video_using_model_and_tracker.py +75 -75
- dtlpy/examples/annotations_convert_to_voc.py +9 -9
- dtlpy/examples/annotations_convert_to_yolo.py +9 -9
- dtlpy/examples/convert_annotation_types.py +51 -51
- dtlpy/examples/converter.py +143 -143
- dtlpy/examples/copy_annotations.py +22 -22
- dtlpy/examples/copy_folder.py +31 -31
- dtlpy/examples/create_annotations.py +51 -51
- dtlpy/examples/create_video_annotations.py +83 -83
- dtlpy/examples/delete_annotations.py +26 -26
- dtlpy/examples/filters.py +113 -113
- dtlpy/examples/move_item.py +23 -23
- dtlpy/examples/play_video_annotation.py +13 -13
- dtlpy/examples/show_item_and_mask.py +53 -53
- dtlpy/examples/triggers.py +49 -49
- dtlpy/examples/upload_batch_of_items.py +20 -20
- dtlpy/examples/upload_items_and_custom_format_annotations.py +55 -55
- dtlpy/examples/upload_items_with_modalities.py +43 -43
- dtlpy/examples/upload_segmentation_annotations_from_mask_image.py +44 -44
- dtlpy/examples/upload_yolo_format_annotations.py +70 -70
- dtlpy/exceptions.py +125 -125
- dtlpy/miscellaneous/__init__.py +20 -20
- dtlpy/miscellaneous/dict_differ.py +95 -95
- dtlpy/miscellaneous/git_utils.py +217 -217
- dtlpy/miscellaneous/json_utils.py +14 -14
- dtlpy/miscellaneous/list_print.py +105 -105
- dtlpy/miscellaneous/zipping.py +130 -130
- dtlpy/ml/__init__.py +20 -20
- dtlpy/ml/base_feature_extractor_adapter.py +27 -27
- dtlpy/ml/base_model_adapter.py +1287 -1230
- dtlpy/ml/metrics.py +461 -461
- dtlpy/ml/predictions_utils.py +274 -274
- dtlpy/ml/summary_writer.py +57 -57
- dtlpy/ml/train_utils.py +60 -60
- dtlpy/new_instance.py +252 -252
- dtlpy/repositories/__init__.py +56 -56
- dtlpy/repositories/analytics.py +85 -85
- dtlpy/repositories/annotations.py +916 -916
- dtlpy/repositories/apps.py +383 -383
- dtlpy/repositories/artifacts.py +452 -452
- dtlpy/repositories/assignments.py +599 -599
- dtlpy/repositories/bots.py +213 -213
- dtlpy/repositories/codebases.py +559 -559
- dtlpy/repositories/collections.py +332 -332
- dtlpy/repositories/commands.py +152 -152
- dtlpy/repositories/compositions.py +61 -61
- dtlpy/repositories/computes.py +439 -439
- dtlpy/repositories/datasets.py +1585 -1504
- dtlpy/repositories/downloader.py +1157 -923
- dtlpy/repositories/dpks.py +433 -433
- dtlpy/repositories/drivers.py +482 -482
- dtlpy/repositories/executions.py +815 -815
- dtlpy/repositories/feature_sets.py +256 -226
- dtlpy/repositories/features.py +255 -255
- dtlpy/repositories/integrations.py +484 -484
- dtlpy/repositories/items.py +912 -912
- dtlpy/repositories/messages.py +94 -94
- dtlpy/repositories/models.py +1000 -1000
- dtlpy/repositories/nodes.py +80 -80
- dtlpy/repositories/ontologies.py +511 -511
- dtlpy/repositories/organizations.py +525 -525
- dtlpy/repositories/packages.py +1941 -1941
- dtlpy/repositories/pipeline_executions.py +451 -451
- dtlpy/repositories/pipelines.py +640 -640
- dtlpy/repositories/projects.py +539 -539
- dtlpy/repositories/recipes.py +429 -399
- dtlpy/repositories/resource_executions.py +137 -137
- dtlpy/repositories/schema.py +120 -120
- dtlpy/repositories/service_drivers.py +213 -213
- dtlpy/repositories/services.py +1704 -1704
- dtlpy/repositories/settings.py +339 -339
- dtlpy/repositories/tasks.py +1477 -1477
- dtlpy/repositories/times_series.py +278 -278
- dtlpy/repositories/triggers.py +536 -536
- dtlpy/repositories/upload_element.py +257 -257
- dtlpy/repositories/uploader.py +661 -661
- dtlpy/repositories/webhooks.py +249 -249
- dtlpy/services/__init__.py +22 -22
- dtlpy/services/aihttp_retry.py +131 -131
- dtlpy/services/api_client.py +1786 -1785
- dtlpy/services/api_reference.py +40 -40
- dtlpy/services/async_utils.py +133 -133
- dtlpy/services/calls_counter.py +44 -44
- dtlpy/services/check_sdk.py +68 -68
- dtlpy/services/cookie.py +115 -115
- dtlpy/services/create_logger.py +156 -156
- dtlpy/services/events.py +84 -84
- dtlpy/services/logins.py +235 -235
- dtlpy/services/reporter.py +256 -256
- dtlpy/services/service_defaults.py +91 -91
- dtlpy/utilities/__init__.py +20 -20
- dtlpy/utilities/annotations/__init__.py +16 -16
- dtlpy/utilities/annotations/annotation_converters.py +269 -269
- dtlpy/utilities/base_package_runner.py +285 -264
- dtlpy/utilities/converter.py +1650 -1650
- dtlpy/utilities/dataset_generators/__init__.py +1 -1
- dtlpy/utilities/dataset_generators/dataset_generator.py +670 -670
- dtlpy/utilities/dataset_generators/dataset_generator_tensorflow.py +23 -23
- dtlpy/utilities/dataset_generators/dataset_generator_torch.py +21 -21
- dtlpy/utilities/local_development/__init__.py +1 -1
- dtlpy/utilities/local_development/local_session.py +179 -179
- dtlpy/utilities/reports/__init__.py +2 -2
- dtlpy/utilities/reports/figures.py +343 -343
- dtlpy/utilities/reports/report.py +71 -71
- dtlpy/utilities/videos/__init__.py +17 -17
- dtlpy/utilities/videos/video_player.py +598 -598
- dtlpy/utilities/videos/videos.py +470 -470
- {dtlpy-1.115.44.data → dtlpy-1.117.6.data}/scripts/dlp +1 -1
- dtlpy-1.117.6.data/scripts/dlp.bat +2 -0
- {dtlpy-1.115.44.data → dtlpy-1.117.6.data}/scripts/dlp.py +128 -128
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/METADATA +186 -186
- dtlpy-1.117.6.dist-info/RECORD +239 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/WHEEL +1 -1
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/licenses/LICENSE +200 -200
- tests/features/environment.py +551 -551
- dtlpy/assets/__pycache__/__init__.cpython-310.pyc +0 -0
- dtlpy-1.115.44.data/scripts/dlp.bat +0 -2
- dtlpy-1.115.44.dist-info/RECORD +0 -240
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/top_level.txt +0 -0
dtlpy/examples/add_labels.py
CHANGED
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
def main(project_name, dataset_name):
|
|
2
|
-
# Imports the SDK package
|
|
3
|
-
import dtlpy as dl
|
|
4
|
-
|
|
5
|
-
"""
|
|
6
|
-
Label dictionary format:
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
'label_name': 'dog',
|
|
10
|
-
'displayLabel': 'Dog',
|
|
11
|
-
'attributes': ['list of attributes'],
|
|
12
|
-
'color': (34, 6, 231),
|
|
13
|
-
'children': ['list of label dictionaries']
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
# prep
|
|
19
|
-
project = dl.projects.get(project_name=project_name)
|
|
20
|
-
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
21
|
-
|
|
22
|
-
#########################
|
|
23
|
-
# View dataset's labels #
|
|
24
|
-
#########################
|
|
25
|
-
# as objects
|
|
26
|
-
labels = dataset.labels
|
|
27
|
-
|
|
28
|
-
# as instance map
|
|
29
|
-
labels = dataset.instance_map
|
|
30
|
-
|
|
31
|
-
###############################
|
|
32
|
-
# add label to dataset entity #
|
|
33
|
-
###############################
|
|
34
|
-
dataset.add_label(label_name='Horse', color=(2, 43, 123))
|
|
35
|
-
|
|
36
|
-
#############################
|
|
37
|
-
# add label with sub-labels #
|
|
38
|
-
#############################
|
|
39
|
-
dataset.add_label(label_name='CEO', color=(2, 43, 123),
|
|
40
|
-
children=[{'label_name': 'Manager',
|
|
41
|
-
'children': [{'label_name': 'Employee'}]}])
|
|
42
|
-
|
|
43
|
-
################################
|
|
44
|
-
# add labels to dataset entity #
|
|
45
|
-
################################
|
|
46
|
-
labels = [
|
|
47
|
-
{'label_name': 'Dog',
|
|
48
|
-
'color': (34, 6, 231),
|
|
49
|
-
'children': [{'label_name': 'Puppy',
|
|
50
|
-
'color': (24, 16, 130)}]},
|
|
51
|
-
{'label_name': 'Cat',
|
|
52
|
-
'color': (24, 25, 31),
|
|
53
|
-
'children': [{'label_name': 'Kitten',
|
|
54
|
-
'color': (124, 116, 140)}]}
|
|
55
|
-
]
|
|
56
|
-
dataset.add_labels(label_list=labels)
|
|
57
|
-
|
|
58
|
-
#################
|
|
59
|
-
# Delete Labels #
|
|
60
|
-
#################
|
|
61
|
-
dataset.delete_labels(label_names=['Cat', 'Dog'])
|
|
62
|
-
|
|
63
|
-
########################################
|
|
64
|
-
# Copy dataset labels to a new dataset #
|
|
65
|
-
########################################
|
|
66
|
-
new_dataset = project.datasets.create(dataset_name='new_dataset_with_labels',
|
|
67
|
-
labels=dataset.labels)
|
|
68
|
-
|
|
69
|
-
##########################################
|
|
70
|
-
# Copy dataset ontology to a new dataset #
|
|
71
|
-
##########################################
|
|
72
|
-
new_dataset = project.datasets.create(dataset_name='new_dataset_with_ontology',
|
|
73
|
-
ontology_ids=dataset.ontology_ids)
|
|
74
|
-
|
|
75
|
-
##############################################
|
|
76
|
-
# Copy dataset labels to an existing dataset #
|
|
77
|
-
##############################################
|
|
78
|
-
new_dataset = project.datasets.create(dataset_name='new_dataset_without_labels')
|
|
79
|
-
|
|
80
|
-
# Get from a list or recipes
|
|
81
|
-
recipe = new_dataset.recipes.list()[0]
|
|
82
|
-
# Or get recipe by id
|
|
83
|
-
# recipe = new_dataset.recipes.get(recipe_id='recipe_id')
|
|
84
|
-
|
|
85
|
-
# Get from the list of ontologies
|
|
86
|
-
ontology = recipe.ontologies.list()[0]
|
|
87
|
-
# Or get ontology by id
|
|
88
|
-
# ontology = recipe.ontologies.get(ontology='ontology_id')
|
|
89
|
-
|
|
90
|
-
# Add the labels to the dataset
|
|
91
|
-
ontology.add_labels(label_list=dataset.labels)
|
|
92
|
-
ontology.update()
|
|
93
|
-
|
|
94
|
-
#########################################################
|
|
95
|
-
# Copy dataset ontology to an existing dataset's recipe #
|
|
96
|
-
#########################################################
|
|
97
|
-
new_dataset = project.datasets.create(dataset_name='new_dataset_without_ontology')
|
|
98
|
-
# get recipe
|
|
99
|
-
new_dataset_recipe = new_dataset.recipes.list()[0]
|
|
100
|
-
# Copy from a different dataset
|
|
101
|
-
new_dataset_recipe.ontology_ids = dataset.ontology_ids
|
|
102
|
-
# Update the new dataset
|
|
103
|
-
new_dataset_recipe.update()
|
|
104
|
-
|
|
105
|
-
##########################
|
|
106
|
-
# update existing recipe #
|
|
107
|
-
##########################
|
|
108
|
-
# Get recipe from list
|
|
109
|
-
recipe = dataset.recipes.list()[0]
|
|
110
|
-
# Or get specific recipe:
|
|
111
|
-
# recipe = dataset.recipes.get(recipe_id='id')
|
|
112
|
-
|
|
113
|
-
# Get ontology from list
|
|
114
|
-
ontology = recipe.ontologies.list()[0]
|
|
115
|
-
# Or get specific ontology:
|
|
116
|
-
# ontology = recipe.ontologies.get(ontology_id='id')
|
|
117
|
-
|
|
118
|
-
# Add one label
|
|
119
|
-
ontology.add_label(label_name='Lion', color=(35, 234, 123))
|
|
120
|
-
|
|
121
|
-
# Add a list of labels
|
|
122
|
-
labels = [{'label_name': 'Shark', 'color': (1, 1, 1)}, {'label_name': 'Whale', 'color': (34, 56, 7)},
|
|
123
|
-
{'label_name': 'Dolphin', 'color': (100, 14, 150)}]
|
|
124
|
-
ontology.add_labels(label_list=labels)
|
|
125
|
-
|
|
126
|
-
# After adding - update ontology
|
|
127
|
-
ontology.update()
|
|
128
|
-
|
|
129
|
-
#####################
|
|
130
|
-
# Create new recipe #
|
|
131
|
-
#####################
|
|
132
|
-
# Label list
|
|
133
|
-
labels = [{'tag': 'Donkey', 'color': (1, 1, 1)}, {'tag': 'Mammoth', 'color': (34, 56, 7)},
|
|
134
|
-
{'tag': 'Bird', 'color': (100, 14, 150)}]
|
|
135
|
-
recipe = dataset.recipes.create(recipe_name='My Recipe', labels=labels)
|
|
1
|
+
def main(project_name, dataset_name):
|
|
2
|
+
# Imports the SDK package
|
|
3
|
+
import dtlpy as dl
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
Label dictionary format:
|
|
7
|
+
|
|
8
|
+
{
|
|
9
|
+
'label_name': 'dog',
|
|
10
|
+
'displayLabel': 'Dog',
|
|
11
|
+
'attributes': ['list of attributes'],
|
|
12
|
+
'color': (34, 6, 231),
|
|
13
|
+
'children': ['list of label dictionaries']
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
# prep
|
|
19
|
+
project = dl.projects.get(project_name=project_name)
|
|
20
|
+
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
21
|
+
|
|
22
|
+
#########################
|
|
23
|
+
# View dataset's labels #
|
|
24
|
+
#########################
|
|
25
|
+
# as objects
|
|
26
|
+
labels = dataset.labels
|
|
27
|
+
|
|
28
|
+
# as instance map
|
|
29
|
+
labels = dataset.instance_map
|
|
30
|
+
|
|
31
|
+
###############################
|
|
32
|
+
# add label to dataset entity #
|
|
33
|
+
###############################
|
|
34
|
+
dataset.add_label(label_name='Horse', color=(2, 43, 123))
|
|
35
|
+
|
|
36
|
+
#############################
|
|
37
|
+
# add label with sub-labels #
|
|
38
|
+
#############################
|
|
39
|
+
dataset.add_label(label_name='CEO', color=(2, 43, 123),
|
|
40
|
+
children=[{'label_name': 'Manager',
|
|
41
|
+
'children': [{'label_name': 'Employee'}]}])
|
|
42
|
+
|
|
43
|
+
################################
|
|
44
|
+
# add labels to dataset entity #
|
|
45
|
+
################################
|
|
46
|
+
labels = [
|
|
47
|
+
{'label_name': 'Dog',
|
|
48
|
+
'color': (34, 6, 231),
|
|
49
|
+
'children': [{'label_name': 'Puppy',
|
|
50
|
+
'color': (24, 16, 130)}]},
|
|
51
|
+
{'label_name': 'Cat',
|
|
52
|
+
'color': (24, 25, 31),
|
|
53
|
+
'children': [{'label_name': 'Kitten',
|
|
54
|
+
'color': (124, 116, 140)}]}
|
|
55
|
+
]
|
|
56
|
+
dataset.add_labels(label_list=labels)
|
|
57
|
+
|
|
58
|
+
#################
|
|
59
|
+
# Delete Labels #
|
|
60
|
+
#################
|
|
61
|
+
dataset.delete_labels(label_names=['Cat', 'Dog'])
|
|
62
|
+
|
|
63
|
+
########################################
|
|
64
|
+
# Copy dataset labels to a new dataset #
|
|
65
|
+
########################################
|
|
66
|
+
new_dataset = project.datasets.create(dataset_name='new_dataset_with_labels',
|
|
67
|
+
labels=dataset.labels)
|
|
68
|
+
|
|
69
|
+
##########################################
|
|
70
|
+
# Copy dataset ontology to a new dataset #
|
|
71
|
+
##########################################
|
|
72
|
+
new_dataset = project.datasets.create(dataset_name='new_dataset_with_ontology',
|
|
73
|
+
ontology_ids=dataset.ontology_ids)
|
|
74
|
+
|
|
75
|
+
##############################################
|
|
76
|
+
# Copy dataset labels to an existing dataset #
|
|
77
|
+
##############################################
|
|
78
|
+
new_dataset = project.datasets.create(dataset_name='new_dataset_without_labels')
|
|
79
|
+
|
|
80
|
+
# Get from a list or recipes
|
|
81
|
+
recipe = new_dataset.recipes.list()[0]
|
|
82
|
+
# Or get recipe by id
|
|
83
|
+
# recipe = new_dataset.recipes.get(recipe_id='recipe_id')
|
|
84
|
+
|
|
85
|
+
# Get from the list of ontologies
|
|
86
|
+
ontology = recipe.ontologies.list()[0]
|
|
87
|
+
# Or get ontology by id
|
|
88
|
+
# ontology = recipe.ontologies.get(ontology='ontology_id')
|
|
89
|
+
|
|
90
|
+
# Add the labels to the dataset
|
|
91
|
+
ontology.add_labels(label_list=dataset.labels)
|
|
92
|
+
ontology.update()
|
|
93
|
+
|
|
94
|
+
#########################################################
|
|
95
|
+
# Copy dataset ontology to an existing dataset's recipe #
|
|
96
|
+
#########################################################
|
|
97
|
+
new_dataset = project.datasets.create(dataset_name='new_dataset_without_ontology')
|
|
98
|
+
# get recipe
|
|
99
|
+
new_dataset_recipe = new_dataset.recipes.list()[0]
|
|
100
|
+
# Copy from a different dataset
|
|
101
|
+
new_dataset_recipe.ontology_ids = dataset.ontology_ids
|
|
102
|
+
# Update the new dataset
|
|
103
|
+
new_dataset_recipe.update()
|
|
104
|
+
|
|
105
|
+
##########################
|
|
106
|
+
# update existing recipe #
|
|
107
|
+
##########################
|
|
108
|
+
# Get recipe from list
|
|
109
|
+
recipe = dataset.recipes.list()[0]
|
|
110
|
+
# Or get specific recipe:
|
|
111
|
+
# recipe = dataset.recipes.get(recipe_id='id')
|
|
112
|
+
|
|
113
|
+
# Get ontology from list
|
|
114
|
+
ontology = recipe.ontologies.list()[0]
|
|
115
|
+
# Or get specific ontology:
|
|
116
|
+
# ontology = recipe.ontologies.get(ontology_id='id')
|
|
117
|
+
|
|
118
|
+
# Add one label
|
|
119
|
+
ontology.add_label(label_name='Lion', color=(35, 234, 123))
|
|
120
|
+
|
|
121
|
+
# Add a list of labels
|
|
122
|
+
labels = [{'label_name': 'Shark', 'color': (1, 1, 1)}, {'label_name': 'Whale', 'color': (34, 56, 7)},
|
|
123
|
+
{'label_name': 'Dolphin', 'color': (100, 14, 150)}]
|
|
124
|
+
ontology.add_labels(label_list=labels)
|
|
125
|
+
|
|
126
|
+
# After adding - update ontology
|
|
127
|
+
ontology.update()
|
|
128
|
+
|
|
129
|
+
#####################
|
|
130
|
+
# Create new recipe #
|
|
131
|
+
#####################
|
|
132
|
+
# Label list
|
|
133
|
+
labels = [{'tag': 'Donkey', 'color': (1, 1, 1)}, {'tag': 'Mammoth', 'color': (34, 56, 7)},
|
|
134
|
+
{'tag': 'Bird', 'color': (100, 14, 150)}]
|
|
135
|
+
recipe = dataset.recipes.create(recipe_name='My Recipe', labels=labels)
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
def main(project_name, dataset_name, item_path):
|
|
2
|
-
"""
|
|
3
|
-
Add any metadata to item
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
# import Dataloop SDK
|
|
7
|
-
import dtlpy as dl
|
|
8
|
-
|
|
9
|
-
# get dataset
|
|
10
|
-
dataset = dl.projects.get(project_name=project_name).datasets.get(dataset_name=dataset_name)
|
|
11
|
-
|
|
12
|
-
# upload and claim item
|
|
13
|
-
item = dataset.items.upload(local_path=item_path)
|
|
14
|
-
|
|
15
|
-
# modify metadata
|
|
16
|
-
item.metadata['user'] = dict()
|
|
17
|
-
item.metadata['user']['MyKey'] = 'MyVal'
|
|
18
|
-
# update and reclaim item
|
|
19
|
-
item = item.update()
|
|
20
|
-
|
|
21
|
-
# item in platform should have section 'user' in metadata with field 'MyKey' and value 'MyVal'
|
|
1
|
+
def main(project_name, dataset_name, item_path):
|
|
2
|
+
"""
|
|
3
|
+
Add any metadata to item
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
# import Dataloop SDK
|
|
7
|
+
import dtlpy as dl
|
|
8
|
+
|
|
9
|
+
# get dataset
|
|
10
|
+
dataset = dl.projects.get(project_name=project_name).datasets.get(dataset_name=dataset_name)
|
|
11
|
+
|
|
12
|
+
# upload and claim item
|
|
13
|
+
item = dataset.items.upload(local_path=item_path)
|
|
14
|
+
|
|
15
|
+
# modify metadata
|
|
16
|
+
item.metadata['user'] = dict()
|
|
17
|
+
item.metadata['user']['MyKey'] = 'MyVal'
|
|
18
|
+
# update and reclaim item
|
|
19
|
+
item = item.update()
|
|
20
|
+
|
|
21
|
+
# item in platform should have section 'user' in metadata with field 'MyKey' and value 'MyVal'
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
"""
|
|
3
|
-
Annotate a batch of images using a model and upload to platform
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
import numpy as np
|
|
7
|
-
from PIL import Image
|
|
8
|
-
from keras.applications.imagenet_utils import decode_predictions
|
|
9
|
-
from keras.applications.inception_v3 import InceptionV3, preprocess_input
|
|
10
|
-
import dtlpy as dl
|
|
11
|
-
|
|
12
|
-
##############
|
|
13
|
-
# load model #
|
|
14
|
-
##############
|
|
15
|
-
model = InceptionV3()
|
|
16
|
-
|
|
17
|
-
##########################
|
|
18
|
-
# init platform instance #
|
|
19
|
-
##########################
|
|
20
|
-
project = dl.projects.get(project_name='ImageNet')
|
|
21
|
-
dataset = project.datasets.get(dataset_name='sample')
|
|
22
|
-
|
|
23
|
-
# get pages of images from dataset
|
|
24
|
-
pages = dataset.items.list()
|
|
25
|
-
####################
|
|
26
|
-
# start annotating #
|
|
27
|
-
####################
|
|
28
|
-
for page in pages:
|
|
29
|
-
for item in page:
|
|
30
|
-
if item.type == 'dir':
|
|
31
|
-
continue
|
|
32
|
-
img_batch = [item.download(save_locally=False)]
|
|
33
|
-
# load images
|
|
34
|
-
img_batch = [Image.open(buf) for buf in img_batch]
|
|
35
|
-
# get original images shapes before reshaping for model
|
|
36
|
-
orig_img_shape = [img.size[::-1] for img in img_batch]
|
|
37
|
-
# reshape and load images
|
|
38
|
-
batch = np.array([np.array(img.resize((299, 299))) for img in img_batch])
|
|
39
|
-
# preprocess batch
|
|
40
|
-
batch = preprocess_input(batch)
|
|
41
|
-
# inference the model
|
|
42
|
-
predictions = model.predict(batch)
|
|
43
|
-
# get ImageNet labels
|
|
44
|
-
labels = decode_predictions(predictions, top=1)
|
|
45
|
-
# create platform annotations instance
|
|
46
|
-
builder = item.annotations.builder()
|
|
47
|
-
for i_pred, label in enumerate(labels):
|
|
48
|
-
|
|
49
|
-
# add the class labels
|
|
50
|
-
##############################
|
|
51
|
-
# If model is classification #
|
|
52
|
-
##############################
|
|
53
|
-
builder.add(annotation_definition=dl.Classification(label=label[0][1]))
|
|
54
|
-
#############################
|
|
55
|
-
# If model outputs polygons #
|
|
56
|
-
#############################
|
|
57
|
-
builder.add(annotation_definition=dl.Polyline(geo=pred['polygon_pts'],
|
|
58
|
-
label=labels[i_pred][0][1]))
|
|
59
|
-
#########################
|
|
60
|
-
# If model outputs mask #
|
|
61
|
-
#########################
|
|
62
|
-
builder.add(annotation_definition=dl.Segmentation(geo=pred['mask'],
|
|
63
|
-
label=labels[i_pred][0][1]))
|
|
64
|
-
# upload a annotations to matching items in platform
|
|
65
|
-
builder.upload()
|
|
1
|
+
def main():
|
|
2
|
+
"""
|
|
3
|
+
Annotate a batch of images using a model and upload to platform
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
import numpy as np
|
|
7
|
+
from PIL import Image
|
|
8
|
+
from keras.applications.imagenet_utils import decode_predictions
|
|
9
|
+
from keras.applications.inception_v3 import InceptionV3, preprocess_input
|
|
10
|
+
import dtlpy as dl
|
|
11
|
+
|
|
12
|
+
##############
|
|
13
|
+
# load model #
|
|
14
|
+
##############
|
|
15
|
+
model = InceptionV3()
|
|
16
|
+
|
|
17
|
+
##########################
|
|
18
|
+
# init platform instance #
|
|
19
|
+
##########################
|
|
20
|
+
project = dl.projects.get(project_name='ImageNet')
|
|
21
|
+
dataset = project.datasets.get(dataset_name='sample')
|
|
22
|
+
|
|
23
|
+
# get pages of images from dataset
|
|
24
|
+
pages = dataset.items.list()
|
|
25
|
+
####################
|
|
26
|
+
# start annotating #
|
|
27
|
+
####################
|
|
28
|
+
for page in pages:
|
|
29
|
+
for item in page:
|
|
30
|
+
if item.type == 'dir':
|
|
31
|
+
continue
|
|
32
|
+
img_batch = [item.download(save_locally=False)]
|
|
33
|
+
# load images
|
|
34
|
+
img_batch = [Image.open(buf) for buf in img_batch]
|
|
35
|
+
# get original images shapes before reshaping for model
|
|
36
|
+
orig_img_shape = [img.size[::-1] for img in img_batch]
|
|
37
|
+
# reshape and load images
|
|
38
|
+
batch = np.array([np.array(img.resize((299, 299))) for img in img_batch])
|
|
39
|
+
# preprocess batch
|
|
40
|
+
batch = preprocess_input(batch)
|
|
41
|
+
# inference the model
|
|
42
|
+
predictions = model.predict(batch)
|
|
43
|
+
# get ImageNet labels
|
|
44
|
+
labels = decode_predictions(predictions, top=1)
|
|
45
|
+
# create platform annotations instance
|
|
46
|
+
builder = item.annotations.builder()
|
|
47
|
+
for i_pred, label in enumerate(labels):
|
|
48
|
+
|
|
49
|
+
# add the class labels
|
|
50
|
+
##############################
|
|
51
|
+
# If model is classification #
|
|
52
|
+
##############################
|
|
53
|
+
builder.add(annotation_definition=dl.Classification(label=label[0][1]))
|
|
54
|
+
#############################
|
|
55
|
+
# If model outputs polygons #
|
|
56
|
+
#############################
|
|
57
|
+
builder.add(annotation_definition=dl.Polyline(geo=pred['polygon_pts'],
|
|
58
|
+
label=labels[i_pred][0][1]))
|
|
59
|
+
#########################
|
|
60
|
+
# If model outputs mask #
|
|
61
|
+
#########################
|
|
62
|
+
builder.add(annotation_definition=dl.Segmentation(geo=pred['mask'],
|
|
63
|
+
label=labels[i_pred][0][1]))
|
|
64
|
+
# upload a annotations to matching items in platform
|
|
65
|
+
builder.upload()
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
"""
|
|
3
|
-
Detect and track (using model and some tracker) and upload annotation to platform
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
import cv2
|
|
7
|
-
import dtlpy as dl
|
|
8
|
-
|
|
9
|
-
##########################
|
|
10
|
-
# Load model and tracker #
|
|
11
|
-
##########################
|
|
12
|
-
# load your model for detection
|
|
13
|
-
model = load_some_model()
|
|
14
|
-
# load any tracking algorithm to track detected elements
|
|
15
|
-
tracker = load_some_tracker()
|
|
16
|
-
|
|
17
|
-
##############
|
|
18
|
-
# load video #
|
|
19
|
-
##############
|
|
20
|
-
video_path = 'some/video/path'
|
|
21
|
-
|
|
22
|
-
vid = cv2.VideoCapture(video_path)
|
|
23
|
-
if not vid.isOpened():
|
|
24
|
-
raise IOError("Couldn't open webcam or video")
|
|
25
|
-
video_fps = vid.get(cv2.CAP_PROP_FPS)
|
|
26
|
-
video_size = (int(vid.get(cv2.CAP_PROP_FRAME_WIDTH)),
|
|
27
|
-
int(vid.get(cv2.CAP_PROP_FRAME_HEIGHT)))
|
|
28
|
-
video_frames = int(vid.get(cv2.CAP_PROP_FRAME_COUNT))
|
|
29
|
-
|
|
30
|
-
############
|
|
31
|
-
# Platform #
|
|
32
|
-
###########
|
|
33
|
-
# get the item from platform
|
|
34
|
-
item = dl.projects.get(project_name='MyProject') \
|
|
35
|
-
.datasets.get(dataset_name='MyDataset') \
|
|
36
|
-
.items.get(filepath='/path/to/video.mp4')
|
|
37
|
-
builder = item.annotations.builder()
|
|
38
|
-
|
|
39
|
-
#######
|
|
40
|
-
# Run #
|
|
41
|
-
#######
|
|
42
|
-
frame_num = 0
|
|
43
|
-
while True:
|
|
44
|
-
# get new frame from video
|
|
45
|
-
return_value, frame = vid.read()
|
|
46
|
-
if not return_value:
|
|
47
|
-
break
|
|
48
|
-
|
|
49
|
-
# get detection
|
|
50
|
-
detections = model.predict(frame)
|
|
51
|
-
|
|
52
|
-
# update tracker
|
|
53
|
-
tracked_elements = tracker.update(detections, frame)
|
|
54
|
-
|
|
55
|
-
# update annotations object
|
|
56
|
-
for element in tracked_elements:
|
|
57
|
-
# element.bb - format of the bounding box is 2 points in 1 array - [x_left, y_top, x_right, y_bottom])
|
|
58
|
-
# tracking id of each element is in element.id. to keep the ids of the detected elements
|
|
59
|
-
left, top, bottom, right = element.bb # points bounding box annotation
|
|
60
|
-
builder.add(annotation_definition=dl.Box(top=top,
|
|
61
|
-
left=left,
|
|
62
|
-
right=right,
|
|
63
|
-
bottom=bottom,
|
|
64
|
-
label=element.label),
|
|
65
|
-
object_id=element.id,
|
|
66
|
-
frame_num=frame_num)
|
|
67
|
-
# increase frame number
|
|
68
|
-
frame_num += 1
|
|
69
|
-
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
70
|
-
break
|
|
71
|
-
|
|
72
|
-
##################################
|
|
73
|
-
# Upload annotations to platform #
|
|
74
|
-
##################################
|
|
75
|
-
item.annotations.upload(builder.to_platform())
|
|
1
|
+
def main():
|
|
2
|
+
"""
|
|
3
|
+
Detect and track (using model and some tracker) and upload annotation to platform
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
import cv2
|
|
7
|
+
import dtlpy as dl
|
|
8
|
+
|
|
9
|
+
##########################
|
|
10
|
+
# Load model and tracker #
|
|
11
|
+
##########################
|
|
12
|
+
# load your model for detection
|
|
13
|
+
model = load_some_model()
|
|
14
|
+
# load any tracking algorithm to track detected elements
|
|
15
|
+
tracker = load_some_tracker()
|
|
16
|
+
|
|
17
|
+
##############
|
|
18
|
+
# load video #
|
|
19
|
+
##############
|
|
20
|
+
video_path = 'some/video/path'
|
|
21
|
+
|
|
22
|
+
vid = cv2.VideoCapture(video_path)
|
|
23
|
+
if not vid.isOpened():
|
|
24
|
+
raise IOError("Couldn't open webcam or video")
|
|
25
|
+
video_fps = vid.get(cv2.CAP_PROP_FPS)
|
|
26
|
+
video_size = (int(vid.get(cv2.CAP_PROP_FRAME_WIDTH)),
|
|
27
|
+
int(vid.get(cv2.CAP_PROP_FRAME_HEIGHT)))
|
|
28
|
+
video_frames = int(vid.get(cv2.CAP_PROP_FRAME_COUNT))
|
|
29
|
+
|
|
30
|
+
############
|
|
31
|
+
# Platform #
|
|
32
|
+
###########
|
|
33
|
+
# get the item from platform
|
|
34
|
+
item = dl.projects.get(project_name='MyProject') \
|
|
35
|
+
.datasets.get(dataset_name='MyDataset') \
|
|
36
|
+
.items.get(filepath='/path/to/video.mp4')
|
|
37
|
+
builder = item.annotations.builder()
|
|
38
|
+
|
|
39
|
+
#######
|
|
40
|
+
# Run #
|
|
41
|
+
#######
|
|
42
|
+
frame_num = 0
|
|
43
|
+
while True:
|
|
44
|
+
# get new frame from video
|
|
45
|
+
return_value, frame = vid.read()
|
|
46
|
+
if not return_value:
|
|
47
|
+
break
|
|
48
|
+
|
|
49
|
+
# get detection
|
|
50
|
+
detections = model.predict(frame)
|
|
51
|
+
|
|
52
|
+
# update tracker
|
|
53
|
+
tracked_elements = tracker.update(detections, frame)
|
|
54
|
+
|
|
55
|
+
# update annotations object
|
|
56
|
+
for element in tracked_elements:
|
|
57
|
+
# element.bb - format of the bounding box is 2 points in 1 array - [x_left, y_top, x_right, y_bottom])
|
|
58
|
+
# tracking id of each element is in element.id. to keep the ids of the detected elements
|
|
59
|
+
left, top, bottom, right = element.bb # points bounding box annotation
|
|
60
|
+
builder.add(annotation_definition=dl.Box(top=top,
|
|
61
|
+
left=left,
|
|
62
|
+
right=right,
|
|
63
|
+
bottom=bottom,
|
|
64
|
+
label=element.label),
|
|
65
|
+
object_id=element.id,
|
|
66
|
+
frame_num=frame_num)
|
|
67
|
+
# increase frame number
|
|
68
|
+
frame_num += 1
|
|
69
|
+
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
70
|
+
break
|
|
71
|
+
|
|
72
|
+
##################################
|
|
73
|
+
# Upload annotations to platform #
|
|
74
|
+
##################################
|
|
75
|
+
item.annotations.upload(builder.to_platform())
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
import dtlpy as dl
|
|
3
|
-
|
|
4
|
-
project = dl.projects.get(project_name='Ocean')
|
|
5
|
-
dataset = project.datasets.get(dataset_name='Sharks')
|
|
6
|
-
|
|
7
|
-
converter = dl.Converter()
|
|
8
|
-
converter.convert_dataset(dataset=dataset, to_format='voc',
|
|
9
|
-
local_path='home/voc_annotations/sharks')
|
|
1
|
+
def main():
|
|
2
|
+
import dtlpy as dl
|
|
3
|
+
|
|
4
|
+
project = dl.projects.get(project_name='Ocean')
|
|
5
|
+
dataset = project.datasets.get(dataset_name='Sharks')
|
|
6
|
+
|
|
7
|
+
converter = dl.Converter()
|
|
8
|
+
converter.convert_dataset(dataset=dataset, to_format='voc',
|
|
9
|
+
local_path='home/voc_annotations/sharks')
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
import dtlpy as dl
|
|
3
|
-
|
|
4
|
-
project = dl.projects.get(project_name='Jungle')
|
|
5
|
-
dataset = project.datasets.get(dataset_name='Tigers')
|
|
6
|
-
|
|
7
|
-
converter = dl.Converter()
|
|
8
|
-
converter.convert_dataset(dataset=dataset, to_format='yolo',
|
|
9
|
-
local_path='home/yolo_annotations/tigers')
|
|
1
|
+
def main():
|
|
2
|
+
import dtlpy as dl
|
|
3
|
+
|
|
4
|
+
project = dl.projects.get(project_name='Jungle')
|
|
5
|
+
dataset = project.datasets.get(dataset_name='Tigers')
|
|
6
|
+
|
|
7
|
+
converter = dl.Converter()
|
|
8
|
+
converter.convert_dataset(dataset=dataset, to_format='yolo',
|
|
9
|
+
local_path='home/yolo_annotations/tigers')
|