annotation import#

Description#

アノテーションをプロジェクトにインポートします。 アノテーシンzipまたはzipを展開したディレクトリをインポートできます。 作業中のタスクに対してはインポートできません。

Examples#

インポート対象のアノテーションのフォーマット#

インポート対象のアノテーションのフォーマットは、アノテーションzipまたはzipを展開したディレクトリと同じディレクトリ構成です。

annotation.zip#
ルートディレクトリ/
├── {task_id}/
│   ├── {input_data_id}.json
│   ├── {input_data_id}/
│          ├── {annotation_id}............ 塗りつぶしPNG画像

{input_data_id}.json のサンプルは以下の通りです。詳細は https://annofab.readme.io/docs/annotation-format を参照してください。

{input_data_id}.json#
{
    "details": [
        {
            "label": "car",
            "data": {
                "left_top": {
                    "x": 878,
                    "y": 566
                },
                "right_bottom": {
                    "x": 1065,
                    "y": 701
                },
                "_type": "BoundingBox"
            },
            "attributes": {}
        },
        {
            "label": "road",
            "data": {
                "data_uri": "b803193f-827f-4755-8228-e2c67d0786d9",
                "_type": "SegmentationV2"
            },
            "attributes": {}
        },
        {
            "label": "weather",
            "data": {
                "_type": "Classification"
            },
            "attributes": {
                "sunny": true
            }
        }
    ]
}

以下のように annotation_id が指定されている場合、annotation_id もインポートされます。

{input_data_id}.json#
{
    "details": [
        {
            "label": "car",
            "annotation_id": "12345678-abcd-1234-abcd-1234abcd5678",
            "data": {
                "left_top": {
                    "x": 878,
                    "y": 566
                },
                "right_bottom": {
                    "x": 1065,
                    "y": 701
                },
                "_type": "BoundingBox"
            },
            "attributes": {}
        },
        ...
    ]
}

editor_props#

editor_props が指定されている場合、 putAnnotation APIの editor_props としてインポートされます。 editor_props はアノテーションエディタ用のプロパティです。たとえば can_deletefalse を指定すると、対応しているエディタ上ではアノテーションを削除できなくなります。

editor_props に指定できるキーは、 putAnnotation APIAnnotationPropsForEditor を参照してください。

{input_data_id}.json#
{
    "details": [
        {
            "label": "car",
            "annotation_id": "12345678-abcd-1234-abcd-1234abcd5678",
            "data": {
                "left_top": {
                    "x": 878,
                    "y": 566
                },
                "right_bottom": {
                    "x": 1065,
                    "y": 701
                },
                "_type": "BoundingBox"
            },
            "attributes": {},
            "editor_props": {
                "can_delete": false,
                "can_edit_data": false,
                "can_edit_additional": false
            }
        },
        ...
    ]
}

基本的な使い方#

--annotation に、アノテーションzipまたはzipを展開したディレクトリのパスを指定してください。

$ annofabcli annotation import --project_id prj1 --annotation annotation.zip

インポート対象のタスクを指定する場合は、--task_id にインポート対象のタスクのtask_idを指定してください。

$ annofabcli annotation import --project_id prj1 --annotation annotation.zip \
--task_id file://task_id.txt

デフォルトでは、すでにアノテーションが存在する場合はスキップします。 既存のアノテーションを残してインポートする場合は、 --merge を指定してください。 インポート対象のアノテーションのannotation_idが、既存のアノテーションのannotation_idに一致すればアノテーションを上書きします。一致しなければアノテーションを追加します。

$ annofabcli annotation import --project_id prj1 --annotation annotation.zip \
--merge

既存のアノテーションを削除してからインポートする場合は、 --overwrite を指定してください。

$ annofabcli annotation import --project_id prj1 --annotation annotation.zip \
--overwrite

デフォルトでは、休憩中状態のタスクはアノテーションのインポートをスキップします。 休憩中状態のタスクにもインポートする場合は、 --include_break_task を指定してください。

デフォルトでは「担当者が自分自身でない AND 担当者が割れ当てられたことがある」タスクは、アノテーションのインポートをスキップします。 --change_operator_to_me を指定すると、担当者を一時的に自分自身に変更して、アノテーションをインポートすることができます。

$ annofabcli annotation import --project_id prj1 --annotation annotation.zip \
--change_operator_to_me

editor_props をまとめて指定する#

インポートする全アノテーションに同じ editor_props を付与する場合は、 --editor_props を指定してください。 --editor_props で指定できるキーは、 editor_props に指定できるキー を参照してください。

