{"id":31062158,"url":"https://github.com/kurusugawa-computer/annofab-coco-tools","last_synced_at":"2025-09-15T11:49:40.554Z","repository":{"id":310164092,"uuid":"1038354474","full_name":"kurusugawa-computer/annofab-coco-tools","owner":"kurusugawa-computer","description":"Annofab形式のアノテーションとCOCOデータセット形式のアノテーションを相互に変換するツール群","archived":false,"fork":false,"pushed_at":"2025-08-24T15:10:58.000Z","size":184,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-24T20:07:28.520Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kurusugawa-computer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-15T03:35:58.000Z","updated_at":"2025-08-24T15:11:02.000Z","dependencies_parsed_at":"2025-08-16T07:40:42.380Z","dependency_job_id":null,"html_url":"https://github.com/kurusugawa-computer/annofab-coco-tools","commit_stats":null,"previous_names":["kurusugawa-computer/annofab-coco-tools"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kurusugawa-computer/annofab-coco-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurusugawa-computer%2Fannofab-coco-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurusugawa-computer%2Fannofab-coco-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurusugawa-computer%2Fannofab-coco-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurusugawa-computer%2Fannofab-coco-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kurusugawa-computer","download_url":"https://codeload.github.com/kurusugawa-computer/annofab-coco-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurusugawa-computer%2Fannofab-coco-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275253515,"owners_count":25432102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-15T02:00:09.272Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-15T11:49:36.443Z","updated_at":"2025-09-15T11:49:40.479Z","avatar_url":"https://github.com/kurusugawa-computer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# annofab-coco-tools\nAnnofab形式のアノテーションとCOCOデータセット形式のアノテーションを相互に変換するツール群\n\n# Requirements\n* Python 3.12+\n\n# Install\n```\n$ uv sync\n```\n\n# Usage\n\n## COCOデータセット(Instances)をAnnofabに登録する\n\n### Annofabに画像プロジェクトを作成する\nhttps://annofab.readme.io/docs/create-project を参照して、画像プロジェクトを作成します。\n\n\n### Annofabに入力データを作成する\n\nCOCOデータセットのimagesから、Annofabに入力データを作成します。\nAnnofabの入力データの`input_data_name`は、COCOデータセットの`image.file_name`を格納します。\n`input_data_id`は、`input_data_name`とほとんど同じ値になります（IDに使えない文字は適切に変換されます）。\n\n```\n$ uv run python -m src.create_af_input_data --coco_instances_json  resources/coco_instances.json \\\n --image_dir resources/images/ \\\n --af_project_id ${AF_PROJECT_ID} \\\n \n```\n\n#### Help\n\n```\n$ uv run python -m src.create_af_input_data --help\nusage: create_af_input_data.py [-h] [--verbose] --coco_instances_json COCO_INSTANCES_JSON --image_dir IMAGE_DIR --af_project_id AF_PROJECT_ID\n                               [--coco_image_file_name COCO_IMAGE_FILE_NAME [COCO_IMAGE_FILE_NAME ...]] [--temp_dir TEMP_DIR]\n\nCOCOデータセットのimagesから、Annofabに入力データを作成します。Annofabの入力データの`input_data_name`は、COCOデータセットの`image.file_name`を格納します。`input_data_id`は、`input_data_name`とほとんど\n同じ値になります。\n\noptions:\n  -h, --help            Show this help message and exit.\n  --verbose             詳細なログを出力します。 (default: False)\n  --coco_instances_json COCO_INSTANCES_JSON\n                        入力情報であるCOCOデータセット形式アノテーションのJSONファイルのパス。`images`を参照します。 (required, type: \u003cclass 'Path'\u003e)\n  --image_dir IMAGE_DIR\n                        COCOデータセットの画像ファイルが存在するディレクトリのパス。 (required, type: \u003cclass 'Path'\u003e)\n  --af_project_id AF_PROJECT_ID\n                        AnnofabプロジェクトのID (required, type: str)\n  --coco_image_file_name COCO_IMAGE_FILE_NAME [COCO_IMAGE_FILE_NAME ...]\n                        作成対象のCOCOのimageのfile_name (type: str, default: null)\n  --temp_dir TEMP_DIR   一時ディレクトリのパス (type: \u003cclass 'Path'\u003e, default: null)\n```\n\n### Annofabにタスクを作成する\n\nAnnofabにタスクを作成します。1個のタスクには1個の入力データが含まれています。task_idはinput_data_idと同じ値です。\n\n```\n# 入力データ全件ファイルをダウンロードする\n# 入力データ作成直後は、作成した入力データがファイルに反映されないので、`--latest`オプションを指定する\n$ uv run annofabcli input_data download --project_id ${AF_PROJECT_ID} --output out/af_input_data.json --latest\n\n$ uv run python -m src.create_af_task --af_input_data_json out/af_input_data.json \\\n --af_project_id ${AF_PROJECT_ID} \n \n```\n\n#### Help\n\n```\n$ uv run python -m src.create_af_task --help\nusage: create_af_task.py [-h] [--verbose] --af_project_id AF_PROJECT_ID (--af_input_data_json AF_INPUT_DATA_JSON |\n                         --af_input_data_id AF_INPUT_DATA_ID [AF_INPUT_DATA_ID ...]) [--temp_dir TEMP_DIR]\n\nAnnofabにタスクを作成します。1個のタスクには1個の入力データが含まれています。task_idはinput_data_idと同じ値です。\n\noptions:\n  -h, --help            show this help message and exit\n  --verbose             詳細なログを出力します。\n  --af_project_id AF_PROJECT_ID\n                        AnnofabプロジェクトのID\n  --af_input_data_json AF_INPUT_DATA_JSON\n                        Annofabの入力データ全件ファイルのパス。`input_data_id`を参照するのに利用します。`annofabcli input_datadownload`コマンドでダウンロードできます。ダウンロードした入力データ全件ファイルに、作成した入力データの情報が含まれていない場合は、`--latest`オプションを付与して、最新の入力データ全件ファイルをダウンロードしてください。\n  --af_input_data_id AF_INPUT_DATA_ID [AF_INPUT_DATA_ID ...]\n                        指定した`input_data_id`からタスクを作成します。\n  --temp_dir TEMP_DIR   一時ディレクトリのパス\n```\n\n### COCOデータセットのannotationをAnnofab形式に変換する\n\n\n```\n# タスク全件ファイルをダウンロードする\n# タスク作成直後は、作成したタスクがファイルに反映されないので、`--latest`オプションを指定する\n$ uv run annofabcli task download --project_id ${AF_PROJECT_ID} --output out/af_task.json --latest\n\n$ uv run python -m src.convert_coco_instances_annotation_to_af --coco_instances_json  resources/coco_instances.json \\\n --af_task_json out/af_task.json \\\n --af_input_data_json out/af_input_data.json \\\n --coco_annotation_type bbox \\\n --output_dir out/af_annotation/\n\n$ tree out/af_annotation \nout/af_annotation \n└── 000000037777.jpg\n    └── 000000037777.jpg.json\n```\n\n\n`--coco_annotation_type`には以下の値を選択できます。\n\n* `bbox`\n* `polygon_segmentation`：`iscrowd==0`のポリゴン形式のsegmentation。ただしAnnofabはマルチポリゴンに対応していないので、マルチポリゴンは複数のインスタンスに分かれてAnnofabに登録されます。\n* `rle_segmentation`：`iscrowd==1`のRLE形式のsegmentation\n\n\n#### Help\n```\n$ uv run python -m src.convert_coco_instances_annotation_to_af --help\nusage: convert_coco_instances_annotation_to_af.py [-h] [--verbose] --coco_instances_json COCO_INSTANCES_JSON [--af_task_json AF_TASK_JSON]\n                                                  [--af_input_data_json AF_INPUT_DATA_JSON]\n                                                  [--coco_annotation_type {bbox,polygon_segmentation,rle_segmentation}]\n                                                  [--coco_image_file_name COCO_IMAGE_FILE_NAME [COCO_IMAGE_FILE_NAME ...]]\n                                                  [--coco_category_name COCO_CATEGORY_NAME [COCO_CATEGORY_NAME ...]] [-o OUTPUT_DIR]\n\nCOCOデータセット（Instances）に含まれるアノテーションを、Annofab形式に変換します。出力結果は`annofabcli annotation\nimport`コマンドでアノテーションを登録できます。COCOのimage.file_nameはAnnofabのinput_data_name, COCOのcategory.nameはAnnofabのラベル名(英語)として変換します。\n\noptions:\n  -h, --help            Show this help message and exit.\n  --verbose             詳細なログを出力します。 (default: False)\n  --coco_instances_json COCO_INSTANCES_JSON\n                        入力情報であるCOCOデータセット（Instances）形式アノテーションのJSONファイルのパス。`annotations`,`images`,`categories`を参照します。 (required, type: \u003cclass'Path'\u003e)\n  --af_task_json AF_TASK_JSON\n                        Annofabのタスク全件ファイルのパス。`task_id`と`input_data_id`の関係を参照するのに利用します。未指定の場合は、`task_id`は`input_data_id`と同じ値だとみなして変換します。`annofabcli task download`コマンドでダウンロードできます。ダウンロードしたタスク全件ファイルに、作成したタスクの情報が含まれていない場合は、`--latest`オプションを付与して、最新のタスク全件ファイルをダウンロードしてください。\n                        (type: \u003cclass 'Path'\u003e, default: null)\n  --af_input_data_json AF_INPUT_DATA_JSON\n                        Annofabの入力データ全件ファイルのパス。`input_data_name`と`input_data_id`の関係を参照するのに利用します。未指定の場合は、`input_data_id`は`input_data_name`と同じ値だとみなして変換します。`annofabcli input_data download`コマンドでダウンロードできます。 \n                        (type: \u003cclass 'Path'\u003e, default: null)\n  --coco_annotation_type {bbox,polygon_segmentation,rle_segmentation}\n                        変換対象のアノテーションの種類。`bbox`:バウンディングボックス, `polygon_segmentation`:`iscrowd=0`のポリゴン形式のsegmentation,\n                        `rle_segmentation`:`iscrowd=1`のRLE形式のsegmentation (required, type: str, default: bbox)\n  --coco_image_file_name COCO_IMAGE_FILE_NAME [COCO_IMAGE_FILE_NAME ...]\n                        変換対象のCOCOのimageのfile_name (type: str, default: null)\n  --coco_category_name COCO_CATEGORY_NAME [COCO_CATEGORY_NAME ...]\n                        変換対象のCOCOのcategory_name (type: str, default: null)\n  -o, --output_dir OUTPUT_DIR\n```\n\n### Annofabプロジェクにトアノテーション仕様を作成する\n\n以下の通り、アノテーション仕様を作成します。\n\n* COCOのcategory_nameを、Annofabのラベル名（英語）にする\n* アノテーションの種類は、以下のいずれかにする\n    * 矩形\n    * ポリゴン\n    * 塗りつぶし（塗りつぶしV2ではない）\n* (任意) 以下の属性を追加する\n    * 属性名（英語）が`annotation_id`で、属性の種類は「自由記述(1行)」\n    * 属性名（英語）が`image_id`で、属性の種類は「自由記述(1行)」\n\n\n\n### Annofab形式のアノテーションをAnnofabプロジェクトにインポートする\n\n\n```\n$ uv run annofabcli annotation import --project_id ${AF_PROJECT_ID} \\\n --annotation out/af_annotation \n```\n\n\n\n## Annofab形式のアノテーションをCOCO形式(Instances)に変換する\n\n### Annofabからアノテーションをダウンロードする\n\n```\n$ uv run annfoabcli annotation download --output out/af_annotation.zip\n```\n\n\n### Annofab形式のアノテーションをCOCO形式（Instances）に変換する\n\n\n```\n$ uv run python -m src.convert_af_annotation_to_coco_instances --af_annotation_zip_or_dir out/af_annotation.zip \\\n --coco_instances_json out/coco_instances.json \\\n --clip_annotation_to_image\n\n``` \n\n#### 備考\n* `out/coco_instances.json`には、`categories`が記載されている必要があります。\n* Annofabの「塗りつぶし」アノテーションは、Uncompressed RLEに変換されます。\n* Annofabはマルチポリゴンに対応していないので、マルチポリゴンには変換されません。\n\n\n#### Help\n\n```\n$ uv run python -m src.convert_af_annotation_to_coco_instances -h\nusage: convert_af_annotation_to_coco_instances.py [-h] [--verbose] --af_annotation_zip_or_dir AF_ANNOTATION_ZIP_OR_DIR [--af_input_data_json AF_INPUT_DATA_JSON]\n                                                  --coco_instances_json COCO_INSTANCES_JSON [-o OUTPUT_COCO_INSTANCES_JSON] [--clip_annotation_to_image]\n                                                  [--af_task_id AF_TASK_ID [AF_TASK_ID ...]] [--af_input_data_id AF_INPUT_DATA_ID [AF_INPUT_DATA_ID ...]]\n                                                  [--af_label_name AF_LABEL_NAME [AF_LABEL_NAME ...]] [--af_task_phase AF_TASK_PHASE] [--af_task_status AF_TASK_STATUS]\n\nAnnofab形式のアノテーションを、COCOデータセット（Instances）形式に変換します。Annofabのinput_data_nameはCOCOのimage.file_nameに、Annofabのラベル名(英語)はCOCOのcategory.nameに変換します。\n\noptions:\n  -h, --help            Show this help message and exit.\n  --verbose             詳細なログを出力します。 (default: False)\n  --af_annotation_zip_or_dir AF_ANNOTATION_ZIP_OR_DIR\n                        Annofab形式のアノテーションZIPファイルのパス。またはZIPファイルを展開したディレクトリのパス。`annofabcli annotation download`コマンドでアノテーションZIPファイルをダウンロードできます。 (required, type: \u003cclass 'Path'\u003e)\n  --af_input_data_json AF_INPUT_DATA_JSON\n                        Annofabの入力データ全件ファイルのパス。COCO形式のimagesを生成するのに利用します。`annofabcli input_data download`コマンドでダウンロードできます。未指定の場合は、'--coco_instances_json'に指定したJSONファイルの'images'を利用します。 (type: \u003cclass\n                        'Path'\u003e, default: null)\n  --coco_instances_json COCO_INSTANCES_JSON\n                        入力情報であるCOCOデータセット（Instances）形式アノテーションのJSONファイルのパス。`categories`と`images`(オプショナル)を参照します。 (required, type: \u003cclass 'Path'\u003e)\n  -o, --output_coco_instances_json OUTPUT_COCO_INSTANCES_JSON\n                        変換後のCOCOデータセット（Instances）形式アノテーションの出力先JSONファイルのパス (required, type: \u003cclass 'Path'\u003e)\n  --clip_annotation_to_image\n                        指定すると、アノテーションが画像からはみ出さないようにクリッピングします。Annofabは矩形やポリゴンは画像外に作図できます。ただし、塗りつぶしアノテーションは画像外に作図できません。 (default: False)\n  --af_task_id AF_TASK_ID [AF_TASK_ID ...]\n                        変換対象のAnnofabのタスクのID (type: str, default: null)\n  --af_input_data_id AF_INPUT_DATA_ID [AF_INPUT_DATA_ID ...]\n                        変換対象のAnnofabの入力データのID (type: str, default: null)\n  --af_label_name AF_LABEL_NAME [AF_LABEL_NAME ...]\n                        変換対象のAnnofabのラベル名（英語） (type: str, default: null)\n  --af_task_phase AF_TASK_PHASE\n                        変換対象のAnnofabのタスクのフェーズ (type: str, default: null)\n  --af_task_status AF_TASK_STATUS\n                        変換対象のAnnofabのタスクのステータス (type: str, default: null)\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurusugawa-computer%2Fannofab-coco-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkurusugawa-computer%2Fannofab-coco-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurusugawa-computer%2Fannofab-coco-tools/lists"}