---
title: 最初のシーンをアップロード
slug: api-guide/ja/i7_8F6wj65oDAgWtJo3Ps
docTags: 
createdAt: 2024-12-06T10:04:28.454Z
---

Kognicプラットフォームに生データをアップロードする際は、**シーン**の形式で行う必要があります。シーンとは、画像、点群、その他のセンサーデータなど、さまざまなソースからのデータの集合です。

このガイドでは、2D（カメラのみ）または3D（カメラおよびLiDAR/RADAR）で最初のシーンをアップロードする手順を説明します。

## 前提条件

[クイックスタート](docId\:WYm9o4UavbHvEioJEw8Ze)ガイドを完了し、`kognic-io`ライブラリをインストール済みである必要があります。複数のワークスペースにアクセスできるユーザーは、データのアップロード先となるワークスペースを指定する必要があります（[高度な設定](docId\:qTiR2BROmDZhuva3CAtLg)を参照）。

## コード例

:::::ExpandableHeading
### 2Dシーンのアップロード

2Dシーンをアップロードするには、生画像をローカルマシンに用意する（リモートデータの場合は[概要](docId\:M9gJ_7GE3M0jf7hvLohJ2)を作成する）必要があります。以下の2つのステップで行います：

1. Pythonでシーンオブジェクトを構築する
2. シーンオブジェクトをKognicプラットフォームにアップロードする

以下にいくつかのケースの例を示します。

::::Tabs
:::Tab{title="画像1枚"}
```python
from kognic.io.client import KognicIOClient
from kognic.io.model.scene.cameras import Cameras, Frame
from kognic.io.model.scene.resources import Image

# 1. Build scene object
scene = Cameras(
    external_id="my-first-scene",
    frame=Frame(images=[Image(filename="path/to/image.jpg")])
)

# 2. Upload scene
client = KognicIOClient()
scene_uuid = client.cameras.create(scene).scene_uuid
print("Scene uploaded, got uuid:", scene_uuid)
```
:::

:::Tab{title="複数の画像"}
```python
from kognic.io.client import KognicIOClient
from kognic.io.model.scene.cameras import Cameras, Frame
from kognic.io.model.scene.resources import Image

# 1. Build scene object
scene = Cameras(
    external_id="my-first-scene",
    frame=Frame(
        images=[
          # Sensor names must be unique
          Image(sensor_name = "CAM1", filename="path/to/image1.jpg"),
          Image(sensor_name = "CAM2", filename="path/to/image2.jpg")
        ],
    )
)

# 2. Upload scene
client = KognicIOClient()
scene_uuid = client.cameras.create(scene).scene_uuid
print("Scene uploaded, got uuid:", scene_uuid)
```
:::

:::Tab{title="シーケンス"}
```python
from kognic.io.client import KognicIOClient
from kognic.io.model.scene.cameras_sequence import CamerasSequence, Frame
from kognic.io.model.scene.resources import Image

# 1. Build scene object
scene = CamerasSequence(
    external_id="my-first-scene",
    frames=[
        # Relative timestamps must be unique and strictly increasing
        Frame(
            relative_timestamp=0,
            frame_id="1",
            images=[Image(filename="path/to/image1.jpg")],
        ),
        Frame(
            relative_timestamp=100,
            frame_id="2",
            images=[Image(filename="path/to/image2.jpg")],
        ),
        Frame(
            relative_timestamp=200,
            frame_id="3",
            images=[Image(filename="path/to/image3.jpg")],
        ),
    ]
)

# 2. Upload scene
client = KognicIOClient()
scene_uuid = client.cameras_sequence.create(scene).scene_uuid
print("Scene uploaded, got uuid:", scene_uuid)
```
:::
::::
:::::

:::::ExpandableHeading
### 2D/3Dシーンのアップロード

2D/3Dシーンをアップロードするには、生画像と点群をローカルマシンに用意する（リモートデータの場合は[概要](docId\:M9gJ_7GE3M0jf7hvLohJ2)を作成する）必要があります。さらに、キャリブレーションデータも必要です。以下の3つのステップで行います：

1. [キャリブレーション概要](docId:40uJEbw5cST4e4djxsgty)を作成する
2. 前のステップで作成したキャリブレーションを参照して、Pythonでシーンオブジェクトを構築する
3. シーンオブジェクトをKognicプラットフォームにアップロードする

以下にいくつかのケースの例を示します。

::::Tabs
:::Tab{title="画像1枚"}
```python
from kognic.io.client import KognicIOClient
from kognic.io.model.calibration import SensorCalibration, PinholeCalibration, LidarCalibration
from kognic.io.model.scene.lidars_and_cameras import LidarsAndCameras, Frame
from kognic.io.model.scene.resources import Image, PointCloud

client = KognicIOClient()

# 1. Create calibration (see calibration section for more details)
sensor_calibration = SensorCalibration(
    external_id = "my-first-calibration",
    calibration = {
        "CAM": PinholeCalibration(...),
        "lidar": LidarCalibration(...)
    }
)
created_calibration = client.calibration.create_calibration(sensor_calibration)

# 2. Build scene object
scene = LidarsAndCameras(
    external_id=f"my-first-scene",
    calibration_id = created_calibration.id,
    frame=Frame(
        images=[Image(sensor_name = "CAM", filename="path/to/image.jpg")],
        point_clouds=[PointCloud(sensor_name = "lidar", filename="path/to/pointcloud.pcd")]
    )
)

# 3. Upload scene
scene_uuid = client.lidars_and_cameras.create(scene).scene_uuid
print("Scene uploaded, got uuid:", scene_uuid)
```
:::

