돌아가기 이미지 어노테이터 스키마
## 이미지 어노테이터 전용 스키마

### 지원 도구(Tools)

| Tool Code         | 설명                | dependencies                |
| ----------------- | ------------------- | --------------------------- |
| `selection_tool`  | 선택 도구           | -                           |
| `bounding_box`    | 2D 바운딩 박스      | -                           |
| `cuboid`          | 2.5D 큐보이드       | -                           |
| `polygon`         | 다각형              | -                           |
| `polyline`        | 폴리라인            | -                           |
| `keypoint`        | 키포인트            | -                           |
| `segmentation`    | 시맨틱 세그멘테이션 | -                           |
| `relation`        | 관계                | -                           |
| `polygon_brush`   | 폴리곤 브러시       | polygon                     |
| `magic_wand`      | 마법 지팡이         | polygon                     |
| `polygon_ai`      | AI 폴리곤           | polygon                     |
| `auto_keypoint`   | 자동 키포인트       | keypoint                    |
| `correction-coin` | 수정 도구           | polygon, polyline, keypoint |

### 이미지 전용 extra (메타데이터)

| 키 예시 | 타입 | 설명 |
| --- | --- | --- |
| `imageWidth` | `number` | 원본 이미지 가로 해상도(px) |
| `imageHeight` | `number` | 원본 이미지 세로 해상도(px) |
| `cameraModel` | `string` | 촬영 기기·렌즈 정보 |
| `captureTime` | `string` | ISO-8601 촬영 시각 |

> 위 값들은 예시이며, 프로젝트 요구 사항에 따라 자유롭게 확장할 수 있습니다.


### annotationsData 구조 (도구별)

**Bounding Box:**

```json
{
  "id": "Cd1qfFQFI4",
  "coordinate": {
    "x": 215,
    "y": 242,
    "width": 225,
    "height": 189,
    "rotation": 0.5693 // 선택적, 라디안 단위
  }
}
```

**Cuboid:**

```json
{
  "id": "Gicwbgst4J",
  "coordinate": {
    "x": 67,
    "y": 1064,
    "top": -96,
    "left": 56,
    "width": 114,
    "height": 105,
    "perspectiveRatio": 1
  }
}
```

**Polygon / Polyline:**

```json
{
  "id": "AUjPgaMzQa",
  "coordinate": [
    { "x": 89, "y": 1403, "id": "5-Txfmv1Ez" },
    { "x": 177, "y": 1333, "id": "0xJ6ze1dcF" },
    { "x": 258, "y": 1268, "id": "BQAGLuOhzd" }
  ]
}
```

**Keypoint:**

```json
{
  "id": "aLtGYlQKHi",
  "coordinate": { "x": 235, "y": 1630 }
}
```

**Segmentation (데이터 압축 적용):**