$ annofabcli annotation import --project_id prj1 --annotation annotation.zip \
--editor_props '{"can_delete": false, "can_edit_data": false}'

Usage Details#

アノテーションをインポートします。アノテーションのフォーマットは、Simpleアノテーションと同じフォルダ構成のzipファイルまたはディレクトリです。ただし、作業中状態のタスクはインポートできません。--include_complete_task を指定すれば、完了状態のタスクにもインポートできます。--include_break_task を指定すれば、休憩中状態のタスクにもインポートできます。--include_on_hold_task を指定すれば、保留中状態のタスクにもインポートできます。

usage: annofabcli annotation import [-h] [--yes] [--endpoint_url ENDPOINT_URL]
                                    [--annofab_user_id ANNOFAB_USER_ID]
                                    [--annofab_password ANNOFAB_PASSWORD]
                                    [--annofab_pat ANNOFAB_PAT]
                                    [--logdir LOGDIR] [--disable_log]
                                    [--debug] -p PROJECT_ID --annotation
                                    ANNOTATION [-t TASK_ID [TASK_ID ...]]
                                    [--overwrite | --merge]
                                    [--change_operator_to_me]
                                    [--include_complete_task]
                                    [--include_break_task]
                                    [--include_on_hold_task] [--strict]
                                    [--editor_props EDITOR_PROPS]
                                    [--parallelism {2,3,4}]

Named Arguments#

-p, --project_id

対象のプロジェクトのproject_idを指定します。

--annotation

Simpleアノテーションと同じフォルダ構成のzipファイル or ディレクトリのパスを指定してください。

-t, --task_id

対象のタスクのtask_idを指定します。 file:// を先頭に付けると、task_idの一覧が記載されたファイルを指定できます。

--overwrite

アノテーションが存在する場合、 --overwrite を指定していれば、すでに存在するアノテーションを削除してインポートします。指定しなければ、アノテーションのインポートをスキップします。

--merge

アノテーションが存在する場合、 --merge を指定していればアノテーションをannotation_id単位でマージしながらインポートします。annotation_idが一致すればアノテーションを上書き、一致しなければアノテーションを追加します。指定しなければ、アノテーションのインポートをスキップします。

--change_operator_to_me

タスクの担当者を自分自身に変更しないとアノテーションをインポートできない場合(担当者が自分自身でない AND 担当者が割れ当てられたことがあるタスク)は、タスクの担当者を自分自身に変更します。アノテーションをインポートが完了したら、担当者を元に戻します。未指定の場合は、そのようなタスクのアノテーションインポートはスキップされます。

--include_complete_task

完了状態のタスクに対してもアノテーションをインポートします。未指定の場合は、完了状態のタスクはスキップされます。

--include_break_task

休憩中状態のタスクに対してもアノテーションをインポートします。未指定の場合は、休憩中状態のタスクはスキップされます。

--include_on_hold_task

保留中状態のタスクに対してもアノテーションをインポートします。ただし、アノテーションインポート後は保留中状態でなくなる可能性があります。未指定の場合は、保留中状態のタスクはスキップされます。

--strict

アノテーションJSONに、存在しないラベル名や属性名など適切でない記載が場合、そのアノテーションJSONの登録をスキップします。デフォルトでは、適切でない箇所のみスキップして、できるだけアノテーションを登録するようにします。

--editor_props

インポートする全アノテーションに付与するエディタ用プロパティをJSON形式で指定します。指定できるキーは can_delete, can_edit_data, can_edit_additional です。file:// を先頭に付けると、JSON形式のファイルを指定できます。各アノテーションJSONの editor_props が指定されている場合は、その値が優先されます。(ex): {"can_delete": false, "can_edit_data": false, "can_edit_additional": false}

--parallelism

Possible choices: 2, 3, 4

並列度。指定しない場合は、逐次的に処理します。ただし --annotation にZIPファイルを指定した場合は、--parallelism を指定できません。また、--parallelism を指定した場合は、--yes も指定してください。

global optional arguments#

--yes

処理中に現れる問い合わせに対して、常に yes と回答します。

--endpoint_url

Annofab WebAPIのエンドポイントを指定します。

Default: 'https://annofab.com'

--annofab_user_id

Annofabにログインする際のユーザーID

--annofab_password

Annofabにログインする際のパスワード

--annofab_pat

Annofabにログインする際のパーソナルアクセストークン

--logdir

ログファイルを保存するディレクトリを指定します。

Default: .log

--disable_log

ログを無効にします。

--debug

HTTPリクエストの内容やレスポンスのステータスコードなど、デバッグ用のログが出力されます。

オーナロールを持つユーザで実行してください。