---
title: ZOD 데이터 업로드
slug: api-guide/ko/zod
docTags: 
createdAt: 2024-12-16T14:25:49.000Z
---

이 튜토리얼에서는 [Zenseact Open Dataset (ZOD)](https://zod.zenseact.com/)를 사용해 다양한 [개요](docId\:xAwAXwb1W8z2C0XhkUn4P)을 업로드하는 방법을 안내합니다. 이 페이지의 목적은 레코딩 데이터를 Kognic 씬으로 변환하는 데 필요할 수 있는 몇 가지 단계를 보여주는 것입니다.

:::ExpandableHeading
## 사전 요구 사항 및 의존성

1\. 이 가이드를 따라 하려면 [Zenseact Open Dataset](https://zod.zenseact.com/download/)에서 데이터를 다운로드해야 합니다. 데이터는 다음과 같은 구조여야 합니다.

```text
zod
├── sequences
│   ├── 000000
│   ├── 000002
│   ├── ...
└── trainval-sequences-mini.json
```

2\. 또한 데이터를 읽기 위한 추상화 기능을 제공하는 ZOD Python 패키지를 PyPI에서 설치해야 합니다.

```bash
pip install zod
```

3\. Kognic 계정과 Kognic Python 클라이언트가 설치되어 있어야 합니다. 아직 이 작업을 완료하지 않았다면 [빠른 시작](docId\:J6rPQVoRf7BE4nA1DSk2P) 가이드를 읽어보세요.
:::

이 가이드는 [Kognic IO ZOD 예제 저장소](https://github.com/annotell/kognic-io-examples-python/blob/30c725ad38a1e5a163c28f10163022d4d522acc8/examples/zod)의 예제 코드를 사용하여 ZOD 데이터로 씬을 업로드하는 과정을 따릅니다. 이 저장소에는 이 페이지에 있는 모든 코드 조각의 전체 소스 파일이 포함되어 있습니다. 데이터가 준비되어 있고 Kognic 인증이 설정되어 있다면 이 예제들은 실행 가능합니다.

::::Tabs
:::Tab{title="Cameras Sequence"}
예제 코드는 최상위 수준에서 Kognic IO Client를 초기화한 다음, 함수를 사용하여 (여러 개일 수도 있는) 씬을 ZOD 데이터로부터 한 번에 생성합니다.

```python
if __name__ == "__main__":
    client = KognicIOClient()

    upload_cameras_sequence_scenes(
        zod_path=Path("/path/to/zod"),  # change me
        zod_version="mini",
        client=client,
        max_nr_scenes=1,
        max_nr_frames=10,
        dryrun=False,
    )
```
:::

:::Tab{title="Lidars and Cameras Sequence"}
이 예제는 카메라 전용 시퀀스와 대체로 같은 구조를 따르며 다음이 추가됩니다.

- 라이다 센서
- 2D와 3D [좌표계](docId:2yUiGk3M8sJI14b4ZEkqq) 간 투영을 가능하게 하는 [캘리브레이션 개요](docId\:wpoiuoy8AgVrpxZX-ORxm)
- ZOD의 패킹된(packed) NumPy 배열로부터의 포인트 클라우드 변환
- 각 프레임에 대한 자차 포즈 변환

앞서와 마찬가지로 최상위 수준에서 Kognic IO Client를 초기화한 다음, 함수를 사용하여 (여러 개일 수도 있는) 씬을 ZOD 데이터로부터 한 번에 생성합니다.
:::

:::Tab{title="Aggregated Lidars and Cameras Sequence"}
이 예제는 라이다-카메라 시퀀스 예제와 동일한 구조를 따릅니다.

[집계된 라이다 및 카메라 시퀀스](docId:6ZC0GQFQ9qOd5PM9nG0Ke)은 라이다+카메라 시퀀스 씬의 특수한 경우로, 라이다 데이터가 프레임 전체에 걸쳐 하나의 포인트 클라우드로 집계됩니다. 이를 통해 모든 프레임에 걸친 씬 전체를 나타내는 밀도 높은 정적 포인트 클라우드를 얻을 수 있습니다.

집계된 씬은 모든 프레임에 포인트 클라우드를 제공하여 Kognic 플랫폼이 집계를 처리하도록 하거나, 미리 집계한 후 첫 프레임에만 포인트 클라우드를 지정하고 이후 프레임에는 아무것도 지정하지 않는 방식으로 업로드할 수 있습니다.

ZOD 데이터의 경우 프레임별 포인트 클라우드만 있으므로, 이 예제는 모든 프레임에 포인트 클라우드를 업로드하고 집계는 플랫폼에 맡깁니다. 따라서 라이다-카메라 시퀀스 예제와 매우 유사하지만 다음과 같은 차이가 있습니다.

1\. 씬 타입이 다릅니다: LidarsAndCamerasSequence 대신 AggregatedLidarsAndCamerasSequence를 사용합니다.
:::
::::

```python
def convert_scene(zod_sequence: ZodSequence, external_id: str, max_nr_frames: int) -> AggregatedLidarsAndCamerasSequence:
    frames = convert_frames(zod_sequence, max_nr_frames)
    return AggregatedLidarsAndCamerasSequence(external_id=external_id, frames=frames, calibration_id="<to be set later>")
```

2\. `Frames`는 집계 씬 전용 타입입니다.

```python
frames.append(
    ALCSFrame(
        relative_timestamp=ns_to_ms(frame_ts_ns) - start_ts_ms,
        frame_id=str(frame_ts_ns),
        images=[convert_zod_camera_frame_to_image(camera_frame)],
        point_clouds=[point_cloud],
        ego_vehicle_pose=convert_to_ego_vehicle_pose(ego_pose),
        unix_timestamp=frame_ts_ns,
    )
)
```

3\. 자차 포즈 데이터가 필요합니다.

그 외 두 방식은 매우 유사합니다. 자세한 내용은 `Lidars and Cameras Sequence` 탭을 참고하세요.
