# Normal Object Detection

YOLO 기반 일반 객체 탐지 스크립트입니다. 원격 이미지 URL을 받아 추론하고, 결과를 JSON으로 출력합니다.

## 요구 사항

- Python 3.11+
- [uv](https://docs.astral.sh/uv/) (권장)

## 설치

```bash
uv sync
```

## 사용법

```bash
uv run start.py --image_url "https://example.com/image.jpg"
```

- `--image_url`: 추론할 이미지 URL (필수)
- 모델: `weights/yolo26m.pt` (Ultralytics YOLO, COCO 80종 탐지)
- 이미지는 `image.jpg`로 저장되고, 탐지 결과 이미지는 `*_marked.jpg`로 저장됩니다.

## 출력

표준 출력으로 JSON이 출력됩니다.

| 필드 | 설명 |
|------|------|
| `path` | 입력 이미지 경로 |
| `marked_path` | 바운딩 박스가 그려진 이미지 경로 |
| `shape` | 이미지 크기 (width, height) |
| `speed_ms` | 추론 속도 (ms) |
| `detections` | 탐지 객체 목록 (클래스, 신뢰도, `xywh` 박스) |
| `image_url` | 이미지 경로 |

---

## ClearML 자동 연동 (시스템 생성)

> 아래 내용은 커스텀 UI·ClearML Agent 연동 시 **시스템이 자동으로 처리**하는 부분입니다.  
> 개발자는 `start.py`만 유지하면 되며, `main.py`는 UI 입력에 따라 자동 생성됩니다.

### 파일 역할

| 파일 | 역할 | 관리 |
|------|------|------|
| `start.py` | 추론·결과 처리 (`main(image_url)`) | 개발자가 Git에 커밋 |
| `main.py` | ClearML Task 초기화, input/output 연동 | 시스템이 자동 생성 |

### Agent 실행

```bash
uv run main.py --image_url "https://example.com/image.jpg"
```

실행 시 ClearML Task가 초기화되고, `start.main()` 결과가 아티팩트로 업로드됩니다.

- **Project**: `Normal_Object_Detection`
- **Task**: `model-yolo26-human`
- **Artifact**: `final_result` (`output`, `status: PASS`)

Agent 머신에는 ClearML 서버 연결 설정이 필요합니다 (`clearml-init`).

### 워크플로우

Git 업로드, UI 입력, `main.py` 생성, ClearML Task/Agent 연동까지의 순차 절차는 [WORKFLOW.md](./WORKFLOW.md)를 참고하세요.
