From 8b20e2074638d07d8bb043fae9a42c38e2e7fb81 Mon Sep 17 00:00:00 2001 From: Maria Khrustaleva Date: Sat, 31 Dec 2022 08:12:47 +0200 Subject: [PATCH] Add filename pattern to cli (#5525) Add ability to create task with `filename_pattern` by cli. --- CHANGELOG.md | 2 +- cvat-cli/src/cvat_cli/parser.py | 74 +++++++++++++++++----- cvat-sdk/cvat_sdk/core/proxies/tasks.py | 2 + site/content/en/docs/api_sdk/cli/_index.md | 12 ++++ 4 files changed, 74 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49b82e3d0d8d..09009e6bdd4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## \[2.4.0] - Unreleased ### Added -- Filename pattern to simplify uploading cloud storage data for a task () +- Filename pattern to simplify uploading cloud storage data for a task (, ) - \[SDK\] Configuration setting to change the dataset cache directory () - \[SDK\] Class to represent a project as a PyTorch dataset diff --git a/cvat-cli/src/cvat_cli/parser.py b/cvat-cli/src/cvat_cli/parser.py index 5a5410a4a5c9..a1d6a3f78df9 100644 --- a/cvat-cli/src/cvat_cli/parser.py +++ b/cvat-cli/src/cvat_cli/parser.py @@ -8,6 +8,7 @@ import json import logging import os +import textwrap from distutils.util import strtobool from cvat_sdk.core.proxies.tasks import ResourceType @@ -90,10 +91,15 @@ def make_cmdline_parser() -> argparse.ArgumentParser: ####################################################################### task_create_parser = task_subparser.add_parser( "create", - description="""Create a new CVAT task. To create a task, you need - to specify labels using the --labels argument or - attach the task to an existing project using the - --project_id argument.""", + description=textwrap.dedent( + """\ + Create a new CVAT task. To create a task, you need + to specify labels using the --labels argument or + attach the task to an existing project using the + --project_id argument. + """ + ), + formatter_class=argparse.RawTextHelpFormatter, ) task_create_parser.add_argument("name", type=str, help="name of the task") task_create_parser.add_argument( @@ -124,38 +130,56 @@ def make_cmdline_parser() -> argparse.ArgumentParser: dest="status_check_period", default=2, type=float, - help="""number of seconds to wait until checking - if data compression finished (necessary before uploading annotations)""", + help=textwrap.dedent( + """\ + number of seconds to wait until checking + if data compression finished (necessary before uploading annotations) + """ + ), ) task_create_parser.add_argument( "--copy_data", default=False, action="store_true", - help="""set the option to copy the data, only used when resource type is - share (default: %(default)s)""", + help=textwrap.dedent( + """\ + set the option to copy the data, only used when resource type is + share (default: %(default)s) + """ + ), ) task_create_parser.add_argument( "--dataset_repository_url", default="", type=str, - help=( - "git repository to store annotations e.g." - " https://github.com/user/repos [annotation/]" + help=textwrap.dedent( + """\ + git repository to store annotations e.g. + https://github.com/user/repos [annotation/] + """ ), ) task_create_parser.add_argument( "--frame_step", default=None, type=int, - help="""set the frame step option in the advanced configuration - when uploading image series or videos (default: %(default)s)""", + help=textwrap.dedent( + """\ + set the frame step option in the advanced configuration + when uploading image series or videos (default: %(default)s) + """ + ), ) task_create_parser.add_argument( "--image_quality", default=70, type=int, - help="""set the image quality option in the advanced configuration - when creating tasks.(default: %(default)s)""", + help=textwrap.dedent( + """\ + set the image quality option in the advanced configuration + when creating tasks.(default: %(default)s) + """ + ), ) task_create_parser.add_argument( "--labels", @@ -201,6 +225,26 @@ def make_cmdline_parser() -> argparse.ArgumentParser: action="store_true", # automatically sets default=False help="""zip chunks before sending them to the server""", ) + task_create_parser.add_argument( + "--cloud_storage_id", + default=None, + type=int, + help="cloud storage ID if you would like to use data from cloud storage", + ) + task_create_parser.add_argument( + "--filename_pattern", + type=str, + help=textwrap.dedent( + """\ + pattern for filtering data from the manifest file for the upload. + Only shell-style wildcards are supported: + * - matches everything + ? - matches any single character + [seq] - matches any character in 'seq' + [!seq] - matches any character not in seq + """ + ), + ) ####################################################################### # Delete diff --git a/cvat-sdk/cvat_sdk/core/proxies/tasks.py b/cvat-sdk/cvat_sdk/core/proxies/tasks.py index c734131a8f39..330a6ab94ec1 100644 --- a/cvat-sdk/cvat_sdk/core/proxies/tasks.py +++ b/cvat-sdk/cvat_sdk/core/proxies/tasks.py @@ -90,6 +90,8 @@ def upload_data( "stop_frame", "use_cache", "use_zip_chunks", + "filename_pattern", + "cloud_storage_id", ], ) ) diff --git a/site/content/en/docs/api_sdk/cli/_index.md b/site/content/en/docs/api_sdk/cli/_index.md index 03da4a9e7672..0a5be3763a80 100644 --- a/site/content/en/docs/api_sdk/cli/_index.md +++ b/site/content/en/docs/api_sdk/cli/_index.md @@ -146,6 +146,18 @@ by using the [label constructor](/docs/manual/basics/creating_an_annotation_task --dataset_repository_url https://github.com/user/dataset/blob/main/annotation/anno_file_name.zip \ --lfs share //share/large_dataset/images/ ``` +- Create a task named "task with filtered cloud storage data", with filename_pattern `test_images/*.jpeg` + and using the data from the cloud storage resource described in the manifest.jsonl: + ```bash + cvat-cli create "task with filtered cloud storage data" --labels '[{"name": "car"}]'\ + --use_cache --cloud_storage_id 1 --filename_pattern "test_images/*.jpeg" share manifest.jsonl + ``` +- Create a task named "task with filtered cloud storage data" using all data from the cloud storage resource + described in the manifest.jsonl by specifying filename_pattern `*`: + ```bash + cvat-cli create "task with filtered cloud storage data" --labels '[{"name": "car"}]'\ + --use_cache --cloud_storage_id 1 --filename_pattern "*" share manifest.jsonl + ``` ### Delete