> 📌 압축 필드(`isCompressed`, `compressionFormat`)는 [2.6 데이터 압축 공통 규격](#26-데이터-압축-공통-규격)을 따릅니다.

```json
{
  "id": "segmentation_001",
  "tool": "segmentation",
  "pixel_indices": [1, 5, 10, 3, 20, 8],
  "isCompressed": true,
  "compressionFormat": "rle"
}
```

| 필드                | 타입       | 설명                                        |
| ------------------- | ---------- | ------------------------------------------- |
| `pixel_indices`     | `number[]` | 세그멘테이션 픽셀 인덱스 (압축 시 RLE 포맷) |
| `isCompressed`      | `boolean`  | 압축 여부                                   |
| `compressionFormat` | `"rle"`    | 압축 포맷                                   |

**Classification (좌표 없음):**

```json
{
  "id": "jMpA5sHT5T"
}
```

### 샘플
다양한 도구(bounding_box, polygon, keypoint, segmentation, relation)와 그룹을 포함한 완전한 예제:
```json
{
  "extra": {
    "image_1": {
      "brightness": 0,
      "contrast": 0,
      "grayscale": false
    }
  },
  "relations": {
    "image_1": [
      {
        "id": "Cd1qfFQFI4AUjPgaMzQa",
        "tool": "relation",
        "isLocked": false,
        "isVisible": true,
        "isValid": true,
        "annotationId": "Cd1qfFQFI4",
        "targetAnnotationId": "AUjPgaMzQa",
        "classification": {
          "class": "관계_유형A",
          "relation_type": "contains"
        },
        "label": ["관계_유형A"]
      }
    ]
  },
  "annotations": {
    "image_1": [
      {
        "id": "Cd1qfFQFI4",
        "tool": "bounding_box",
        "isLocked": false,
        "isVisible": true,
        "isValid": true,
        "isDrawCompleted": true,
        "classification": {
          "class": "자동차",
          "color": "red",
          "size": "large"
        },
        "label": ["자동차", "red", "large"]
      },
      {
        "id": "AUjPgaMzQa",
        "tool": "polygon",
        "isLocked": false,
        "isVisible": true,
        "isValid": true,
        "isDrawCompleted": true,
        "classification": {
          "class": "도로",
          "surface_type": "asphalt"
        },
        "label": ["도로"]
      },
      {
        "id": "Gicwbgst4J",
        "tool": "cuboid",
        "isLocked": false,
        "isVisible": true,
        "isValid": true,
        "isDrawCompleted": true,
        "classification": {
          "class": "건물"
        },
        "label": ["건물"]
      },
      {
        "id": "aLtGYlQKHi",
        "tool": "keypoint",
        "isLocked": true,
        "isVisible": true,
        "isValid": true,
        "isDrawCompleted": true,
        "classification": {
          "class": "랜드마크",
          "landmark_type": "corner"
        },
        "label": ["랜드마크"]
      },
      {
        "id": "segmentation_001",
        "tool": "segmentation",
        "isLocked": false,
        "isVisible": true,
        "isValid": true,
        "isDrawCompleted": true,
        "classification": {
          "class": "하늘"
        },
        "label": ["하늘"]
      },
      {
        "id": "jMpA5sHT5T",
        "tool": "classification",
        "isLocked": false,
        "isVisible": true,
        "isValid": true,
        "classification": {
          "class": "이미지_분류",
          "weather": "sunny",
          "time_of_day": "afternoon"
        },
        "label": ["이미지_분류"]
      }
    ]
  },
  "annotationsData": {
    "image_1": [
      {
        "id": "Cd1qfFQFI4",
        "coordinate": {
          "x": 215,
          "y": 242,
          "width": 225,
          "height": 189,
          "rotation": 0.5693
        }
      },
      {
        "id": "AUjPgaMzQa",
        "coordinate": [
          { "x": 89, "y": 1403, "id": "5-Txfmv1Ez" },
          { "x": 177, "y": 1333, "id": "0xJ6ze1dcF" },
          { "x": 258, "y": 1268, "id": "BQAGLuOhzd" },
          { "x": 340, "y": 1350, "id": "CDAHLuOhzd" },
          { "x": 150, "y": 1450, "id": "DDAHLuOhzd" }
        ]
      },
      {
        "id": "Gicwbgst4J",
        "coordinate": {
          "x": 67,
          "y": 1064,
          "top": -96,
          "left": 56,
          "width": 114,
          "height": 105,
          "perspectiveRatio": 1
        }
      },
      {
        "id": "aLtGYlQKHi",
        "coordinate": {
          "x": 235,
          "y": 1630
        }
      },
      {
        "id": "segmentation_001",
        "pixel_indices": [0, 150, 320, 200, 1024, 300],
        "isCompressed": true,
        "compressionFormat": "rle"
      },
      {
        "id": "jMpA5sHT5T"
      }
    ]
  },
  "annotationGroups": {
    "image_1": [
      {
        "id": "group_001",
        "tool": "annotationGroup",
        "isLocked": false,
        "isValid": true,
        "annotationList": [
          {
            "annotationId": "Cd1qfFQFI4",
            "children": []
          },
          {
            "annotationId": "AUjPgaMzQa",
            "children": [
              {
                "annotationId": "aLtGYlQKHi",
                "children": []
              }
            ]
          }
        ],
        "classification": {
          "class": "차량_그룹",
          "group_type": "vehicle_context"
        }
      }
    ]
  },
  "assignmentId": 12345
}
```