:::Tab{title="複数の画像"}
```python
from kognic.io.client import KognicIOClient
from kognic.io.model.calibration import SensorCalibration, PinholeCalibration, LidarCalibration
from kognic.io.model.scene.lidars_and_cameras import LidarsAndCameras, Frame
from kognic.io.model.scene.resources import Image, PointCloud

client = KognicIOClient()

# 1. Create calibration (see calibration section for more details)
sensor_calibration = SensorCalibration(
    external_id = "my-first-calibration",
    calibration = {
        "CAM1": PinholeCalibration(...),
        "CAM2": PinholeCalibration(...),
        "lidar": LidarCalibration(...)
    }
)
created_calibration = client.calibration.create_calibration(sensor_calibration)

# 2. Build scene object
scene = LidarsAndCameras(
    external_id="my-first-scene",
    calibration_id = created_calibration.id,
    frame=Frame(
        images=[
          Image(sensor_name = "CAM1", filename="path/to/image1.jpg"),
          Image(sensor_name = "CAM2", filename="path/to/image2.jpg"),
        ],
        point_clouds=[PointCloud(sensor_name = "lidar", filename="path/to/pointcloud.pcd")]
    )
)

# 3. Upload scene
client = KognicIOClient()
scene_uuid = client.lidars_and_cameras.create(scene).scene_uuid
print("Scene uploaded, got uuid:", scene_uuid)
```
:::

:::Tab{title="シーケンス"}
```python
from kognic.io.client import KognicIOClient
from kognic.io.model.calibration import SensorCalibration, PinholeCalibration, LidarCalibration
from kognic.io.model.scene.lidars_and_cameras_sequence import LidarsAndCamerasSequence, Frame
from kognic.io.model.scene.resources import Image, PointCloud

client = KognicIOClient()

# 1. Create calibration (see calibration section for more details)
calibration = { "CAM": PinholeCalibration(...), "lidar": LidarCalibration(...) }
sensor_calibration = SensorCalibration(
    external_id = "my-first-calibration",
    calibration = {
        "CAM": PinholeCalibration(...),
        "lidar": LidarCalibration(...)
    }
)
created_calibration = client.calibration.create_calibration(sensor_calibration)

# 2. Build scene object
scene = LidarsAndCamerasSequence(
    external_id="my-first-scene",
    calibration_id = created_calibration.id,
    frames=[
        # Relative timestamps must be unique and strictly increasing
        Frame(
            relative_timestamp=0,
            frame_id="1",
            images=[Image(sensor_name = "CAM", filename="path/to/image1.jpg")],
            point_clouds=[PointCloud(sensor_name = "lidar", filename="path/to/pointcloud1.pcd")]
        ),
        Frame(
            relative_timestamp=100,
            frame_id="2",
            images=[Image(sensor_name = "CAM", filename="path/to/image2.jpg")],
            point_clouds=[PointCloud(sensor_name = "lidar", filename="path/to/pointcloud2.pcd")]
        ),
        Frame(
            relative_timestamp=200,
            frame_id="3",
            images=[Image(sensor_name = "CAM", filename="path/to/image3.jpg")],
            point_clouds=[PointCloud(sensor_name = "lidar", filename="path/to/pointcloud3.pcd")]
        ),
    ]
)

# 3. Upload scene
scene_uuid = client.lidars_and_cameras_sequence.create(scene).scene_uuid
print("Scene uploaded, got uuid:", scene_uuid)
```
:::
::::

:::hint{type="info"}
複数の点群もサポートされていますが、もう少し多くのデータが必要になるため、上記の例には含まれていません。詳細については、[モーション補償](docId:-UnWSC-cucoYH-mU9JOsc)セクションを参照してください。
:::
:::::

:::ExpandableHeading
### ZODデータを使用したアップロード

[Zenseact Open Dataset（ZOD）](https://zod.zenseact.com/)のデータを使用してシーンをアップロードするためのサンプルコードとチュートリアルを用意しています。2D、3D、および集約3Dシーンに対応しています。ガイドドキュメントとサンプルコードについては、[ZODデータのアップロード](docId:879aQJOu83xuHOGQu-0Yr)をご覧ください。

ZODデータをダウンロード済みで、Kognic APIの認証情報をお持ちであれば、サンプルをそのまま実行して、機能するシーンを作成できます。
:::

::::ExpandableHeading
### バケット内のファイルからシーンを作成する

:::hint{type="info"}
`kognic-io>=2.5.1`でサポートされています。
:::

この機能を使用するには、[データインテグレーション](docId\:L93_PNIEAhqPK-6j-OuEF)を設定しておく必要があります。

Kognicがサポートする形式のデータをバケットに保存しており、そのバケットに対してデータインテグレーションを設定している場合は、スクリプトでデータをダウンロードしてアップロードする代わりに、バケット内のファイルへのパスを指定してシーンを作成できます。この例は完全な2D+3Dシーンですが、点群、IMUデータ、自車両ポーズを削除することで、2Dのみのシーンに縮小できます。

この方法では、シーンタイプを指定する必要のない新しいシーンモデルを使用します。シーンタイプは画像と点群の有無から推定され、この方法で作成されたシーンは常に「シーケンス」タイプのシーンになります。

コード例と詳細については、[シーンの例](docId\:ygagBKU3DiN20vGZFktoC)を参照してください。

この方法でアップロードするIMUデータは、以下の形式のJSONである必要があります：

```javascript
[
 {
  "postion": {
   "x": 0.0,
   "y": 0.0,
   "z": 0.0
  },
  "rotationQuaternion": {
   "w": 0.0,
   "x": 0.0,
   "y": 0.0,
   "z": 0.0
  }
  "timestamp": <unix timestamp in nano seconds>
 },
 ...
]
```
::::
