dtlpy 1.115.44__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 -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 +145 -145
- dtlpy/entities/filters.py +798 -798
- dtlpy/entities/gis_item.py +107 -107
- dtlpy/entities/integration.py +184 -184
- dtlpy/entities/item.py +959 -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 +963 -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 +1257 -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 +1504 -1504
- dtlpy/repositories/downloader.py +976 -923
- dtlpy/repositories/dpks.py +433 -433
- dtlpy/repositories/drivers.py +482 -482
- dtlpy/repositories/executions.py +815 -815
- dtlpy/repositories/feature_sets.py +226 -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 +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 -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 +1785 -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.116.6.data}/scripts/dlp +1 -1
- dtlpy-1.116.6.data/scripts/dlp.bat +2 -0
- {dtlpy-1.115.44.data → dtlpy-1.116.6.data}/scripts/dlp.py +128 -128
- {dtlpy-1.115.44.dist-info → dtlpy-1.116.6.dist-info}/METADATA +186 -186
- dtlpy-1.116.6.dist-info/RECORD +239 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.116.6.dist-info}/WHEEL +1 -1
- {dtlpy-1.115.44.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.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.116.6.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.116.6.dist-info}/top_level.txt +0 -0
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
import dtlpy as dl
|
|
3
|
-
import matplotlib.pyplot as plt
|
|
4
|
-
|
|
5
|
-
# Get project and dataset
|
|
6
|
-
project = dl.projects.get(project_name='Food')
|
|
7
|
-
dataset = project.datasets.get(dataset_name='BeansDataset')
|
|
8
|
-
item = dataset.items.get(filepath='/flying boxes.mp4')
|
|
9
|
-
|
|
10
|
-
############################
|
|
11
|
-
# using annotation builder #
|
|
12
|
-
############################
|
|
13
|
-
# create annotation builder
|
|
14
|
-
builder = item.annotations.builder()
|
|
15
|
-
|
|
16
|
-
for i_frame in range(100):
|
|
17
|
-
# go over 100 frame
|
|
18
|
-
for i_detection in range(10):
|
|
19
|
-
# for each frame we have 10 different detections (location is just for the example)
|
|
20
|
-
builder.add(annotation_definition=dl.Box(top=2 * i_frame,
|
|
21
|
-
left=2 * i_detection,
|
|
22
|
-
bottom=2 * i_frame + 10,
|
|
23
|
-
right=2 * i_detection + 100,
|
|
24
|
-
label="moving box"),
|
|
25
|
-
frame_num=i_frame, # set the frame for the annotation
|
|
26
|
-
object_id=i_detection + 1
|
|
27
|
-
# need to input the element id to create the connection between frames
|
|
28
|
-
)
|
|
29
|
-
# starting from frame 50 add another 10 new annotations of a moving point
|
|
30
|
-
if i_frame > 50:
|
|
31
|
-
builder.add(annotation_definition=dl.Point(x=2 * i_frame,
|
|
32
|
-
y=2 * i_detection,
|
|
33
|
-
label="moving point"),
|
|
34
|
-
frame_num=i_frame,
|
|
35
|
-
object_id=20 + (i_detection + 1))
|
|
36
|
-
# get frame annotations
|
|
37
|
-
frame_annotations = builder.get_frame(frame_num=55)
|
|
38
|
-
# Plot the annotations in frame 55 of the created annotations
|
|
39
|
-
plt.figure()
|
|
40
|
-
plt.imshow(frame_annotations.show())
|
|
41
|
-
|
|
42
|
-
# plot each annotations separately
|
|
43
|
-
for annotation in frame_annotations:
|
|
44
|
-
plt.figure()
|
|
45
|
-
plt.imshow(annotation.show())
|
|
46
|
-
plt.title(annotation.label)
|
|
47
|
-
|
|
48
|
-
# Add the annotations to platform
|
|
49
|
-
item.annotations.upload(builder)
|
|
50
|
-
|
|
51
|
-
#####################
|
|
52
|
-
# single annotation #
|
|
53
|
-
#####################
|
|
54
|
-
# create one annotations for a video (without using tracker and object ids)
|
|
55
|
-
annotation = dl.Annotation.new(item=item)
|
|
56
|
-
|
|
57
|
-
for i_frame in range(100):
|
|
58
|
-
# go over 100 frame
|
|
59
|
-
annotation.add_frame(annotation_definition=dl.Box(top=2 * i_frame,
|
|
60
|
-
left=2 * (i_frame + 10),
|
|
61
|
-
bottom=2 * (i_frame + 50),
|
|
62
|
-
right=2 * (i_frame + 100),
|
|
63
|
-
label="moving box",
|
|
64
|
-
),
|
|
65
|
-
frame_num=i_frame, # set the frame for the annotation
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
# upload to platform
|
|
69
|
-
annotation.upload()
|
|
70
|
-
|
|
71
|
-
##############################################
|
|
72
|
-
# show annotation state in a specified frame #
|
|
73
|
-
##############################################
|
|
74
|
-
|
|
75
|
-
# Get from platform
|
|
76
|
-
annotations = item.annotations.list()
|
|
77
|
-
|
|
78
|
-
# Plot the annotations in frame 55 of the created annotations
|
|
79
|
-
plt.figure()
|
|
80
|
-
plt.imshow(annotations.get_frame(frame_num=55).show())
|
|
81
|
-
|
|
82
|
-
# Play video with the Dataloop video player
|
|
83
|
-
annotations.video_player()
|
|
1
|
+
def main():
|
|
2
|
+
import dtlpy as dl
|
|
3
|
+
import matplotlib.pyplot as plt
|
|
4
|
+
|
|
5
|
+
# Get project and dataset
|
|
6
|
+
project = dl.projects.get(project_name='Food')
|
|
7
|
+
dataset = project.datasets.get(dataset_name='BeansDataset')
|
|
8
|
+
item = dataset.items.get(filepath='/flying boxes.mp4')
|
|
9
|
+
|
|
10
|
+
############################
|
|
11
|
+
# using annotation builder #
|
|
12
|
+
############################
|
|
13
|
+
# create annotation builder
|
|
14
|
+
builder = item.annotations.builder()
|
|
15
|
+
|
|
16
|
+
for i_frame in range(100):
|
|
17
|
+
# go over 100 frame
|
|
18
|
+
for i_detection in range(10):
|
|
19
|
+
# for each frame we have 10 different detections (location is just for the example)
|
|
20
|
+
builder.add(annotation_definition=dl.Box(top=2 * i_frame,
|
|
21
|
+
left=2 * i_detection,
|
|
22
|
+
bottom=2 * i_frame + 10,
|
|
23
|
+
right=2 * i_detection + 100,
|
|
24
|
+
label="moving box"),
|
|
25
|
+
frame_num=i_frame, # set the frame for the annotation
|
|
26
|
+
object_id=i_detection + 1
|
|
27
|
+
# need to input the element id to create the connection between frames
|
|
28
|
+
)
|
|
29
|
+
# starting from frame 50 add another 10 new annotations of a moving point
|
|
30
|
+
if i_frame > 50:
|
|
31
|
+
builder.add(annotation_definition=dl.Point(x=2 * i_frame,
|
|
32
|
+
y=2 * i_detection,
|
|
33
|
+
label="moving point"),
|
|
34
|
+
frame_num=i_frame,
|
|
35
|
+
object_id=20 + (i_detection + 1))
|
|
36
|
+
# get frame annotations
|
|
37
|
+
frame_annotations = builder.get_frame(frame_num=55)
|
|
38
|
+
# Plot the annotations in frame 55 of the created annotations
|
|
39
|
+
plt.figure()
|
|
40
|
+
plt.imshow(frame_annotations.show())
|
|
41
|
+
|
|
42
|
+
# plot each annotations separately
|
|
43
|
+
for annotation in frame_annotations:
|
|
44
|
+
plt.figure()
|
|
45
|
+
plt.imshow(annotation.show())
|
|
46
|
+
plt.title(annotation.label)
|
|
47
|
+
|
|
48
|
+
# Add the annotations to platform
|
|
49
|
+
item.annotations.upload(builder)
|
|
50
|
+
|
|
51
|
+
#####################
|
|
52
|
+
# single annotation #
|
|
53
|
+
#####################
|
|
54
|
+
# create one annotations for a video (without using tracker and object ids)
|
|
55
|
+
annotation = dl.Annotation.new(item=item)
|
|
56
|
+
|
|
57
|
+
for i_frame in range(100):
|
|
58
|
+
# go over 100 frame
|
|
59
|
+
annotation.add_frame(annotation_definition=dl.Box(top=2 * i_frame,
|
|
60
|
+
left=2 * (i_frame + 10),
|
|
61
|
+
bottom=2 * (i_frame + 50),
|
|
62
|
+
right=2 * (i_frame + 100),
|
|
63
|
+
label="moving box",
|
|
64
|
+
),
|
|
65
|
+
frame_num=i_frame, # set the frame for the annotation
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# upload to platform
|
|
69
|
+
annotation.upload()
|
|
70
|
+
|
|
71
|
+
##############################################
|
|
72
|
+
# show annotation state in a specified frame #
|
|
73
|
+
##############################################
|
|
74
|
+
|
|
75
|
+
# Get from platform
|
|
76
|
+
annotations = item.annotations.list()
|
|
77
|
+
|
|
78
|
+
# Plot the annotations in frame 55 of the created annotations
|
|
79
|
+
plt.figure()
|
|
80
|
+
plt.imshow(annotations.get_frame(frame_num=55).show())
|
|
81
|
+
|
|
82
|
+
# Play video with the Dataloop video player
|
|
83
|
+
annotations.video_player()
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
def main(project_name, dataset_name, 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=project_name)
|
|
10
|
-
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
11
|
-
item = dataset.items.get(filepath=remote_filepath)
|
|
12
|
-
|
|
13
|
-
# get annotations
|
|
14
|
-
annotations = item.annotations.list()
|
|
15
|
-
|
|
16
|
-
# delete first annotation
|
|
17
|
-
ann = annotations[0]
|
|
18
|
-
ann.delete()
|
|
19
|
-
|
|
20
|
-
### Or - to delete all annotations ###
|
|
21
|
-
|
|
22
|
-
# get annotations
|
|
23
|
-
annotations = item.annotations.list()
|
|
24
|
-
|
|
25
|
-
# delete first annotation
|
|
26
|
-
annotations.delete()
|
|
1
|
+
def main(project_name, dataset_name, 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=project_name)
|
|
10
|
+
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
11
|
+
item = dataset.items.get(filepath=remote_filepath)
|
|
12
|
+
|
|
13
|
+
# get annotations
|
|
14
|
+
annotations = item.annotations.list()
|
|
15
|
+
|
|
16
|
+
# delete first annotation
|
|
17
|
+
ann = annotations[0]
|
|
18
|
+
ann.delete()
|
|
19
|
+
|
|
20
|
+
### Or - to delete all annotations ###
|
|
21
|
+
|
|
22
|
+
# get annotations
|
|
23
|
+
annotations = item.annotations.list()
|
|
24
|
+
|
|
25
|
+
# delete first annotation
|
|
26
|
+
annotations.delete()
|
dtlpy/examples/filters.py
CHANGED
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
import dtlpy as dl
|
|
3
|
-
|
|
4
|
-
########
|
|
5
|
-
# prep #
|
|
6
|
-
########
|
|
7
|
-
project = dl.projects.get(project_name='RQL')
|
|
8
|
-
dataset = project.datasets.get(dataset_name='Dataset')
|
|
9
|
-
|
|
10
|
-
#################
|
|
11
|
-
### Items ###
|
|
12
|
-
#################
|
|
13
|
-
|
|
14
|
-
##################
|
|
15
|
-
# create filters #
|
|
16
|
-
##################
|
|
17
|
-
filters = dl.Filters(resource=dl.FiltersResource.ITEM) # set resource - optional - default is item
|
|
18
|
-
# add filter - only files
|
|
19
|
-
filters.add(field='type', values='file')
|
|
20
|
-
# add filter - only annotated items
|
|
21
|
-
filters.add(field='annotated', values=True)
|
|
22
|
-
# add filter - filename includes 'dog'
|
|
23
|
-
filters.add(field='filename', values='/dog.jpg')
|
|
24
|
-
# -- time filters -- must be in ISO format and in UTC (offset from local time). converting using datetime package as follows:
|
|
25
|
-
import datetime, time
|
|
26
|
-
timestamp = datetime.datetime(year=2019, month=10, day=27, hour=15, minute=39, second=6,
|
|
27
|
-
tzinfo=datetime.timezone(datetime.timedelta(seconds=-time.timezone))).isoformat()
|
|
28
|
-
filters.add(field='createdAt', values=timestamp, operator=dl.FiltersOperations.GREATER_THAN)
|
|
29
|
-
|
|
30
|
-
######################
|
|
31
|
-
# get filtered items #
|
|
32
|
-
######################
|
|
33
|
-
# return results sorted by ascending id
|
|
34
|
-
filters.sort_by(field='filename')
|
|
35
|
-
pages = dataset.items.list(filters=filters)
|
|
36
|
-
|
|
37
|
-
#########################
|
|
38
|
-
# update filtered items #
|
|
39
|
-
#########################
|
|
40
|
-
# to add filed annotatedDogs to all filtered items and give value True
|
|
41
|
-
# this field will be added to user metadata
|
|
42
|
-
# create update order
|
|
43
|
-
update_values = {'annotatedDogsSingJune2019': True}
|
|
44
|
-
|
|
45
|
-
# update
|
|
46
|
-
pages = dataset.items.update(filters=filters, update_values=update_values)
|
|
47
|
-
|
|
48
|
-
# #########################
|
|
49
|
-
# # delete filtered items #
|
|
50
|
-
# #########################
|
|
51
|
-
# dataset.items.delete(filters=filters)
|
|
52
|
-
|
|
53
|
-
#####################################
|
|
54
|
-
# filter items by their annotations #
|
|
55
|
-
#####################################
|
|
56
|
-
filters = dl.Filters()
|
|
57
|
-
# set resource
|
|
58
|
-
filters.resource = 'items'
|
|
59
|
-
# add filter - only files
|
|
60
|
-
filters.add(field='type', values='file')
|
|
61
|
-
|
|
62
|
-
# add annotation filters - only items with 'box' annotations
|
|
63
|
-
filters.add_join(field='type', values='box')
|
|
64
|
-
|
|
65
|
-
# get results
|
|
66
|
-
pages = dataset.items.list(filters=filters)
|
|
67
|
-
|
|
68
|
-
#######################
|
|
69
|
-
### Annotations ###
|
|
70
|
-
#######################
|
|
71
|
-
|
|
72
|
-
##################
|
|
73
|
-
# create filters #
|
|
74
|
-
##################
|
|
75
|
-
filters = dl.Filters()
|
|
76
|
-
# set resource
|
|
77
|
-
filters.resource = dl.FiltersResource.ANNOTATION
|
|
78
|
-
# add filter - only box annotations
|
|
79
|
-
filters.add(field='type', values='box')
|
|
80
|
-
# add filter - only dogs
|
|
81
|
-
filters.add(field='label', values=['Dog', 'cat'], operator=dl.FiltersOperations.IN)
|
|
82
|
-
# add filter - annotated by Joe and David
|
|
83
|
-
filters.add(field='creator',
|
|
84
|
-
values=['Joe@dataloop.ai', 'David@dataloop.ai', 'oa-test-1@dataloop.ai'],
|
|
85
|
-
operator=dl.FiltersOperations.IN
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
############################
|
|
89
|
-
# get filtered annotations #
|
|
90
|
-
############################
|
|
91
|
-
# return results sorted by descending id
|
|
92
|
-
filters.sort_by(field='id', value=dl.FiltersOrderByDirection.DESCENDING)
|
|
93
|
-
pages = dataset.items.list(filters=filters)
|
|
94
|
-
|
|
95
|
-
###############################
|
|
96
|
-
# update filtered annotations #
|
|
97
|
-
###############################
|
|
98
|
-
# to add filed annotation_quality to all filtered annotations and give them value 'high'
|
|
99
|
-
# this field will be added to user metadata
|
|
100
|
-
# create update order
|
|
101
|
-
update_values = {'annotation_quality': 'high'}
|
|
102
|
-
|
|
103
|
-
# update
|
|
104
|
-
pages = dataset.items.update(filters=filters, update_values=update_values)
|
|
105
|
-
|
|
106
|
-
###############################
|
|
107
|
-
# delete filtered annotations #
|
|
108
|
-
###############################
|
|
109
|
-
dataset.items.delete(filters=filters)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if __name__ == '__main__':
|
|
113
|
-
main()
|
|
1
|
+
def main():
|
|
2
|
+
import dtlpy as dl
|
|
3
|
+
|
|
4
|
+
########
|
|
5
|
+
# prep #
|
|
6
|
+
########
|
|
7
|
+
project = dl.projects.get(project_name='RQL')
|
|
8
|
+
dataset = project.datasets.get(dataset_name='Dataset')
|
|
9
|
+
|
|
10
|
+
#################
|
|
11
|
+
### Items ###
|
|
12
|
+
#################
|
|
13
|
+
|
|
14
|
+
##################
|
|
15
|
+
# create filters #
|
|
16
|
+
##################
|
|
17
|
+
filters = dl.Filters(resource=dl.FiltersResource.ITEM) # set resource - optional - default is item
|
|
18
|
+
# add filter - only files
|
|
19
|
+
filters.add(field='type', values='file')
|
|
20
|
+
# add filter - only annotated items
|
|
21
|
+
filters.add(field='annotated', values=True)
|
|
22
|
+
# add filter - filename includes 'dog'
|
|
23
|
+
filters.add(field='filename', values='/dog.jpg')
|
|
24
|
+
# -- time filters -- must be in ISO format and in UTC (offset from local time). converting using datetime package as follows:
|
|
25
|
+
import datetime, time
|
|
26
|
+
timestamp = datetime.datetime(year=2019, month=10, day=27, hour=15, minute=39, second=6,
|
|
27
|
+
tzinfo=datetime.timezone(datetime.timedelta(seconds=-time.timezone))).isoformat()
|
|
28
|
+
filters.add(field='createdAt', values=timestamp, operator=dl.FiltersOperations.GREATER_THAN)
|
|
29
|
+
|
|
30
|
+
######################
|
|
31
|
+
# get filtered items #
|
|
32
|
+
######################
|
|
33
|
+
# return results sorted by ascending id
|
|
34
|
+
filters.sort_by(field='filename')
|
|
35
|
+
pages = dataset.items.list(filters=filters)
|
|
36
|
+
|
|
37
|
+
#########################
|
|
38
|
+
# update filtered items #
|
|
39
|
+
#########################
|
|
40
|
+
# to add filed annotatedDogs to all filtered items and give value True
|
|
41
|
+
# this field will be added to user metadata
|
|
42
|
+
# create update order
|
|
43
|
+
update_values = {'annotatedDogsSingJune2019': True}
|
|
44
|
+
|
|
45
|
+
# update
|
|
46
|
+
pages = dataset.items.update(filters=filters, update_values=update_values)
|
|
47
|
+
|
|
48
|
+
# #########################
|
|
49
|
+
# # delete filtered items #
|
|
50
|
+
# #########################
|
|
51
|
+
# dataset.items.delete(filters=filters)
|
|
52
|
+
|
|
53
|
+
#####################################
|
|
54
|
+
# filter items by their annotations #
|
|
55
|
+
#####################################
|
|
56
|
+
filters = dl.Filters()
|
|
57
|
+
# set resource
|
|
58
|
+
filters.resource = 'items'
|
|
59
|
+
# add filter - only files
|
|
60
|
+
filters.add(field='type', values='file')
|
|
61
|
+
|
|
62
|
+
# add annotation filters - only items with 'box' annotations
|
|
63
|
+
filters.add_join(field='type', values='box')
|
|
64
|
+
|
|
65
|
+
# get results
|
|
66
|
+
pages = dataset.items.list(filters=filters)
|
|
67
|
+
|
|
68
|
+
#######################
|
|
69
|
+
### Annotations ###
|
|
70
|
+
#######################
|
|
71
|
+
|
|
72
|
+
##################
|
|
73
|
+
# create filters #
|
|
74
|
+
##################
|
|
75
|
+
filters = dl.Filters()
|
|
76
|
+
# set resource
|
|
77
|
+
filters.resource = dl.FiltersResource.ANNOTATION
|
|
78
|
+
# add filter - only box annotations
|
|
79
|
+
filters.add(field='type', values='box')
|
|
80
|
+
# add filter - only dogs
|
|
81
|
+
filters.add(field='label', values=['Dog', 'cat'], operator=dl.FiltersOperations.IN)
|
|
82
|
+
# add filter - annotated by Joe and David
|
|
83
|
+
filters.add(field='creator',
|
|
84
|
+
values=['Joe@dataloop.ai', 'David@dataloop.ai', 'oa-test-1@dataloop.ai'],
|
|
85
|
+
operator=dl.FiltersOperations.IN
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
############################
|
|
89
|
+
# get filtered annotations #
|
|
90
|
+
############################
|
|
91
|
+
# return results sorted by descending id
|
|
92
|
+
filters.sort_by(field='id', value=dl.FiltersOrderByDirection.DESCENDING)
|
|
93
|
+
pages = dataset.items.list(filters=filters)
|
|
94
|
+
|
|
95
|
+
###############################
|
|
96
|
+
# update filtered annotations #
|
|
97
|
+
###############################
|
|
98
|
+
# to add filed annotation_quality to all filtered annotations and give them value 'high'
|
|
99
|
+
# this field will be added to user metadata
|
|
100
|
+
# create update order
|
|
101
|
+
update_values = {'annotation_quality': 'high'}
|
|
102
|
+
|
|
103
|
+
# update
|
|
104
|
+
pages = dataset.items.update(filters=filters, update_values=update_values)
|
|
105
|
+
|
|
106
|
+
###############################
|
|
107
|
+
# delete filtered annotations #
|
|
108
|
+
###############################
|
|
109
|
+
dataset.items.delete(filters=filters)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
if __name__ == '__main__':
|
|
113
|
+
main()
|
dtlpy/examples/move_item.py
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
def main():
|
|
2
|
-
"""
|
|
3
|
-
Move items to another folder in platform
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
import dtlpy as dl
|
|
7
|
-
|
|
8
|
-
# Get project and dataset
|
|
9
|
-
project = dl.projects.get(project_name='Ninja Turtles')
|
|
10
|
-
dataset = project.datasets.get(dataset_name='Splinter')
|
|
11
|
-
|
|
12
|
-
# Get all items from the source folder
|
|
13
|
-
filters = dl.Filters()
|
|
14
|
-
filters.add(field='filename', values='/fighting/**') # take files from the directory only (recursive)
|
|
15
|
-
filters.add(field='type', values='file') # only files
|
|
16
|
-
pages = dataset.items.list(filters=filters)
|
|
17
|
-
|
|
18
|
-
dst_folder = '/fighting_shredder'
|
|
19
|
-
# iterate through items
|
|
20
|
-
for page in pages:
|
|
21
|
-
for item in page:
|
|
22
|
-
# move item
|
|
23
|
-
item.move(new_path=dst_folder)
|
|
1
|
+
def main():
|
|
2
|
+
"""
|
|
3
|
+
Move items to another folder in platform
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
import dtlpy as dl
|
|
7
|
+
|
|
8
|
+
# Get project and dataset
|
|
9
|
+
project = dl.projects.get(project_name='Ninja Turtles')
|
|
10
|
+
dataset = project.datasets.get(dataset_name='Splinter')
|
|
11
|
+
|
|
12
|
+
# Get all items from the source folder
|
|
13
|
+
filters = dl.Filters()
|
|
14
|
+
filters.add(field='filename', values='/fighting/**') # take files from the directory only (recursive)
|
|
15
|
+
filters.add(field='type', values='file') # only files
|
|
16
|
+
pages = dataset.items.list(filters=filters)
|
|
17
|
+
|
|
18
|
+
dst_folder = '/fighting_shredder'
|
|
19
|
+
# iterate through items
|
|
20
|
+
for page in pages:
|
|
21
|
+
for item in page:
|
|
22
|
+
# move item
|
|
23
|
+
item.move(new_path=dst_folder)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
def run():
|
|
2
|
-
"""
|
|
3
|
-
Play a video from platform with annotations in the Dataloop python player
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
from dtlpy.utilities.videos.video_player import VideoPlayer
|
|
7
|
-
project_name = 'Dancing'
|
|
8
|
-
dataset_name = 'Flossing'
|
|
9
|
-
item_name = '/first_try.mp4'
|
|
10
|
-
|
|
11
|
-
VideoPlayer(project_name=project_name,
|
|
12
|
-
dataset_name=dataset_name,
|
|
13
|
-
item_filepath=item_name)
|
|
1
|
+
def run():
|
|
2
|
+
"""
|
|
3
|
+
Play a video from platform with annotations in the Dataloop python player
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
from dtlpy.utilities.videos.video_player import VideoPlayer
|
|
7
|
+
project_name = 'Dancing'
|
|
8
|
+
dataset_name = 'Flossing'
|
|
9
|
+
item_name = '/first_try.mp4'
|
|
10
|
+
|
|
11
|
+
VideoPlayer(project_name=project_name,
|
|
12
|
+
dataset_name=dataset_name,
|
|
13
|
+
item_filepath=item_name)
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
def main(project_name, dataset_name, item_remote_path):
|
|
2
|
-
"""
|
|
3
|
-
Download and show an image with it's annotations
|
|
4
|
-
:return:
|
|
5
|
-
"""
|
|
6
|
-
import dtlpy as dl
|
|
7
|
-
import numpy as np
|
|
8
|
-
from PIL import Image
|
|
9
|
-
|
|
10
|
-
# Get project and dataset
|
|
11
|
-
project = dl.projects.get(project_name=project_name)
|
|
12
|
-
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
13
|
-
# Get item
|
|
14
|
-
item = dataset.items.get(filepath=item_remote_path)
|
|
15
|
-
|
|
16
|
-
# download item as a buffer
|
|
17
|
-
buffer = item.download(save_locally=False)
|
|
18
|
-
|
|
19
|
-
# open image
|
|
20
|
-
image = Image.open(buffer)
|
|
21
|
-
|
|
22
|
-
# download annotations
|
|
23
|
-
annotations = item.annotations.show(width=image.size[0],
|
|
24
|
-
height=image.size[1],
|
|
25
|
-
thickness=3)
|
|
26
|
-
annotations = Image.fromarray(annotations.astype(np.uint8))
|
|
27
|
-
|
|
28
|
-
# show separate
|
|
29
|
-
annotations.show()
|
|
30
|
-
image.show()
|
|
31
|
-
|
|
32
|
-
# plot on top
|
|
33
|
-
image.paste(annotations, (0, 0), annotations)
|
|
34
|
-
image.show()
|
|
35
|
-
|
|
36
|
-
#####################################################
|
|
37
|
-
# show annotations from json file (Dataloop format) #
|
|
38
|
-
#####################################################
|
|
39
|
-
# import dtlpy as dl
|
|
40
|
-
# from PIL import Image
|
|
41
|
-
# import json
|
|
42
|
-
#
|
|
43
|
-
# with open('annotations.json', 'r') as f:
|
|
44
|
-
# data = json.load(f)
|
|
45
|
-
#
|
|
46
|
-
# for annotation in data['annotations']:
|
|
47
|
-
# annotations = dl.Annotation.from_json(annotation)
|
|
48
|
-
# mask = annotations.show(width=640,
|
|
49
|
-
# height=480,
|
|
50
|
-
# thickness=3,
|
|
51
|
-
# color=(255, 0, 0))
|
|
52
|
-
# mask = Image.fromarray(mask.astype(np.uint8))
|
|
53
|
-
# mask.show()
|
|
1
|
+
def main(project_name, dataset_name, item_remote_path):
|
|
2
|
+
"""
|
|
3
|
+
Download and show an image with it's annotations
|
|
4
|
+
:return:
|
|
5
|
+
"""
|
|
6
|
+
import dtlpy as dl
|
|
7
|
+
import numpy as np
|
|
8
|
+
from PIL import Image
|
|
9
|
+
|
|
10
|
+
# Get project and dataset
|
|
11
|
+
project = dl.projects.get(project_name=project_name)
|
|
12
|
+
dataset = project.datasets.get(dataset_name=dataset_name)
|
|
13
|
+
# Get item
|
|
14
|
+
item = dataset.items.get(filepath=item_remote_path)
|
|
15
|
+
|
|
16
|
+
# download item as a buffer
|
|
17
|
+
buffer = item.download(save_locally=False)
|
|
18
|
+
|
|
19
|
+
# open image
|
|
20
|
+
image = Image.open(buffer)
|
|
21
|
+
|
|
22
|
+
# download annotations
|
|
23
|
+
annotations = item.annotations.show(width=image.size[0],
|
|
24
|
+
height=image.size[1],
|
|
25
|
+
thickness=3)
|
|
26
|
+
annotations = Image.fromarray(annotations.astype(np.uint8))
|
|
27
|
+
|
|
28
|
+
# show separate
|
|
29
|
+
annotations.show()
|
|
30
|
+
image.show()
|
|
31
|
+
|
|
32
|
+
# plot on top
|
|
33
|
+
image.paste(annotations, (0, 0), annotations)
|
|
34
|
+
image.show()
|
|
35
|
+
|
|
36
|
+
#####################################################
|
|
37
|
+
# show annotations from json file (Dataloop format) #
|
|
38
|
+
#####################################################
|
|
39
|
+
# import dtlpy as dl
|
|
40
|
+
# from PIL import Image
|
|
41
|
+
# import json
|
|
42
|
+
#
|
|
43
|
+
# with open('annotations.json', 'r') as f:
|
|
44
|
+
# data = json.load(f)
|
|
45
|
+
#
|
|
46
|
+
# for annotation in data['annotations']:
|
|
47
|
+
# annotations = dl.Annotation.from_json(annotation)
|
|
48
|
+
# mask = annotations.show(width=640,
|
|
49
|
+
# height=480,
|
|
50
|
+
# thickness=3,
|
|
51
|
+
# color=(255, 0, 0))
|
|
52
|
+
# mask = Image.fromarray(mask.astype(np.uint8))
|
|
53
|
+
# mask.show()
|