프로젝트에서 사용할 라벨링 유형을 선택하고, 분류 클래스 및 속성을 설정하는 단계입니다.
## 라벨링 유형 선택
라벨링 유형은 라벨링 방법을 지칭하며, 단독 또는 복합으로 선택하여 라벨링 작업을 진행할 수 있습니다.
:::note[어노테이터별 라벨링 유형]
사용 가능한 라벨링 유형은 프로젝트 생성 시 선택한 어노테이터 카테고리에 따라 다릅니다.
:::
## 어노테이터별 라벨링 유형 목록
각 어노테이터 카테고리별로 사용 가능한 라벨링 유형(API 값)은 다음과 같습니다.
| 어노테이터 | 사용 가능한 라벨링 유형 |
| ------------ | ------------------------------------------------------------------------------------------------------------------ |
| **이미지** | `annotationGroup`, `classification`, `bounding_box`, `polygon`, `polyline`, `keypoint`, `relation`, `segmentation` |
| **비디오** | `annotationGroup`, `classification`, `segmentation`, `bounding_box` |
| **오디오** | `annotationGroup`, `classification`, `segmentation` |
| **PCD** | `3d_bounding_box`, `3d_segmentation` |
| **텍스트** | `classification`, `relation`, `named_entity` |
| **프롬프트** | `classification`, `prompt`, `answer` |
## 프롬프트 어노테이터 추가 설정
프롬프트 어노테이터를 선택한 경우, LLM(대형 언어모델) 관련 추가 설정이 제공됩니다.
| 항목 | 설명 |
| ---------------------- | --------------------------------------- |
| **LLM API 활성화** | 대형 언어모델 API 사용 여부 |
| **LLM 모델 추가** | Gemini, Mistral, ChatGPT 등 모델 선택 |
| **사전 맥락 프롬프트** | LLM에 제공할 사전 컨텍스트 설정 |
| **메타정보 토픽 키** | 메타 데이터에서 토픽으로 사용할 키 입력 |
## 클래스 설정
클래스는 라벨링할 대상을 카테고리화하는 개념입니다. 선택한 각 라벨링 유형별로 클래스를 정의합니다.
| 항목 | 설명 | 비고 |
| ------------- | -------------------------- | --------------------------- |
| **색상** | 어노테이터에서 표시할 색상 | 시각적 구분용 |
| **코드** | 데이터베이스 저장용 명칭 | 영문/숫자만 가능, 변경 불가 |
| **이름** | 어노테이터에 노출할 이름 | 작업자에게 표시 |
| **기본 여부** | 자동 선택 설정 | 기본 클래스 지정 |
:::caution[코드 변경 불가]
클래스 코드는 데이터베이스 저장에 사용되므로 한번 설정하면 변경할 수 없습니다. 영문과 숫자만 사용할 수 있습니다.
:::
## 속성 설정
각 클래스에 대해 속성을 추가하여 라벨링 시 추가 정보를 입력받을 수 있습니다.
| 항목 | 설명 |
| ------------- | ------------------------ |
| **코드** | 속성 식별용 코드 |
| **이름** | 작업자에게 표시할 속성명 |
| **필수 여부** | 라벨링 시 필수 입력 여부 |
| **위젯 유형** | 입력 방식 선택 |
### 위젯 유형
| 위젯 | 설명 |
| -------------------------- | ------------------------- |
| **단일 선택 (Select box)** | 드롭다운에서 하나 선택 |
| **단일 선택 (Radio)** | 라디오 버튼으로 하나 선택 |
| **다중 선택** | 여러 개 동시 선택 가능 |
| **텍스트** | 자유 텍스트 입력 |
## 옵션 설정
단일 선택 및 다중 선택 위젯에는 옵션(선택지)을 추가합니다.
| 항목 | 설명 |
| ------------- | ------------------------ |
| **색상** | 옵션 표시 색상 |
| **코드** | 옵션 식별용 코드 |
| **이름** | 작업자에게 표시할 옵션명 |
| **기본 여부** | 자동 선택 설정 |
### 클래스-속성-옵션 구조 예시
```
자동차 (클래스)
└── 종류 (속성)
├── 승용차 (옵션)
├── 승합차 (옵션)
└── 화물차 (옵션)
```
## 대표 속성
어노테이션의 색상, 모양, 라벨 표시 기준이 되는 속성을 대표 속성으로 설정할 수 있습니다.
## API 흐름
"다음 단계" 클릭 시 라벨링 설정 데이터를 `configuration` 객체로 변환하여 서버에 전송합니다.
### 1. 사용 가능한 라벨링 유형 조회 — `GET /projects/categories/`
페이지 진입 시 어노테이터 카테고리별 사용 가능한 라벨링 유형 목록을 조회합니다.
**Request**
```
GET /projects/categories/
```
**Response (200 OK)**
```json
{
"image": {
"annotation_types": [
{
"name": "bounding_box",
"name_display": "바운딩박스",
"smart_tools": [...]
},
{
"name": "polygon",
"name_display": "폴리곤",
"smart_tools": []
}
]
},
"video": { ... },
"audio": { ... }
}
```
### 2. 단계별 데이터 검증 — `POST /projects/`
"다음 단계" 클릭 시 라벨링 설정을 `phase: 3`과 함께 `configuration` 객체로 전송합니다.
**Request**
```json
POST /projects/
{
"phase": 3,
"configuration": {
"schema_type": "dm_schema",
"classification": {
"bounding_box": {
"id": "uuid-1234",
"representativeCodes": ["class"],
"classification_schema": [
{
"id": "cls-001",
"code": "car",
"name": "자동차",
"value": "#FF0000",
"is_default": true,
"customFields": {},
"attributes": [
{
"code": "vehicle_type",
"name": "종류",
"widget": "select",
"is_required": true,
"options": [
{
"code": "sedan",
"name": "승용차",
"color": "#FF6B6B",
"is_default": true,
"customFields": {}
},
{
"code": "suv",
"name": "SUV",
"color": "#4ECDC4",
"is_default": false,
"customFields": {}
}
]
}
]
}
]
},
"classification": {
"id": "uuid-5678",
"representativeCodes": [],
"classification_schema": [...]
}
}
}
}
```
#### configuration 객체 구조
| 필드 | 타입 | 설명 |
| ---------------- | -------- | ----------------------------------------------- |
| `schema_type` | `string` | 스키마 유형. `"dm_schema"` 또는 `"json_schema"` |
| `classification` | `object` | 라벨링 유형별 분류 설정. 키는 라벨링 유형 코드 |
#### classification 항목 구조 (라벨링 유형별)
| 필드 | 타입 | 설명 |
| ----------------------- | ---------- | ------------------- |
| `id` | `string` | 고유 식별자 (UUID) |
| `representativeCodes` | `string[]` | 대표 속성 코드 목록 |
| `classification_schema` | `array` | 클래스 목록 |
#### classification_schema 항목 (클래스)
| 필드 | 타입 | 필수 | 설명 |
| -------------- | --------- | ---- | ---------------------------------- |
| `id` | `string` | 필수 | 클래스 고유 식별자 |
| `code` | `string` | 필수 | 클래스 코드 (영문/숫자, 변경 불가) |
| `name` | `string` | 필수 | 클래스 표시명 |
| `value` | `string` | 필수 | 클래스 색상 (HEX) |
| `is_default` | `boolean` | 필수 | 기본 클래스 여부 |
| `customFields` | `object` | 선택 | 커스텀 필드 (`shape` 등) |
| `attributes` | `array` | 필수 | 속성 목록 |
#### attributes 항목 (속성)
| 필드 | 타입 | 필수 | 설명 |
| ------------- | --------- | ---- | ------------------------------------------------------------------ |
| `code` | `string` | 필수 | 속성 코드 |
| `name` | `string` | 필수 | 속성 표시명 |
| `widget` | `string` | 필수 | 위젯 유형. `"select"` \| `"radio"` \| `"multi_select"` \| `"text"` |
| `is_required` | `boolean` | 필수 | 필수 입력 여부 |
| `options` | `array` | 필수 | 옵션 목록 (`text` 위젯의 경우 빈 배열) |
#### options 항목 (옵션)
| 필드 | 타입 | 필수 | 설명 |
| -------------- | --------- | ---- | --------------- |
| `code` | `string` | 필수 | 옵션 코드 |
| `name` | `string` | 필수 | 옵션 표시명 |
| `color` | `string` | 필수 | 옵션 색상 (HEX) |
| `is_default` | `boolean` | 필수 | 기본 선택 여부 |
| `customFields` | `object` | 선택 | 커스텀 필드 |
#### 프롬프트 어노테이터 추가 필드
프롬프트 카테고리의 경우 `configuration`에 아래 필드가 추가됩니다.
| 필드 | 타입 | 설명 |
| -------------------- | ---------- | ------------------------------------------------ |
| `gptOptions` | `string[]` | 활성화할 LLM 옵션 목록 |
| `llmItems` | `array` | LLM 모델 설정 목록 (Gemini, Mistral, ChatGPT 등) |
| `priorContextPrompt` | `string` | 사전 맥락 프롬프트 |
| `topicKeyInMeta` | `string` | 메타정보 토픽 키 |
**Response (201 Created)**
검증 성공 시 configuration 데이터가 반환됩니다.
**Error Response (400 Bad Request)**
```json
{
"configuration": ["유효하지 않은 설정입니다."]
}
```
### 3. 임시 저장 — `POST /drafts/`
검증 성공 후 이전 단계 데이터와 병합하여 Draft에 누적 저장합니다.
**Request**
```json
POST /drafts/
{
"target": "CREATE",
"data": {
"phase": 3,
"category": "image",
"title": "자동차 객체 검출 프로젝트",
"access_level": "public",
"data_collection": 1,
"configuration": {
"schema_type": "dm_schema",
"classification": { ... }
}
}
}
```
:::note[Draft 누적 저장]
1~2단계 데이터(title, access_level, data_collection 등)와 3단계 데이터(configuration)가 병합되어 저장됩니다.
:::
## 다음 단계로 이동
라벨링 설정을 완료한 후 **"다음 단계"** 버튼을 클릭하면 위 API 흐름을 거쳐 [작업 설정 단계](./workflow-setup)로 이동합니다.