dtlpy 1.114.17__py3-none-any.whl → 1.116.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 -311
- 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 -296
- dtlpy/entities/collection.py +38 -38
- dtlpy/entities/command.py +169 -169
- dtlpy/entities/compute.py +449 -442
- dtlpy/entities/dataset.py +1299 -1285
- dtlpy/entities/directory_tree.py +44 -44
- dtlpy/entities/dpk.py +470 -470
- dtlpy/entities/driver.py +235 -223
- dtlpy/entities/execution.py +397 -397
- dtlpy/entities/feature.py +124 -124
- dtlpy/entities/feature_set.py +145 -145
- dtlpy/entities/filters.py +798 -645
- dtlpy/entities/gis_item.py +107 -107
- dtlpy/entities/integration.py +184 -184
- dtlpy/entities/item.py +959 -953
- 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 -499
- dtlpy/entities/recipe.py +301 -301
- dtlpy/entities/reflect_dict.py +102 -102
- dtlpy/entities/resource_execution.py +138 -138
- dtlpy/entities/service.py +963 -958
- 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 +1257 -1086
- 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 -158
- dtlpy/repositories/compositions.py +61 -61
- dtlpy/repositories/computes.py +439 -435
- dtlpy/repositories/datasets.py +1504 -1291
- dtlpy/repositories/downloader.py +976 -903
- dtlpy/repositories/dpks.py +433 -433
- dtlpy/repositories/drivers.py +482 -470
- dtlpy/repositories/executions.py +815 -817
- dtlpy/repositories/feature_sets.py +226 -226
- dtlpy/repositories/features.py +255 -238
- dtlpy/repositories/integrations.py +484 -484
- dtlpy/repositories/items.py +912 -909
- dtlpy/repositories/messages.py +94 -94
- dtlpy/repositories/models.py +1000 -988
- 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 +419 -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 -651
- dtlpy/repositories/webhooks.py +249 -249
- dtlpy/services/__init__.py +22 -22
- dtlpy/services/aihttp_retry.py +131 -131
- dtlpy/services/api_client.py +1785 -1782
- 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.114.17.data → dtlpy-1.116.6.data}/scripts/dlp +1 -1
- dtlpy-1.116.6.data/scripts/dlp.bat +2 -0
- {dtlpy-1.114.17.data → dtlpy-1.116.6.data}/scripts/dlp.py +128 -128
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/METADATA +186 -183
- dtlpy-1.116.6.dist-info/RECORD +239 -0
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/WHEEL +1 -1
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/licenses/LICENSE +200 -200
- tests/features/environment.py +551 -551
- dtlpy/assets/__pycache__/__init__.cpython-310.pyc +0 -0
- dtlpy-1.114.17.data/scripts/dlp.bat +0 -2
- dtlpy-1.114.17.dist-info/RECORD +0 -240
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/top_level.txt +0 -0
dtlpy/examples/triggers.py
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
import dtlpy as dl
|
|
3
|
-
|
|
4
|
-
project = dl.projects.get(project_name='project_name')
|
|
5
|
-
|
|
6
|
-
##################
|
|
7
|
-
# create trigger #
|
|
8
|
-
##################
|
|
9
|
-
# create Item trigger
|
|
10
|
-
# that will trigger service with given id
|
|
11
|
-
# when item is created
|
|
12
|
-
trigger = project.triggers.create(service_ids=['some_service_id'],
|
|
13
|
-
resource=dl.FiltersResource.ITEM,
|
|
14
|
-
actions=dl.TriggerAction.CREATED,
|
|
15
|
-
active=True)
|
|
16
|
-
|
|
17
|
-
# create Annotation trigger
|
|
18
|
-
# that will trigger service with given id
|
|
19
|
-
# when Annotation is deleted
|
|
20
|
-
trigger = project.triggers.create(service_ids=['some_service_id'],
|
|
21
|
-
resource=dl.FiltersResource.ANNOTATION,
|
|
22
|
-
actions=dl.TriggerAction.DELETED,
|
|
23
|
-
active=True)
|
|
24
|
-
|
|
25
|
-
##################
|
|
26
|
-
# update trigger #
|
|
27
|
-
##################
|
|
28
|
-
# if we want trigger to be triggered on Created
|
|
29
|
-
trigger.actions = ['Annotation']
|
|
30
|
-
trigger.update()
|
|
31
|
-
|
|
32
|
-
# update trigger filters
|
|
33
|
-
# to work only on specific items
|
|
34
|
-
# trigger will be triggered only on
|
|
35
|
-
# items with string: dog in their name
|
|
36
|
-
filters = dl.Filters()
|
|
37
|
-
filters.add(field='filename', values='*dog*')
|
|
38
|
-
trigger.filters = filters
|
|
39
|
-
trigger.update()
|
|
40
|
-
|
|
41
|
-
##################
|
|
42
|
-
# delete trigger #
|
|
43
|
-
##################
|
|
44
|
-
trigger.delete()
|
|
45
|
-
|
|
46
|
-
############################
|
|
47
|
-
# list of project triggers #
|
|
48
|
-
############################
|
|
49
|
-
project.triggers.list()
|
|
1
|
+
def main():
|
|
2
|
+
import dtlpy as dl
|
|
3
|
+
|
|
4
|
+
project = dl.projects.get(project_name='project_name')
|
|
5
|
+
|
|
6
|
+
##################
|
|
7
|
+
# create trigger #
|
|
8
|
+
##################
|
|
9
|
+
# create Item trigger
|
|
10
|
+
# that will trigger service with given id
|
|
11
|
+
# when item is created
|
|
12
|
+
trigger = project.triggers.create(service_ids=['some_service_id'],
|
|
13
|
+
resource=dl.FiltersResource.ITEM,
|
|
14
|
+
actions=dl.TriggerAction.CREATED,
|
|
15
|
+
active=True)
|
|
16
|
+
|
|
17
|
+
# create Annotation trigger
|
|
18
|
+
# that will trigger service with given id
|
|
19
|
+
# when Annotation is deleted
|
|
20
|
+
trigger = project.triggers.create(service_ids=['some_service_id'],
|
|
21
|
+
resource=dl.FiltersResource.ANNOTATION,
|
|
22
|
+
actions=dl.TriggerAction.DELETED,
|
|
23
|
+
active=True)
|
|
24
|
+
|
|
25
|
+
##################
|
|
26
|
+
# update trigger #
|
|
27
|
+
##################
|
|
28
|
+
# if we want trigger to be triggered on Created
|
|
29
|
+
trigger.actions = ['Annotation']
|
|
30
|
+
trigger.update()
|
|
31
|
+
|
|
32
|
+
# update trigger filters
|
|
33
|
+
# to work only on specific items
|
|
34
|
+
# trigger will be triggered only on
|
|
35
|
+
# items with string: dog in their name
|
|
36
|
+
filters = dl.Filters()
|
|
37
|
+
filters.add(field='filename', values='*dog*')
|
|
38
|
+
trigger.filters = filters
|
|
39
|
+
trigger.update()
|
|
40
|
+
|
|
41
|
+
##################
|
|
42
|
+
# delete trigger #
|
|
43
|
+
##################
|
|
44
|
+
trigger.delete()
|
|
45
|
+
|
|
46
|
+
############################
|
|
47
|
+
# list of project triggers #
|
|
48
|
+
############################
|
|
49
|
+
project.triggers.list()
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
"""
|
|
3
|
-
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
import dtlpy as dl
|
|
7
|
-
|
|
8
|
-
# Get project and dataset
|
|
9
|
-
project = dl.projects.get(project_name='Curling')
|
|
10
|
-
dataset = project.datasets.get(dataset_name='Practice')
|
|
11
|
-
|
|
12
|
-
# upload specific files
|
|
13
|
-
dataset.items.upload(local_path=['/home/project/images/John Morris.jpg',
|
|
14
|
-
'/home/project/images/John Benton.jpg',
|
|
15
|
-
'/home/project/images/Liu Jinli.jpg'],
|
|
16
|
-
remote_path='/first_batch')
|
|
17
|
-
|
|
18
|
-
# upload all files in a folder
|
|
19
|
-
dataset.items.upload(local_path='/home/project/images',
|
|
20
|
-
remote_path='/first_batch')
|
|
1
|
+
def main():
|
|
2
|
+
"""
|
|
3
|
+
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
import dtlpy as dl
|
|
7
|
+
|
|
8
|
+
# Get project and dataset
|
|
9
|
+
project = dl.projects.get(project_name='Curling')
|
|
10
|
+
dataset = project.datasets.get(dataset_name='Practice')
|
|
11
|
+
|
|
12
|
+
# upload specific files
|
|
13
|
+
dataset.items.upload(local_path=['/home/project/images/John Morris.jpg',
|
|
14
|
+
'/home/project/images/John Benton.jpg',
|
|
15
|
+
'/home/project/images/Liu Jinli.jpg'],
|
|
16
|
+
remote_path='/first_batch')
|
|
17
|
+
|
|
18
|
+
# upload all files in a folder
|
|
19
|
+
dataset.items.upload(local_path='/home/project/images',
|
|
20
|
+
remote_path='/first_batch')
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
"""
|
|
3
|
-
This is an example how to upload files and annotations to Dataloop platform.
|
|
4
|
-
Image folder contains the images to upload.
|
|
5
|
-
Annotations folder contains json file of the annotations. Same name as the image.
|
|
6
|
-
We read the images one by one and create the Dataloop annotations using the annotation builder.
|
|
7
|
-
Finally, we upload both the image and the matching annotations
|
|
8
|
-
|
|
9
|
-
:return:
|
|
10
|
-
"""
|
|
11
|
-
import json
|
|
12
|
-
import os
|
|
13
|
-
import dtlpy as dl
|
|
14
|
-
|
|
15
|
-
# Get project and dataset
|
|
16
|
-
project = dl.projects.get(project_name='Yachts')
|
|
17
|
-
dataset = project.datasets.get(dataset_name='Open Seas')
|
|
18
|
-
|
|
19
|
-
images_folder = '/home/local/images'
|
|
20
|
-
annotations_folder = '/home/local/annotations'
|
|
21
|
-
|
|
22
|
-
for img_filename in os.listdir(images_folder):
|
|
23
|
-
# get the matching annotations json
|
|
24
|
-
_, ext = os.path.splitext(img_filename)
|
|
25
|
-
ann_filename = os.path.join(annotations_folder, img_filename.replace(ext, '.json'))
|
|
26
|
-
img_filename = os.path.join(images_folder, img_filename)
|
|
27
|
-
|
|
28
|
-
# Upload or get annotations from platform (if already exists)
|
|
29
|
-
item = dataset.items.upload(local_path=img_filename,
|
|
30
|
-
remote_path='/in_storm',
|
|
31
|
-
overwrite=False)
|
|
32
|
-
assert isinstance(item, dl.Item)
|
|
33
|
-
|
|
34
|
-
# read annotations from file
|
|
35
|
-
with open(ann_filename, 'r') as f:
|
|
36
|
-
annotations = json.load(f)
|
|
37
|
-
|
|
38
|
-
# create a Builder instance and add all annotations to it
|
|
39
|
-
builder = item.annotations.builder()
|
|
40
|
-
for annotation in annotations:
|
|
41
|
-
# line format if 4 points of bbox
|
|
42
|
-
# this is where you need to update according to your annotation format
|
|
43
|
-
label_id = annotation['label']
|
|
44
|
-
left = annotation['left']
|
|
45
|
-
top = annotation['top']
|
|
46
|
-
right = annotation['right']
|
|
47
|
-
bottom = annotation['bottom']
|
|
48
|
-
builder.add(annotation_definition=dl.Box(top=top,
|
|
49
|
-
left=left,
|
|
50
|
-
bottom=bottom,
|
|
51
|
-
right=right,
|
|
52
|
-
label=str(label_id)))
|
|
53
|
-
|
|
54
|
-
# upload annotations
|
|
55
|
-
item.annotations.upload(builder)
|
|
1
|
+
def main():
|
|
2
|
+
"""
|
|
3
|
+
This is an example how to upload files and annotations to Dataloop platform.
|
|
4
|
+
Image folder contains the images to upload.
|
|
5
|
+
Annotations folder contains json file of the annotations. Same name as the image.
|
|
6
|
+
We read the images one by one and create the Dataloop annotations using the annotation builder.
|
|
7
|
+
Finally, we upload both the image and the matching annotations
|
|
8
|
+
|
|
9
|
+
:return:
|
|
10
|
+
"""
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
import dtlpy as dl
|
|
14
|
+
|
|
15
|
+
# Get project and dataset
|
|
16
|
+
project = dl.projects.get(project_name='Yachts')
|
|
17
|
+
dataset = project.datasets.get(dataset_name='Open Seas')
|
|
18
|
+
|
|
19
|
+
images_folder = '/home/local/images'
|
|
20
|
+
annotations_folder = '/home/local/annotations'
|
|
21
|
+
|
|
22
|
+
for img_filename in os.listdir(images_folder):
|
|
23
|
+
# get the matching annotations json
|
|
24
|
+
_, ext = os.path.splitext(img_filename)
|
|
25
|
+
ann_filename = os.path.join(annotations_folder, img_filename.replace(ext, '.json'))
|
|
26
|
+
img_filename = os.path.join(images_folder, img_filename)
|
|
27
|
+
|
|
28
|
+
# Upload or get annotations from platform (if already exists)
|
|
29
|
+
item = dataset.items.upload(local_path=img_filename,
|
|
30
|
+
remote_path='/in_storm',
|
|
31
|
+
overwrite=False)
|
|
32
|
+
assert isinstance(item, dl.Item)
|
|
33
|
+
|
|
34
|
+
# read annotations from file
|
|
35
|
+
with open(ann_filename, 'r') as f:
|
|
36
|
+
annotations = json.load(f)
|
|
37
|
+
|
|
38
|
+
# create a Builder instance and add all annotations to it
|
|
39
|
+
builder = item.annotations.builder()
|
|
40
|
+
for annotation in annotations:
|
|
41
|
+
# line format if 4 points of bbox
|
|
42
|
+
# this is where you need to update according to your annotation format
|
|
43
|
+
label_id = annotation['label']
|
|
44
|
+
left = annotation['left']
|
|
45
|
+
top = annotation['top']
|
|
46
|
+
right = annotation['right']
|
|
47
|
+
bottom = annotation['bottom']
|
|
48
|
+
builder.add(annotation_definition=dl.Box(top=top,
|
|
49
|
+
left=left,
|
|
50
|
+
bottom=bottom,
|
|
51
|
+
right=right,
|
|
52
|
+
label=str(label_id)))
|
|
53
|
+
|
|
54
|
+
# upload annotations
|
|
55
|
+
item.annotations.upload(builder)
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
def main(project_name, dataset_name):
|
|
2
|
-
import traceback
|
|
3
|
-
import random
|
|
4
|
-
import string
|
|
5
|
-
import dtlpy as dl
|
|
6
|
-
from concurrent.futures import ThreadPoolExecutor
|
|
7
|
-
|
|
8
|
-
def upload_single(w_url, w_metadata):
|
|
9
|
-
try:
|
|
10
|
-
item = dataset.items.upload(local_path=dl.UrlLink(
|
|
11
|
-
ref=w_url,
|
|
12
|
-
name='.{}.json'.format(
|
|
13
|
-
''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(10)))),
|
|
14
|
-
remote_path='/cats',
|
|
15
|
-
item_metadata=w_metadata)
|
|
16
|
-
return item.id
|
|
17
|
-
except:
|
|
18
|
-
print(traceback.format_exc())
|
|
19
|
-
return None
|
|
20
|
-
|
|
21
|
-
primary_url = 'https://images.unsplash.com/photo-1518020382113-a7e8fc38eac9'
|
|
22
|
-
secondary_urls = [
|
|
23
|
-
'https://images.unsplash.com/photo-1543852786-1cf6624b9987',
|
|
24
|
-
'https://images.unsplash.com/photo-1561948955-570b270e7c36'
|
|
25
|
-
]
|
|
26
|
-
project = dl.projects.get(project_name=project_name)
|
|
27
|
-
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
28
|
-
|
|
29
|
-
pool = ThreadPoolExecutor(max_workers=32)
|
|
30
|
-
jobs = list()
|
|
31
|
-
for i_url, url in enumerate(secondary_urls):
|
|
32
|
-
jobs.append(pool.submit(upload_single, **{'w_url': url,
|
|
33
|
-
'w_metadata': {'user': {'num': i_url}}}))
|
|
34
|
-
pool.shutdown()
|
|
35
|
-
secondary_ids = [j.result() for j in jobs]
|
|
36
|
-
modalities = list()
|
|
37
|
-
for i_secondary_id, secondary_id in enumerate(secondary_ids):
|
|
38
|
-
modalities.append(dl.Modality(modality_type=dl.ModalityTypeEnum.OVERLAY,
|
|
39
|
-
ref=secondary_id,
|
|
40
|
-
name='cat_num:{}'.format(i_secondary_id)).to_json())
|
|
41
|
-
|
|
42
|
-
primary_item = dataset.items.upload(local_path=dl.UrlLink(ref=primary_url),
|
|
43
|
-
item_metadata={'system': {'modalities': modalities}})
|
|
1
|
+
def main(project_name, dataset_name):
|
|
2
|
+
import traceback
|
|
3
|
+
import random
|
|
4
|
+
import string
|
|
5
|
+
import dtlpy as dl
|
|
6
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
7
|
+
|
|
8
|
+
def upload_single(w_url, w_metadata):
|
|
9
|
+
try:
|
|
10
|
+
item = dataset.items.upload(local_path=dl.UrlLink(
|
|
11
|
+
ref=w_url,
|
|
12
|
+
name='.{}.json'.format(
|
|
13
|
+
''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(10)))),
|
|
14
|
+
remote_path='/cats',
|
|
15
|
+
item_metadata=w_metadata)
|
|
16
|
+
return item.id
|
|
17
|
+
except:
|
|
18
|
+
print(traceback.format_exc())
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
primary_url = 'https://images.unsplash.com/photo-1518020382113-a7e8fc38eac9'
|
|
22
|
+
secondary_urls = [
|
|
23
|
+
'https://images.unsplash.com/photo-1543852786-1cf6624b9987',
|
|
24
|
+
'https://images.unsplash.com/photo-1561948955-570b270e7c36'
|
|
25
|
+
]
|
|
26
|
+
project = dl.projects.get(project_name=project_name)
|
|
27
|
+
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
28
|
+
|
|
29
|
+
pool = ThreadPoolExecutor(max_workers=32)
|
|
30
|
+
jobs = list()
|
|
31
|
+
for i_url, url in enumerate(secondary_urls):
|
|
32
|
+
jobs.append(pool.submit(upload_single, **{'w_url': url,
|
|
33
|
+
'w_metadata': {'user': {'num': i_url}}}))
|
|
34
|
+
pool.shutdown()
|
|
35
|
+
secondary_ids = [j.result() for j in jobs]
|
|
36
|
+
modalities = list()
|
|
37
|
+
for i_secondary_id, secondary_id in enumerate(secondary_ids):
|
|
38
|
+
modalities.append(dl.Modality(modality_type=dl.ModalityTypeEnum.OVERLAY,
|
|
39
|
+
ref=secondary_id,
|
|
40
|
+
name='cat_num:{}'.format(i_secondary_id)).to_json())
|
|
41
|
+
|
|
42
|
+
primary_item = dataset.items.upload(local_path=dl.UrlLink(ref=primary_url),
|
|
43
|
+
item_metadata={'system': {'modalities': modalities}})
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def main():
|
|
7
|
-
from PIL import Image
|
|
8
|
-
import numpy as np
|
|
9
|
-
import dtlpy as dl
|
|
10
|
-
|
|
11
|
-
# Get project and dataset
|
|
12
|
-
project = dl.projects.get(project_name='Presidents')
|
|
13
|
-
dataset = project.datasets.get(dataset_name='William Henry Harrison')
|
|
14
|
-
|
|
15
|
-
# image filepath
|
|
16
|
-
image_filepath = '/home/images/with_family.png'
|
|
17
|
-
# annotations filepath - RGB with color for each label
|
|
18
|
-
annotations_filepath = '/home/masks/with_family.png'
|
|
19
|
-
|
|
20
|
-
# upload item to root directory
|
|
21
|
-
item = dataset.items.upload(local_path=image_filepath,
|
|
22
|
-
remote_path='/')
|
|
23
|
-
|
|
24
|
-
# read mask from file
|
|
25
|
-
mask = np.array(Image.open(annotations_filepath))
|
|
26
|
-
|
|
27
|
-
# get unique color (labels)
|
|
28
|
-
unique_colors = np.unique(mask.reshape(-1, mask.shape[2]), axis=0)
|
|
29
|
-
|
|
30
|
-
# init dataloop annotations builder
|
|
31
|
-
builder = item.annotations.builder()
|
|
32
|
-
# for each label - create a dataloop mask annotation
|
|
33
|
-
for i, color in enumerate(unique_colors):
|
|
34
|
-
print(color)
|
|
35
|
-
if i == 0:
|
|
36
|
-
# ignore background
|
|
37
|
-
continue
|
|
38
|
-
# get mask of same color
|
|
39
|
-
class_mask = np.all(color == mask, axis=2)
|
|
40
|
-
# add annotation to builder
|
|
41
|
-
builder.add(annotation_definition=dl.Segmentation(geo=class_mask,
|
|
42
|
-
label=str(i)))
|
|
43
|
-
# upload all annotations
|
|
44
|
-
item.annotations.upload(builder)
|
|
1
|
+
"""
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main():
|
|
7
|
+
from PIL import Image
|
|
8
|
+
import numpy as np
|
|
9
|
+
import dtlpy as dl
|
|
10
|
+
|
|
11
|
+
# Get project and dataset
|
|
12
|
+
project = dl.projects.get(project_name='Presidents')
|
|
13
|
+
dataset = project.datasets.get(dataset_name='William Henry Harrison')
|
|
14
|
+
|
|
15
|
+
# image filepath
|
|
16
|
+
image_filepath = '/home/images/with_family.png'
|
|
17
|
+
# annotations filepath - RGB with color for each label
|
|
18
|
+
annotations_filepath = '/home/masks/with_family.png'
|
|
19
|
+
|
|
20
|
+
# upload item to root directory
|
|
21
|
+
item = dataset.items.upload(local_path=image_filepath,
|
|
22
|
+
remote_path='/')
|
|
23
|
+
|
|
24
|
+
# read mask from file
|
|
25
|
+
mask = np.array(Image.open(annotations_filepath))
|
|
26
|
+
|
|
27
|
+
# get unique color (labels)
|
|
28
|
+
unique_colors = np.unique(mask.reshape(-1, mask.shape[2]), axis=0)
|
|
29
|
+
|
|
30
|
+
# init dataloop annotations builder
|
|
31
|
+
builder = item.annotations.builder()
|
|
32
|
+
# for each label - create a dataloop mask annotation
|
|
33
|
+
for i, color in enumerate(unique_colors):
|
|
34
|
+
print(color)
|
|
35
|
+
if i == 0:
|
|
36
|
+
# ignore background
|
|
37
|
+
continue
|
|
38
|
+
# get mask of same color
|
|
39
|
+
class_mask = np.all(color == mask, axis=2)
|
|
40
|
+
# add annotation to builder
|
|
41
|
+
builder.add(annotation_definition=dl.Segmentation(geo=class_mask,
|
|
42
|
+
label=str(i)))
|
|
43
|
+
# upload all annotations
|
|
44
|
+
item.annotations.upload(builder)
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
"""
|
|
3
|
-
Convert yolo annotation and images to Dataloop
|
|
4
|
-
Yolo annotations format:
|
|
5
|
-
For each image there is a text file with same name that has a list of box location and label index
|
|
6
|
-
"""
|
|
7
|
-
import dtlpy as dl
|
|
8
|
-
from PIL import Image
|
|
9
|
-
import os
|
|
10
|
-
|
|
11
|
-
# Get project and dataset
|
|
12
|
-
project = dl.projects.get(project_name='Fruits')
|
|
13
|
-
dataset = project.datasets.get(dataset_name='Rambutan')
|
|
14
|
-
|
|
15
|
-
images_and_annotations_path = '/home/fruits/data'
|
|
16
|
-
|
|
17
|
-
# read all images from local dataset
|
|
18
|
-
img_filepaths = list()
|
|
19
|
-
for path, subdirs, files in os.walk(images_and_annotations_path):
|
|
20
|
-
for filename in files:
|
|
21
|
-
striped, ext = os.path.splitext(filename)
|
|
22
|
-
if ext in ['.jpeg']:
|
|
23
|
-
img_filepaths.append(os.path.join(path, filename))
|
|
24
|
-
|
|
25
|
-
classes_filepath = '/home/fruits/classes.txt'
|
|
26
|
-
# get labels from file
|
|
27
|
-
with open(classes_filepath, 'r') as f:
|
|
28
|
-
labels = {i_line: label.strip() for i_line, label in enumerate(f.readlines())}
|
|
29
|
-
|
|
30
|
-
for filepath in img_filepaths:
|
|
31
|
-
# get image height and width
|
|
32
|
-
img = Image.open(filepath)
|
|
33
|
-
width, height = img.size()
|
|
34
|
-
# upload item to platform
|
|
35
|
-
item = dataset.items.update(filepath=filepath)
|
|
36
|
-
|
|
37
|
-
# get YOLO annotations
|
|
38
|
-
_, ext = os.path.splitext(filepath)
|
|
39
|
-
annotation_filepath = filepath.replace(ext, '.txt')
|
|
40
|
-
with open(annotation_filepath, 'r') as f:
|
|
41
|
-
annotations = f.read().split('\n')
|
|
42
|
-
|
|
43
|
-
builder = item.annotations.builder()
|
|
44
|
-
# convert to Dataloop annotations
|
|
45
|
-
for annotation in annotations:
|
|
46
|
-
if not annotation:
|
|
47
|
-
continue
|
|
48
|
-
# convert annotation format
|
|
49
|
-
elements = annotation.split(" ")
|
|
50
|
-
label_id = elements[0]
|
|
51
|
-
|
|
52
|
-
xmin_add_xmax = float(elements[1]) * (2.0 * float(width))
|
|
53
|
-
ymin_add_ymax = float(elements[2]) * (2.0 * float(height))
|
|
54
|
-
|
|
55
|
-
w = float(elements[3]) * float(width)
|
|
56
|
-
h = float(elements[4]) * float(height)
|
|
57
|
-
|
|
58
|
-
left = (xmin_add_xmax - w) / 2
|
|
59
|
-
top = (ymin_add_ymax - h) / 2
|
|
60
|
-
right = left + w
|
|
61
|
-
bottom = top + h
|
|
62
|
-
|
|
63
|
-
# add to annotations
|
|
64
|
-
builder.add(annotation_definition=dl.Box(top=top,
|
|
65
|
-
left=left,
|
|
66
|
-
bottom=bottom,
|
|
67
|
-
right=right,
|
|
68
|
-
label=labels[label_id]))
|
|
69
|
-
# upload all annotations of an item
|
|
70
|
-
builder.upload()
|
|
1
|
+
def main():
|
|
2
|
+
"""
|
|
3
|
+
Convert yolo annotation and images to Dataloop
|
|
4
|
+
Yolo annotations format:
|
|
5
|
+
For each image there is a text file with same name that has a list of box location and label index
|
|
6
|
+
"""
|
|
7
|
+
import dtlpy as dl
|
|
8
|
+
from PIL import Image
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
# Get project and dataset
|
|
12
|
+
project = dl.projects.get(project_name='Fruits')
|
|
13
|
+
dataset = project.datasets.get(dataset_name='Rambutan')
|
|
14
|
+
|
|
15
|
+
images_and_annotations_path = '/home/fruits/data'
|
|
16
|
+
|
|
17
|
+
# read all images from local dataset
|
|
18
|
+
img_filepaths = list()
|
|
19
|
+
for path, subdirs, files in os.walk(images_and_annotations_path):
|
|
20
|
+
for filename in files:
|
|
21
|
+
striped, ext = os.path.splitext(filename)
|
|
22
|
+
if ext in ['.jpeg']:
|
|
23
|
+
img_filepaths.append(os.path.join(path, filename))
|
|
24
|
+
|
|
25
|
+
classes_filepath = '/home/fruits/classes.txt'
|
|
26
|
+
# get labels from file
|
|
27
|
+
with open(classes_filepath, 'r') as f:
|
|
28
|
+
labels = {i_line: label.strip() for i_line, label in enumerate(f.readlines())}
|
|
29
|
+
|
|
30
|
+
for filepath in img_filepaths:
|
|
31
|
+
# get image height and width
|
|
32
|
+
img = Image.open(filepath)
|
|
33
|
+
width, height = img.size()
|
|
34
|
+
# upload item to platform
|
|
35
|
+
item = dataset.items.update(filepath=filepath)
|
|
36
|
+
|
|
37
|
+
# get YOLO annotations
|
|
38
|
+
_, ext = os.path.splitext(filepath)
|
|
39
|
+
annotation_filepath = filepath.replace(ext, '.txt')
|
|
40
|
+
with open(annotation_filepath, 'r') as f:
|
|
41
|
+
annotations = f.read().split('\n')
|
|
42
|
+
|
|
43
|
+
builder = item.annotations.builder()
|
|
44
|
+
# convert to Dataloop annotations
|
|
45
|
+
for annotation in annotations:
|
|
46
|
+
if not annotation:
|
|
47
|
+
continue
|
|
48
|
+
# convert annotation format
|
|
49
|
+
elements = annotation.split(" ")
|
|
50
|
+
label_id = elements[0]
|
|
51
|
+
|
|
52
|
+
xmin_add_xmax = float(elements[1]) * (2.0 * float(width))
|
|
53
|
+
ymin_add_ymax = float(elements[2]) * (2.0 * float(height))
|
|
54
|
+
|
|
55
|
+
w = float(elements[3]) * float(width)
|
|
56
|
+
h = float(elements[4]) * float(height)
|
|
57
|
+
|
|
58
|
+
left = (xmin_add_xmax - w) / 2
|
|
59
|
+
top = (ymin_add_ymax - h) / 2
|
|
60
|
+
right = left + w
|
|
61
|
+
bottom = top + h
|
|
62
|
+
|
|
63
|
+
# add to annotations
|
|
64
|
+
builder.add(annotation_definition=dl.Box(top=top,
|
|
65
|
+
left=left,
|
|
66
|
+
bottom=bottom,
|
|
67
|
+
right=right,
|
|
68
|
+
label=labels[label_id]))
|
|
69
|
+
# upload all annotations of an item
|
|
70
|
+
builder.upload()
|