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
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
"""
|
|
3
|
-
Convert annotation types
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
from PIL import Image
|
|
7
|
-
import matplotlib.pyplot as plt
|
|
8
|
-
import dtlpy as dl
|
|
9
|
-
|
|
10
|
-
# Get project and dataset
|
|
11
|
-
project = dl.projects.get(project_name='Toilet Paper')
|
|
12
|
-
dataset = project.datasets.get(dataset_name='Extra Soft')
|
|
13
|
-
|
|
14
|
-
# Get item and binaries
|
|
15
|
-
item = dataset.items.get(filepath='/with_puppies.jpg')
|
|
16
|
-
buffer = item.download(save_locally=False)
|
|
17
|
-
|
|
18
|
-
#######################################
|
|
19
|
-
# Convert mask annotations to polygon #
|
|
20
|
-
#######################################
|
|
21
|
-
img = Image.open(buffer)
|
|
22
|
-
builder = item.annotations.builder()
|
|
23
|
-
builder.add(dl.Polygon.from_segmentation(mask=mask, # binary mask of the annotation
|
|
24
|
-
label='roll'))
|
|
25
|
-
# plot the annotation
|
|
26
|
-
plt.figure()
|
|
27
|
-
plt.imshow(builder.show())
|
|
28
|
-
# plot annotation on the image
|
|
29
|
-
plt.figure()
|
|
30
|
-
plt.imshow(builder.show(image=img))
|
|
31
|
-
|
|
32
|
-
# upload annotation to platform
|
|
33
|
-
item.annotations.update(builder)
|
|
34
|
-
|
|
35
|
-
#######################################
|
|
36
|
-
# Convert polygon annotations to mask #
|
|
37
|
-
#######################################
|
|
38
|
-
img = Image.open(buffer)
|
|
39
|
-
builder = item.annotations.builder()
|
|
40
|
-
builder.add(dl.Segmentation.from_polygon(geo=[[x1, y1], [x2, y2], [x3, y3]], # list of coordinates
|
|
41
|
-
shape=img.size[::-1], # (h,w)
|
|
42
|
-
label='roll'))
|
|
43
|
-
# plot the annotation
|
|
44
|
-
plt.figure()
|
|
45
|
-
plt.imshow(builder.show())
|
|
46
|
-
# plot annotation on the image
|
|
47
|
-
plt.figure()
|
|
48
|
-
plt.imshow(builder.show(image=img))
|
|
49
|
-
|
|
50
|
-
# upload annotation to platform
|
|
51
|
-
item.annotations.update(builder)
|
|
1
|
+
def main():
|
|
2
|
+
"""
|
|
3
|
+
Convert annotation types
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
from PIL import Image
|
|
7
|
+
import matplotlib.pyplot as plt
|
|
8
|
+
import dtlpy as dl
|
|
9
|
+
|
|
10
|
+
# Get project and dataset
|
|
11
|
+
project = dl.projects.get(project_name='Toilet Paper')
|
|
12
|
+
dataset = project.datasets.get(dataset_name='Extra Soft')
|
|
13
|
+
|
|
14
|
+
# Get item and binaries
|
|
15
|
+
item = dataset.items.get(filepath='/with_puppies.jpg')
|
|
16
|
+
buffer = item.download(save_locally=False)
|
|
17
|
+
|
|
18
|
+
#######################################
|
|
19
|
+
# Convert mask annotations to polygon #
|
|
20
|
+
#######################################
|
|
21
|
+
img = Image.open(buffer)
|
|
22
|
+
builder = item.annotations.builder()
|
|
23
|
+
builder.add(dl.Polygon.from_segmentation(mask=mask, # binary mask of the annotation
|
|
24
|
+
label='roll'))
|
|
25
|
+
# plot the annotation
|
|
26
|
+
plt.figure()
|
|
27
|
+
plt.imshow(builder.show())
|
|
28
|
+
# plot annotation on the image
|
|
29
|
+
plt.figure()
|
|
30
|
+
plt.imshow(builder.show(image=img))
|
|
31
|
+
|
|
32
|
+
# upload annotation to platform
|
|
33
|
+
item.annotations.update(builder)
|
|
34
|
+
|
|
35
|
+
#######################################
|
|
36
|
+
# Convert polygon annotations to mask #
|
|
37
|
+
#######################################
|
|
38
|
+
img = Image.open(buffer)
|
|
39
|
+
builder = item.annotations.builder()
|
|
40
|
+
builder.add(dl.Segmentation.from_polygon(geo=[[x1, y1], [x2, y2], [x3, y3]], # list of coordinates
|
|
41
|
+
shape=img.size[::-1], # (h,w)
|
|
42
|
+
label='roll'))
|
|
43
|
+
# plot the annotation
|
|
44
|
+
plt.figure()
|
|
45
|
+
plt.imshow(builder.show())
|
|
46
|
+
# plot annotation on the image
|
|
47
|
+
plt.figure()
|
|
48
|
+
plt.imshow(builder.show(image=img))
|
|
49
|
+
|
|
50
|
+
# upload annotation to platform
|
|
51
|
+
item.annotations.update(builder)
|
dtlpy/examples/converter.py
CHANGED
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
import dtlpy as dl
|
|
3
|
-
|
|
4
|
-
dataset = dl.projects.get("project_name").datasets.get("dataset_name")
|
|
5
|
-
|
|
6
|
-
############################
|
|
7
|
-
# convert annotations list #
|
|
8
|
-
############################
|
|
9
|
-
|
|
10
|
-
# convert from dataloop to other formats #
|
|
11
|
-
##########################################
|
|
12
|
-
|
|
13
|
-
# known format #
|
|
14
|
-
|
|
15
|
-
item = dataset.items.get(item_id="item_id")
|
|
16
|
-
annotations = item.annotations.list()
|
|
17
|
-
converter = dl.Converter()
|
|
18
|
-
converted_annotations = converter.convert(annotations=annotations,
|
|
19
|
-
from_format='dataloop',
|
|
20
|
-
to_format='yolo')
|
|
21
|
-
|
|
22
|
-
# custom format #
|
|
23
|
-
|
|
24
|
-
# custom conversion function
|
|
25
|
-
# converts 1 dataloop annotation to custom format annotation
|
|
26
|
-
# returns converted annotation
|
|
27
|
-
def my_converter(annotation):
|
|
28
|
-
"""
|
|
29
|
-
:param annotation: dataloop Annotation object
|
|
30
|
-
:return: format of new annotation
|
|
31
|
-
"""
|
|
32
|
-
ann = {'label': annotation.label, 'type': annotation.type}
|
|
33
|
-
return ann
|
|
34
|
-
|
|
35
|
-
converted_annotations = converter.convert(annotations=annotations,
|
|
36
|
-
from_format='dataloop',
|
|
37
|
-
to_format='my_format',
|
|
38
|
-
conversion_func=my_converter)
|
|
39
|
-
|
|
40
|
-
# convert from other formats to dataloop format #
|
|
41
|
-
#################################################
|
|
42
|
-
|
|
43
|
-
# known format #
|
|
44
|
-
|
|
45
|
-
# load yolo annotations from file
|
|
46
|
-
annotations = list()
|
|
47
|
-
with open('annotations_filepath.txt', 'r') as f:
|
|
48
|
-
line = f.readline()
|
|
49
|
-
while line:
|
|
50
|
-
annotations.append(line)
|
|
51
|
-
line = f.readline()
|
|
52
|
-
|
|
53
|
-
# create converter object
|
|
54
|
-
converter = dl.Converter()
|
|
55
|
-
|
|
56
|
-
# convert
|
|
57
|
-
converted_annotations = converter.convert(annotations=annotations,
|
|
58
|
-
from_format='yolo',
|
|
59
|
-
to_format='dataloop')
|
|
60
|
-
|
|
61
|
-
# custom format #
|
|
62
|
-
|
|
63
|
-
# load yolo annotations from file
|
|
64
|
-
annotations = list()
|
|
65
|
-
with open('annotations_filepath.txt', 'r') as f:
|
|
66
|
-
line = f.readline()
|
|
67
|
-
while line:
|
|
68
|
-
annotations.append(line)
|
|
69
|
-
line = f.readline()
|
|
70
|
-
|
|
71
|
-
# create converter object
|
|
72
|
-
converter = dl.Converter()
|
|
73
|
-
|
|
74
|
-
# custom conversion function
|
|
75
|
-
# converts 1 custom annotation to dataloop annotation
|
|
76
|
-
# dataloop annotation
|
|
77
|
-
def my_converter(annotation):
|
|
78
|
-
"""
|
|
79
|
-
:param annotation: custom annotation format
|
|
80
|
-
:type annotation: dict
|
|
81
|
-
:return: dataloop Annotation object
|
|
82
|
-
"""
|
|
83
|
-
annotations = dl.Annotation.new(annotation_definition=dl.Box(top=annotation['top'],
|
|
84
|
-
bottom=annotation['bottom'],
|
|
85
|
-
left=annotation['left'],
|
|
86
|
-
right=annotation['right'],
|
|
87
|
-
label=annotation['label']))
|
|
88
|
-
|
|
89
|
-
return annotation
|
|
90
|
-
|
|
91
|
-
converted_annotations = converter.convert(annotations=annotations,
|
|
92
|
-
from_format='my_format',
|
|
93
|
-
to_format='dataloop',
|
|
94
|
-
conversion_func=my_converter)
|
|
95
|
-
|
|
96
|
-
###############################
|
|
97
|
-
# convert dataset annotations #
|
|
98
|
-
###############################
|
|
99
|
-
|
|
100
|
-
# known format #
|
|
101
|
-
################
|
|
102
|
-
|
|
103
|
-
converter = dl.Converter()
|
|
104
|
-
|
|
105
|
-
converter.save_to_format = 'json'
|
|
106
|
-
converter.convert_dataset(dataset=dataset,
|
|
107
|
-
to_format='coco',
|
|
108
|
-
local_path='some/local/path/to/download/converted/annotations')
|
|
109
|
-
|
|
110
|
-
# custom format #
|
|
111
|
-
#################
|
|
112
|
-
|
|
113
|
-
def my_converter(annotation):
|
|
114
|
-
"""
|
|
115
|
-
:param annotation: dataloop Annotation object
|
|
116
|
-
:return: format of new annotation
|
|
117
|
-
"""
|
|
118
|
-
ann = {'label': annotation.label, 'type': annotation.type}
|
|
119
|
-
return ann
|
|
120
|
-
|
|
121
|
-
converter = dl.Converter()
|
|
122
|
-
|
|
123
|
-
converter.save_to_format = 'json'
|
|
124
|
-
converter.convert_dataset(dataset=dataset,
|
|
125
|
-
to_format='my_format',
|
|
126
|
-
conversion_func=my_converter,
|
|
127
|
-
local_path='some/local/path/to/download/converted/annotations')
|
|
128
|
-
|
|
129
|
-
################
|
|
130
|
-
# save to file #
|
|
131
|
-
################
|
|
132
|
-
|
|
133
|
-
item = dataset.items.get(item_id="item_id")
|
|
134
|
-
annotations = item.annotations.list()
|
|
135
|
-
converter = dl.Converter()
|
|
136
|
-
converter.convert(annotations=annotations,
|
|
137
|
-
from_format='dataloop',
|
|
138
|
-
to_format='yolo')
|
|
139
|
-
|
|
140
|
-
# what file format to save to
|
|
141
|
-
converter.save_to_format = '.txt'
|
|
142
|
-
# save
|
|
143
|
-
converter.save_to_file(save_to='local_path', to_format='yolo')
|
|
1
|
+
def main():
|
|
2
|
+
import dtlpy as dl
|
|
3
|
+
|
|
4
|
+
dataset = dl.projects.get("project_name").datasets.get("dataset_name")
|
|
5
|
+
|
|
6
|
+
############################
|
|
7
|
+
# convert annotations list #
|
|
8
|
+
############################
|
|
9
|
+
|
|
10
|
+
# convert from dataloop to other formats #
|
|
11
|
+
##########################################
|
|
12
|
+
|
|
13
|
+
# known format #
|
|
14
|
+
|
|
15
|
+
item = dataset.items.get(item_id="item_id")
|
|
16
|
+
annotations = item.annotations.list()
|
|
17
|
+
converter = dl.Converter()
|
|
18
|
+
converted_annotations = converter.convert(annotations=annotations,
|
|
19
|
+
from_format='dataloop',
|
|
20
|
+
to_format='yolo')
|
|
21
|
+
|
|
22
|
+
# custom format #
|
|
23
|
+
|
|
24
|
+
# custom conversion function
|
|
25
|
+
# converts 1 dataloop annotation to custom format annotation
|
|
26
|
+
# returns converted annotation
|
|
27
|
+
def my_converter(annotation):
|
|
28
|
+
"""
|
|
29
|
+
:param annotation: dataloop Annotation object
|
|
30
|
+
:return: format of new annotation
|
|
31
|
+
"""
|
|
32
|
+
ann = {'label': annotation.label, 'type': annotation.type}
|
|
33
|
+
return ann
|
|
34
|
+
|
|
35
|
+
converted_annotations = converter.convert(annotations=annotations,
|
|
36
|
+
from_format='dataloop',
|
|
37
|
+
to_format='my_format',
|
|
38
|
+
conversion_func=my_converter)
|
|
39
|
+
|
|
40
|
+
# convert from other formats to dataloop format #
|
|
41
|
+
#################################################
|
|
42
|
+
|
|
43
|
+
# known format #
|
|
44
|
+
|
|
45
|
+
# load yolo annotations from file
|
|
46
|
+
annotations = list()
|
|
47
|
+
with open('annotations_filepath.txt', 'r') as f:
|
|
48
|
+
line = f.readline()
|
|
49
|
+
while line:
|
|
50
|
+
annotations.append(line)
|
|
51
|
+
line = f.readline()
|
|
52
|
+
|
|
53
|
+
# create converter object
|
|
54
|
+
converter = dl.Converter()
|
|
55
|
+
|
|
56
|
+
# convert
|
|
57
|
+
converted_annotations = converter.convert(annotations=annotations,
|
|
58
|
+
from_format='yolo',
|
|
59
|
+
to_format='dataloop')
|
|
60
|
+
|
|
61
|
+
# custom format #
|
|
62
|
+
|
|
63
|
+
# load yolo annotations from file
|
|
64
|
+
annotations = list()
|
|
65
|
+
with open('annotations_filepath.txt', 'r') as f:
|
|
66
|
+
line = f.readline()
|
|
67
|
+
while line:
|
|
68
|
+
annotations.append(line)
|
|
69
|
+
line = f.readline()
|
|
70
|
+
|
|
71
|
+
# create converter object
|
|
72
|
+
converter = dl.Converter()
|
|
73
|
+
|
|
74
|
+
# custom conversion function
|
|
75
|
+
# converts 1 custom annotation to dataloop annotation
|
|
76
|
+
# dataloop annotation
|
|
77
|
+
def my_converter(annotation):
|
|
78
|
+
"""
|
|
79
|
+
:param annotation: custom annotation format
|
|
80
|
+
:type annotation: dict
|
|
81
|
+
:return: dataloop Annotation object
|
|
82
|
+
"""
|
|
83
|
+
annotations = dl.Annotation.new(annotation_definition=dl.Box(top=annotation['top'],
|
|
84
|
+
bottom=annotation['bottom'],
|
|
85
|
+
left=annotation['left'],
|
|
86
|
+
right=annotation['right'],
|
|
87
|
+
label=annotation['label']))
|
|
88
|
+
|
|
89
|
+
return annotation
|
|
90
|
+
|
|
91
|
+
converted_annotations = converter.convert(annotations=annotations,
|
|
92
|
+
from_format='my_format',
|
|
93
|
+
to_format='dataloop',
|
|
94
|
+
conversion_func=my_converter)
|
|
95
|
+
|
|
96
|
+
###############################
|
|
97
|
+
# convert dataset annotations #
|
|
98
|
+
###############################
|
|
99
|
+
|
|
100
|
+
# known format #
|
|
101
|
+
################
|
|
102
|
+
|
|
103
|
+
converter = dl.Converter()
|
|
104
|
+
|
|
105
|
+
converter.save_to_format = 'json'
|
|
106
|
+
converter.convert_dataset(dataset=dataset,
|
|
107
|
+
to_format='coco',
|
|
108
|
+
local_path='some/local/path/to/download/converted/annotations')
|
|
109
|
+
|
|
110
|
+
# custom format #
|
|
111
|
+
#################
|
|
112
|
+
|
|
113
|
+
def my_converter(annotation):
|
|
114
|
+
"""
|
|
115
|
+
:param annotation: dataloop Annotation object
|
|
116
|
+
:return: format of new annotation
|
|
117
|
+
"""
|
|
118
|
+
ann = {'label': annotation.label, 'type': annotation.type}
|
|
119
|
+
return ann
|
|
120
|
+
|
|
121
|
+
converter = dl.Converter()
|
|
122
|
+
|
|
123
|
+
converter.save_to_format = 'json'
|
|
124
|
+
converter.convert_dataset(dataset=dataset,
|
|
125
|
+
to_format='my_format',
|
|
126
|
+
conversion_func=my_converter,
|
|
127
|
+
local_path='some/local/path/to/download/converted/annotations')
|
|
128
|
+
|
|
129
|
+
################
|
|
130
|
+
# save to file #
|
|
131
|
+
################
|
|
132
|
+
|
|
133
|
+
item = dataset.items.get(item_id="item_id")
|
|
134
|
+
annotations = item.annotations.list()
|
|
135
|
+
converter = dl.Converter()
|
|
136
|
+
converter.convert(annotations=annotations,
|
|
137
|
+
from_format='dataloop',
|
|
138
|
+
to_format='yolo')
|
|
139
|
+
|
|
140
|
+
# what file format to save to
|
|
141
|
+
converter.save_to_format = '.txt'
|
|
142
|
+
# save
|
|
143
|
+
converter.save_to_file(save_to='local_path', to_format='yolo')
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
def main(first_project_name, second_project_name, first_dataset_name, second_dataset_name, first_remote_filepath, second_remote_filepath):
|
|
2
|
-
"""
|
|
3
|
-
Copy annotations between items
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
import dtlpy as dl
|
|
7
|
-
|
|
8
|
-
# FROM get the annotations from item
|
|
9
|
-
project = dl.projects.get(project_name=first_project_name)
|
|
10
|
-
dataset = project.datasets.get(dataset_name=first_dataset_name)
|
|
11
|
-
item = dataset.items.get(filepath=first_remote_filepath)
|
|
12
|
-
|
|
13
|
-
# get annotations
|
|
14
|
-
annotations = item.annotations.list()
|
|
15
|
-
|
|
16
|
-
# TO post annotations to other item
|
|
17
|
-
project = dl.projects.get(project_name=second_project_name)
|
|
18
|
-
dataset = project.datasets.get(dataset_name=second_dataset_name)
|
|
19
|
-
item = dataset.items.get(filepath=second_remote_filepath)
|
|
20
|
-
|
|
21
|
-
# post
|
|
22
|
-
item.annotations.upload(annotations=annotations)
|
|
1
|
+
def main(first_project_name, second_project_name, first_dataset_name, second_dataset_name, first_remote_filepath, second_remote_filepath):
|
|
2
|
+
"""
|
|
3
|
+
Copy annotations between items
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
import dtlpy as dl
|
|
7
|
+
|
|
8
|
+
# FROM get the annotations from item
|
|
9
|
+
project = dl.projects.get(project_name=first_project_name)
|
|
10
|
+
dataset = project.datasets.get(dataset_name=first_dataset_name)
|
|
11
|
+
item = dataset.items.get(filepath=first_remote_filepath)
|
|
12
|
+
|
|
13
|
+
# get annotations
|
|
14
|
+
annotations = item.annotations.list()
|
|
15
|
+
|
|
16
|
+
# TO post annotations to other item
|
|
17
|
+
project = dl.projects.get(project_name=second_project_name)
|
|
18
|
+
dataset = project.datasets.get(dataset_name=second_dataset_name)
|
|
19
|
+
item = dataset.items.get(filepath=second_remote_filepath)
|
|
20
|
+
|
|
21
|
+
# post
|
|
22
|
+
item.annotations.upload(annotations=annotations)
|
dtlpy/examples/copy_folder.py
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
def main(first_project_name, second_project_name, first_dataset_name, second_dataset_name):
|
|
2
|
-
"""
|
|
3
|
-
Copy folder from project/dataset/folder
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
import dtlpy as dl
|
|
7
|
-
|
|
8
|
-
# Get source project and dataset
|
|
9
|
-
project = dl.projects.get(project_name=first_project_name)
|
|
10
|
-
dataset_from = project.datasets.get(dataset_name=first_dataset_name)
|
|
11
|
-
# filter to get all files of a specific folder
|
|
12
|
-
filters = dl.Filters()
|
|
13
|
-
filters.add(field='type', values='file') # get only files
|
|
14
|
-
filters.add(field='filename', values='/source_folder/**') # get all items in folder (recursive)
|
|
15
|
-
pages = dataset_from.items.list(filters=filters)
|
|
16
|
-
|
|
17
|
-
# Get destination project and annotations
|
|
18
|
-
project = dl.projects.get(project_name=second_project_name)
|
|
19
|
-
dataset_to = project.datasets.get(dataset_name=second_dataset_name)
|
|
20
|
-
|
|
21
|
-
# go over all projects and copy file from src to dst
|
|
22
|
-
for page in pages:
|
|
23
|
-
for item in page:
|
|
24
|
-
# download item (without save to disk)
|
|
25
|
-
buffer = item.download(save_locally=False)
|
|
26
|
-
# give the items name to the buffer
|
|
27
|
-
buffer.name = item.name
|
|
28
|
-
# upload item
|
|
29
|
-
new_item = dataset_to.items.upload(local_path=buffer,
|
|
30
|
-
remote_path='/destination_folder')
|
|
31
|
-
print(new_item.filename)
|
|
1
|
+
def main(first_project_name, second_project_name, first_dataset_name, second_dataset_name):
|
|
2
|
+
"""
|
|
3
|
+
Copy folder from project/dataset/folder
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
import dtlpy as dl
|
|
7
|
+
|
|
8
|
+
# Get source project and dataset
|
|
9
|
+
project = dl.projects.get(project_name=first_project_name)
|
|
10
|
+
dataset_from = project.datasets.get(dataset_name=first_dataset_name)
|
|
11
|
+
# filter to get all files of a specific folder
|
|
12
|
+
filters = dl.Filters()
|
|
13
|
+
filters.add(field='type', values='file') # get only files
|
|
14
|
+
filters.add(field='filename', values='/source_folder/**') # get all items in folder (recursive)
|
|
15
|
+
pages = dataset_from.items.list(filters=filters)
|
|
16
|
+
|
|
17
|
+
# Get destination project and annotations
|
|
18
|
+
project = dl.projects.get(project_name=second_project_name)
|
|
19
|
+
dataset_to = project.datasets.get(dataset_name=second_dataset_name)
|
|
20
|
+
|
|
21
|
+
# go over all projects and copy file from src to dst
|
|
22
|
+
for page in pages:
|
|
23
|
+
for item in page:
|
|
24
|
+
# download item (without save to disk)
|
|
25
|
+
buffer = item.download(save_locally=False)
|
|
26
|
+
# give the items name to the buffer
|
|
27
|
+
buffer.name = item.name
|
|
28
|
+
# upload item
|
|
29
|
+
new_item = dataset_to.items.upload(local_path=buffer,
|
|
30
|
+
remote_path='/destination_folder')
|
|
31
|
+
print(new_item.filename)
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
import dtlpy as dl
|
|
3
|
-
import numpy as np
|
|
4
|
-
import matplotlib.pyplot as plt
|
|
5
|
-
|
|
6
|
-
# Get project and dataset
|
|
7
|
-
project = dl.projects.get(project_name='Food')
|
|
8
|
-
dataset = project.datasets.get(dataset_name='BeansDataset')
|
|
9
|
-
|
|
10
|
-
# get item from platform
|
|
11
|
-
item = dataset.items.get(filepath='/image.jpg')
|
|
12
|
-
|
|
13
|
-
# Create a builder instance
|
|
14
|
-
builder = item.annotations.builder()
|
|
15
|
-
|
|
16
|
-
# add annotations of type box and label person
|
|
17
|
-
builder.add(annotation_definition=dl.Box(top=10,
|
|
18
|
-
left=10,
|
|
19
|
-
bottom=100,
|
|
20
|
-
right=100,
|
|
21
|
-
label='black_bean'))
|
|
22
|
-
|
|
23
|
-
# add annotations of type point with attribute
|
|
24
|
-
builder.add(annotation_definition=dl.Point(x=80,
|
|
25
|
-
y=80,
|
|
26
|
-
label='pea'),
|
|
27
|
-
attribute=['large'])
|
|
28
|
-
|
|
29
|
-
# add annotations of type polygon
|
|
30
|
-
builder.add(annotation_definition=dl.Polyline(geo=[[80, 40],
|
|
31
|
-
[100, 120],
|
|
32
|
-
[110, 130]],
|
|
33
|
-
label='beans_can'))
|
|
34
|
-
|
|
35
|
-
# create a mask
|
|
36
|
-
mask = np.zeros(shape=(item.height, item.width), dtype=np.uint8)
|
|
37
|
-
# mark some part in the middle
|
|
38
|
-
mask[50:100, 200:250] = 1
|
|
39
|
-
# add annotations of type segmentation
|
|
40
|
-
builder.add(annotation_definition=dl.Segmentation(geo=mask,
|
|
41
|
-
label='tomato_sauce'))
|
|
42
|
-
|
|
43
|
-
# plot the all of the annotations you created
|
|
44
|
-
plt.figure()
|
|
45
|
-
plt.imshow(builder.show())
|
|
46
|
-
for annotation in builder:
|
|
47
|
-
plt.figure()
|
|
48
|
-
plt.imshow(annotation.show())
|
|
49
|
-
plt.title(annotation.label)
|
|
50
|
-
# upload annotations to the item
|
|
51
|
-
item.annotations.upload(builder)
|
|
1
|
+
def main():
|
|
2
|
+
import dtlpy as dl
|
|
3
|
+
import numpy as np
|
|
4
|
+
import matplotlib.pyplot as plt
|
|
5
|
+
|
|
6
|
+
# Get project and dataset
|
|
7
|
+
project = dl.projects.get(project_name='Food')
|
|
8
|
+
dataset = project.datasets.get(dataset_name='BeansDataset')
|
|
9
|
+
|
|
10
|
+
# get item from platform
|
|
11
|
+
item = dataset.items.get(filepath='/image.jpg')
|
|
12
|
+
|
|
13
|
+
# Create a builder instance
|
|
14
|
+
builder = item.annotations.builder()
|
|
15
|
+
|
|
16
|
+
# add annotations of type box and label person
|
|
17
|
+
builder.add(annotation_definition=dl.Box(top=10,
|
|
18
|
+
left=10,
|
|
19
|
+
bottom=100,
|
|
20
|
+
right=100,
|
|
21
|
+
label='black_bean'))
|
|
22
|
+
|
|
23
|
+
# add annotations of type point with attribute
|
|
24
|
+
builder.add(annotation_definition=dl.Point(x=80,
|
|
25
|
+
y=80,
|
|
26
|
+
label='pea'),
|
|
27
|
+
attribute=['large'])
|
|
28
|
+
|
|
29
|
+
# add annotations of type polygon
|
|
30
|
+
builder.add(annotation_definition=dl.Polyline(geo=[[80, 40],
|
|
31
|
+
[100, 120],
|
|
32
|
+
[110, 130]],
|
|
33
|
+
label='beans_can'))
|
|
34
|
+
|
|
35
|
+
# create a mask
|
|
36
|
+
mask = np.zeros(shape=(item.height, item.width), dtype=np.uint8)
|
|
37
|
+
# mark some part in the middle
|
|
38
|
+
mask[50:100, 200:250] = 1
|
|
39
|
+
# add annotations of type segmentation
|
|
40
|
+
builder.add(annotation_definition=dl.Segmentation(geo=mask,
|
|
41
|
+
label='tomato_sauce'))
|
|
42
|
+
|
|
43
|
+
# plot the all of the annotations you created
|
|
44
|
+
plt.figure()
|
|
45
|
+
plt.imshow(builder.show())
|
|
46
|
+
for annotation in builder:
|
|
47
|
+
plt.figure()
|
|
48
|
+
plt.imshow(annotation.show())
|
|
49
|
+
plt.title(annotation.label)
|
|
50
|
+
# upload annotations to the item
|
|
51
|
+
item.annotations.upload(builder)
|