---
title: プレアノテーション
slug: api-guide/ja/ixJKUKzksfC6dvnlVy2ZS
docTags: 
createdAt: 2024-12-17T09:56:31.402Z
---

プレアノテーションはグランドトゥルース作成において多くの用途があります。プレアノテーション機能を使用すると、インプット内にすでに存在することがわかっているオブジェクトに関する情報を指定できます。お客様のユースケースに最適な活用方法については、アドバイザリーサービスチームまでお問い合わせください。

KognicプラットフォームはOpenLabelフォーマットのプレアノテーションのアップロードを[kognic-openlabelパッケージ](https://pypi.org/project/kognic-openlabel)を使用してサポートしています。

## kognic-ioクライアントを使用したプレアノテーションの作成

Kognicプラットフォームでプレアノテーションを使用するには、次の3つのステップが必要です。

1. 必要なデータをすべてアップロードしてシーンを作成する
2. 1つ以上のOpenLabelアノテーションをシーンに対するプレアノテーションとしてアップロードする
3. プレアノテーションを使用してシーンからインプットを作成する

これらのステップは、`create_inputs`関数を使用すると1回の呼び出しで複数回実行できることに注意してください。詳細は[シーンとインプットの操作](docId\:Mf7_5GLLQrKg_To-EV3yD)の「1回の呼び出しで複数のインプットを作成する」を参照してください。

また、シーンを作成するとすぐにシーンUUIDが返されます。このUUIDを使用すると、シーンの処理開始を待たずにプレアノテーションを作成できます。プレアノテーションは、シーンの処理が完了すると利用可能になります。

### 1. シーンの作成

まずシーンを作成します。

```python
# Create Scene but not input since we don't provide project or batch
scene_response = client.lidars_and_cameras_sequence.create(
  lidars_and_cameras_seq,
  dryrun=dryrun
)
```

シーン作成の完了を待機することもできます（[シーンとインプットの操作](docId\:Mf7_5GLLQrKg_To-EV3yD)を参照）が、これは任意です。シーンのUUIDを使用して、すぐにプレアノテーションやインプットを作成できます。

### 2. OpenLabelアノテーションのアップロード

シーンが初期化された時点（シーンUUIDを取得した時点）で、プレアノテーションをKognicプラットフォームにアップロードできます。

`kognic-openlabel`のドキュメントに従ってOpenLabelアノテーションをロードし、以下のようにKognicプラットフォームにアップロードします。

```python
pre_annotation_response = client.pre_annotation.create(
    scene_uuid=scene_response.scene_uuid, # from step 1
    external_id="20250811145051", # optional
    pre_annotation=OpenLabelAnnotation(...),
    dryrun=dryrun
)
```

### 3. インプットの作成

:::hint{type="info"}
インプットを作成する前に、シーンやプレアノテーションの処理完了を待つ必要はありません。シーン作成時に返されるシーンUUIDと、プレアノテーション作成時に返されるプレアノテーションUUIDは、すぐに次のステップで使用できます。ただし、エラーをその場で（同期的に）把握したい場合は、待機することをお勧めします。待機しない場合、エラーは後からクエリで確認できます。
:::

シーンとプレアノテーションが正常に作成されたら、インプットを作成できます。Kognic IO 2.9.0以降、これを行う方法が2つあります。

**3.1. 最新のプレアノテーションを使用して最新のプロジェクトバッチにインプットを作成する**

最新の利用可能なプレアノテーションを使用してシーンからインプットを作成します。プロジェクトの最新のオープンバッチ、または指定されたバッチにインプットを追加し、アノテーション可能な状態にします。

```python
client.lidars_and_cameras_sequence.create_from_scene(
    scene_uuid=scene_response.scene_uuid, # from step 1
    project=project, # Important: this is the external id and not the title 
    dryrun=dryrun
)
```

**3.2. 特定のプレアノテーションを使用して指定されたプロジェクト/バッチにインプットを作成する**

:::hint{type="info"}
**Kognic IO 2.9.0以降で利用可能です**

これにより、1つのシーンから異なるプレアノテーション（またはプレアノテーションなし）を使用して複数のインプットを作成し、異なるプロジェクト/バッチに配置することができます。
:::

特定のプレアノテーションまたはプレアノテーションなしでシーンからインプットを作成します。プロジェクトの最新のオープンバッチ、または指定されたバッチにインプットを追加し、アノテーション可能な状態にします。

```python
# scene is explicit, pre-annotation is optional
client.input.create_from_scene(scene_uuid, project) # no preannotation
client.input.create_from_scene(scene_uuid, project, batch) # no preannotation
client.input.create_from_scene(scene_uuid, pre_anno_uuid, project)
client.input.create_from_scene(scene_uuid, pre_anno_uuid, project, batch)

# pre-annotation is explicit, scene is implied
client.input.create_from_pre_annotation(pre_anno_uuid, project)
client.input.create_from_pre_annotation(pre_anno_uuid, project, batch)

#  Examples
client.input.create_from_scene(
    scene_uuid=scene_response.scene_uuid, # mandatory, from step 1
    pre_annotation_uuid=pre_annotation_response.uuid # optional, from step 2
    project=project, # Important: this is the external id and not the title 
    dryrun=dryrun
)

client.input.create_from_pre_annotation(
    pre_annotation_uuid=pre_annotation_response.uuid # mandatory, from step 2
    project=project, # Important: this is the external id and not the title 
    dryrun=dryrun
)
```

## OpenLabelサポート

プレアノテーションはOpenLabelフォーマット/スキーマを使用しますが、すべてのOpenLabel機能がプレアノテーションでサポートされているわけではありません。

## サポートされていないプレアノテーション機能

以下の機能または機能の組み合わせは現在サポートされていないか、部分的なサポートのみです。

- 静的ジオメトリ：未サポート
  - OpenLabelの`objects.*.objectData`下で宣言されたバウンディングボックス、キューボイドなどが該当します。
- ジオメトリ固有の属性：3Dジオメトリでは未サポート
  - これらはOpenLabelの単一のジオメトリシェイプで宣言された属性です。つまり、1つのセンサーから見たオブジェクトにのみ適用される属性です。一般的な例として、各カメラで個別に記録される`occlusion`があります。
  - ソース固有、ストリーム固有、またはセンサー固有の属性とも呼ばれます。
  - 3Dジオメトリとは、点群をアノテーションする際に描画できるもの（例：キューボイド）を指します。
  - ジオメトリ固有の属性は2Dジオメトリ（例：バウンディングボックス）では使用できます。
  - [主要コンセプト](docId\:i8t2MeIkKpcu2GLOnI5Yo)では、このように使用する前にプロパティをソース固有として指定する必要があることに注意してください。
  - `stream`属性は特殊なケースであり、このルールから除外されます。

## サポートされているプレアノテーション機能

### ジオメトリ

オブジェクトは同一フレーム内に複数の3Dジオメトリを持つことはできません。

| 名称                 | OpenLABELフィールド | 説明                                                                                                                                                            | 属性                       |
| ------------------ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| キューボイド             | `cuboid`       | 3Dキューボイド                                                                                                                                                      | -                        |
| バウンディングボックス        | `bbox`         | 2Dバウンディングボックス                                                                                                                                                 | -                        |
| 3Dライン              | `poly3d`       | 3Dのライン。閉じたラインにする場合は最初の点を末尾に追加する。                                                                                                                              | -                        |
| ポリゴン               | `poly2d`       | 2Dの[OpenLABEL形式](docId\:TfDIV3dLaaFNDEhaklui-)                                                                                                                | `is_hole`                |
| マルチポリゴン            | `poly2d`       | 2Dの[OpenLABEL形式](docId\:TfDIV3dLaaFNDEhaklui-)                                                                                                                | `is_hole` & `polygon_id` |
| カーブ                | `poly2d`       | 2Dの[OpenLABEL形式](docId\:TfDIV3dLaaFNDEhaklui-)またはライン                                                                                                          | `interpolation_method`   |
| 2D点                | `point2d`      | [OpenLABEL形式](docId\:TfDIV3dLaaFNDEhaklui-)                                                                                                                   | -                        |
| 2D点グループ            | `point2d`      | [OpenLABEL形式](docId\:TfDIV3dLaaFNDEhaklui-)                                                                                                                   | `point_class`            |
| 3Dセマンティックセグメンテーション | `binary`       |                                                                                                                                                               |                          |
| 3Dインスタンスセグメンテーション  | `binary`       |                                                                                                                                                               |                          |
| 3D点                | `point3d`      |                                                                                                                                                               |                          |
| 3Dレーン              | `poly3d`       | レーンの各エッジに1つずつ、計2つの`poly3d`を指定して構築します。`lane_edge`属性でどちらのレーンエッジかを指定し、一方には値`right`、もう一方には値`left`を設定します。したがって、このジオメトリは、オブジェクトが同一フレーム内に複数の3Dジオメトリを持てないというルールの例外です。 | `lane_edge`              |

すべてのジオメトリはプレアノテーションのルートではなく、フレーム下に指定する必要があることに注意してください。3Dジオメトリは、単一LiDARの場合はLiDAR座標系で、複数LiDARの場合は基準座標系で表現する必要があります。キューボイドの回転は[OpenLABEL形式](docId\:TfDIV3dLaaFNDEhaklui-)時と同じにしてください。2Dジオメトリはピクセル座標で表現する必要があります。詳細については[座標系](docId:3jKwDhQCmVNvBuZboUZMr)を参照してください。

### 属性

- テキスト
- 数値
- ブール値

2Dジオメトリの場合、属性はジオメトリ固有（ソース/センサー固有とも呼ばれる）またはオブジェクト固有として指定できます。属性は静的（`objects`キーで指定）または動的（フレーム内のオブジェクトの`object_data`で指定）にすることができ、[主要コンセプト](docId\:i8t2MeIkKpcu2GLOnI5Yo)（存在する場合）によって許可されている必要があります。ジオメトリ固有の属性（フレーム内の単一シェイプに現れるもの）もタスク定義でそのように宣言する必要があります。任意のプロパティをソース固有の方法で使用することはできません。

### コンテキスト

コンテキストはKognicプラットフォームでシーンのプロパティを定義するために使用されます。各コンテキストには1つのプロパティ値が含まれます。

コンテキストには4つのモードがあります。

- 静的グローバル — シーンのすべてのフレームとセンサーに対して有効な値
- 動的グローバル — すべてのセンサーに対して有効だが、フレームをまたいで変化する可能性がある値
- 静的ソース固有 — すべてのフレームに対して有効だが、1つの特定のストリームにのみ適用される値
- 動的ソース固有 — 1つの特定のストリームにのみ有効で、フレームをまたいで変化する可能性がある値

以下の2種類のコンテキストオブジェクトを参照します。

- **コンテキストオブジェクト（または単にコンテキスト）** — ルートキー`contexts`下に定義される
- **フレームコンテキストオブジェクト（または単にフレームコンテキスト）** — フレーム内に定義される

OpenLabelで使用されるすべてのコンテキストは、OpenLabelのルートにあるcontextキー下に定義する必要があります。Kognicでは、コンテキストのキーはOpenLabelの他の場所（例：フレーム内）でコンテキストを参照する際にのみ使用され、インクリメントする数字の文字列に設定されます。

コンテキストタイプはKognicアプリのプロパティ名に対応し、プロパティの値はコンテキストの属性に設定されます。

ソース固有のプロパティが複数のセンサーに存在する必要がある場合（例：各カメラセンサーに「車が見える」というブール値のプロパティがある場合）、同じコンテキストタイプを持つセンサーごとに1つのコンテキストオブジェクトが作成されます。

コンテキストでは以下の属性タイプをサポートしています。

- テキスト
- 数値
- ブール値
- ベクター — 文字列のみ

| コンテキストモード | コンテキストにストリーム属性がある | コンテキストに非ストリーム属性がある | フレームコンテキストに属性がある | コンテキストに非ストリーム属性が2つ以上ある | フレームコンテキストに属性が2つ以上ある |
| --------- | ----------------- | ------------------ | ---------------- | ---------------------- | -------------------- |
| 静的グローバル   | ❌                 | ✅                  | ❌                | ❌                      | ❌                    |
| 動的グローバル   | ❌                 | ❌                  | ✅                | ❌                      | ❌                    |
| 静的ソース固有   | ✅                 | ✅                  | ❌                | ❌                      | ❌                    |
| 動的ソース固有   | ✅                 | ❌                  | ✅                | ❌                      | ❌                    |

[コンテキストを含むOpenLabel](docId\:PsyfyK8rAnHGWTwMoztAv)セクションの例を参照してください。

### フレーム

すべてのプレアノテーションには、シーンで指定されたタイムスタンプの中から一意のタイムスタンプを持つフレームが含まれている必要があります。これは、タイムスタンプがプレアノテーション内のフレームをシーン内の正しいフレームにマッピングするために使用されるためです。静的な場合は、タイムスタンプ0の1つのフレームを使用する必要があります。

### リレーション

[OpenLABEL形式](docId\:TfDIV3dLaaFNDEhaklui-)のドキュメントに従ってサポートされています。ソース固有のリレーションはサポートされていません。

ジオメトリコレクションはリレーションの特殊なケースであり、`geometry_collection`タイプを使用することに注意してください。

### ストリーム

すべてのジオメトリには`stream`プロパティが指定されている必要があります。このプロパティは、ジオメトリが表示されるストリーム（またはセンサー）を決定します。ストリームはシーンで指定されたものの中にあり、同じタイプ（例：`camera`または`lidar`）である必要があります。

## スパース性

プレアノテーションはスパース（疎）にすることができます。つまり、オブジェクトやジオメトリはすべてのフレームに存在する必要はありません。代わりに、フレームの一部にのみ存在し、その間のフレームで補間することができます。この機能を活用することで、シーケンスのアノテーションプロセスを大幅に高速化できます。スパース性はオブジェクトデータポインターまたはブール値プロパティ`interpolated`の2つの方法で実現できます。前者はより簡潔なプレアノテーションにつながるため、ほとんどの場合に推奨される方法です。後者はプレアノテーションがKognicプラットフォームからエクスポートされたアノテーションから作成される場合に便利です。

**補間**は、キーフレーム間のジオメトリ値を線形補間することで行われます。2Dジオメトリの場合はピクセル座標で行われます。3Dジオメトリの場合、補間はフレームローカル座標系またはワールド座標系のいずれかで行うことができます（[座標系](docId:3jKwDhQCmVNvBuZboUZMr)を参照）。これはアノテーション指示で設定されるため、不明な場合はKognicチームにお問い合わせください。ワールド座標系での補間は推奨されますが、シーンに自車両ポーズが含まれている必要があることに注意してください。

### オブジェクトデータポインター

OpenLABELでは、オブジェクトデータポインターはオブジェクトの仕様を作成するために使用されます。例えば、特定のオブジェクトに使用される属性とジオメトリを指定できます。さらに、これらが存在するフレームを指定することもできます。ジオメトリがオブジェクトデータポインターで指定されている場合、そのジオメトリはオブジェクトデータポインターが指しているすべてのフレームに存在します。これらのフレームの一部でジオメトリが提供されていない場合は補間されます。ジオメトリはオブジェクトデータポインターの最初と最後のフレームに**必ず**提供する必要があることに注意してください。そうでない場合、プレアノテーションは拒否されます。

オブジェクトデータポインターを使用する場合の制限として、ジオメトリはすべてのフレームで同じストリームに存在する必要があります。これは補間がストリーム座標系で行われるためです。異なるストリームで同じタイプのジオメトリを使用する必要がある場合は、異なるストリームのジオメトリに異なる名前を使用するだけで対応できます。

[オブジェクトデータポインターを使用したスパース性](docId\:PsyfyK8rAnHGWTwMoztAv)にオブジェクトデータポインターの使用例が示されています。

### 補間プロパティ

ブール値プロパティ`interpolated`は、ジオメトリを補間することを指定するために使用できます。ジオメトリは補間フレームにも存在している必要がありますが、そのジオメトリ値は無視されます。補間されたジオメトリには、プレアノテーションの最初のフレームに対応するジオメトリ（補間済みかどうかにかかわらず）が必要であることに注意してください。そうでない場合、プレアノテーションは拒否されます。

`interpolated`プロパティを使用することは、プレアノテーションがKognicプラットフォームからエクスポートされたアノテーションから作成される場合に推奨される方法です。

[補間プロパティを使用したスパース性](docId\:PsyfyK8rAnHGWTwMoztAv)に`interpolated`プロパティの使用例が示されています。

### 属性

属性はジオメトリとは異なる方法で処理されます。属性がフレームに存在しない場合、オブジェクト（またはプロパティがソース固有の場合はジオメトリ）がそのフレームに存在する限り、最後の値が使用されます。オブジェクトがフレームに存在しない場合、属性は無視されます。密な属性はプレアノテーションがKognicプラットフォームにアップロードされる際に自動的にスパース化されます。

## Kognic予約済みオブジェクトプロパティ

Kognicプラットフォームでさまざまな動作を切り替えるために、オブジェクトに設定できる特定のプロパティがあります。

### ロックされたジオメトリ

プレアノテーション内のオブジェクトとそのジオメトリがすでに十分な品質である場合、またはプレアノテーションの使用中に変更されないようにする必要がある場合は、ロック済みとしてマークできます。ロックはオブジェクトレベルに設定され、そのオブジェクトのすべてのジオメトリに影響します。

:::CodeblockTabs
```json
{
  "openlabel": {
    "objects": {
      "object_uuid": {
        "name": "object_uuid",
        "object_data": {
          "boolean": [
            {
              "name": "kognic_locked_geometries",
              "val": true
            }
          ]
        },
        "object_data_pointers": {},
        "type": "Vehicle"
      }
    }
  }
}
```

```python
import kognic.openlabel.models as OLM

uuid1 = str(uuid.uuid4())

object = OLM.Object(
    name=uuid1,
    type="car",
    object_data=OLM.ObjectData(
        boolean=[
            OLM.Boolean(name="kognic_locked_geometries", val=True),
        ]
    ),
)

openlabel = OLM.Openlabel(objects={uuid1: object}, metadata=OLM.Metadata(schema_version="1.0.0"))

openlabel_annotation = OLM.OpenLabelAnnotation(openlabel=openlabel)
```
:::

### 静止オブジェクト

静止オブジェクトとは、移動*できる*が移動しないものを指します。良い例として駐車中の車が挙げられます。これは、ランドマークのような移動*できない*静的オブジェクトとは異なります。

オブジェクトを静止としてマークすることで、特定のプラットフォーム機能を有効化できます。

:::CodeblockTabs
```json
{
  "openlabel": {
    "objects": {
      "object_uuid": {
        "name": "object_uuid",
        "object_data": {
          "boolean": [
            {
              "name": "kognic_stationary_object",
              "val": true
            }
          ]
        },
        "object_data_pointers": {},
        "type": "Vehicle"
      }
    }
  }
}
```

```python
import kognic.openlabel.models as OLM

uuid1 = str(uuid.uuid4())

object = OLM.Object(
    name=uuid1,
    type="car",
    object_data=OLM.ObjectData(
        boolean=[
            OLM.Boolean(name="kognic_stationary_object", val=True),
        ]
    ),
)

openlabel = OLM.Openlabel(objects={uuid1: object}, metadata=OLM.Metadata(schema_version="1.0.0"))

openlabel_annotation = OLM.OpenLabelAnnotation(openlabel=openlabel)
```
:::

### ジオメトリの信頼度

予測した各ジオメトリの信頼度スコアを出力するモデルからプレアノテーションを作成する場合は、`kognic_geometry_confidence`属性でそのスコアを付与してください。これにより、アノテーターはツール内で信頼度のしきい値によってプレアノテーションをフィルタリングできます。値は`[0, 1]`の範囲の数値で、フレームごと・シェイプごとに設定します。

3Dレーンの場合は、`left`レーンエッジの`poly3d`にのみ信頼度を設定してください。右側のエッジには信頼度を付与してはなりません。

:::CodeblockTabs
```json
{
  "openlabel": {
    "frames": {
      "0": {
        "objects": {
          "object_uuid": {
            "object_data": {
              "cuboid": [
                {
                  "name": "cuboid_uuid",
                  "val": [x, y, z, qx, qy, qz, qw, sx, sy, sz],
                  "attributes": {
                    "num": [
                      {
                        "name": "kognic_geometry_confidence",
                        "val": 0.87
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}
```

```python
import kognic.openlabel.models as OLM

uuid1 = str(uuid.uuid4())

object = OLM.Object(
    name=uuid1,
    type="car",
)

cuboid = OLM.Cuboid(
    name="cuboid_uuid",
    val=[x, y, z, qx, qy, qz, qw, sx, sy, sz],
    attributes=OLM.Attributes(
        num=[
            OLM.Num(name="kognic_geometry_confidence", val=0.87),
        ],
    ),
)

frame = OLM.Frame(
    objects={uuid1: OLM.Objects(object_data=OLM.ObjectData(cuboid=[cuboid]))},
)

openlabel = OLM.Openlabel(
    objects={uuid1: object},
    frames={"0": frame},
    metadata=OLM.Metadata(schema_version="1.0.0"),
)
openlabel_annotation = OLM.OpenLabelAnnotation(openlabel=openlabel)
```
:::

## 例

以下にサポートされているプレアノテーションの例を示します。

### 静的プロパティを持つ3Dキューボイドと2Dバウンディングボックス

```json
{
  "openlabel": {
    "frame_intervals": [],
    "frames": {
      "0": {
        "frame_properties": {
          "timestamp": 0,
          "external_id": "0",
          "streams": { "LIDAR1": {}, "ZFC": {} }
        },
        "objects": {
          "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
            "object_data": {
              "bbox": [
                {
                  "attributes": {
                    "text": [{ "name": "stream", "val": "ZFC" }]
                  },
                  "name": "Bounding-box-1",
                  "val": [1.0, 1.0, 40.0, 30.0]
                }
              ],
              "cuboid": [
                {
                  "attributes": {
                    "text": [{ "name": "stream", "val": "LIDAR1" }]
                  },
                  "name": "cuboid-89ac8a2b",
                  "val": [
                    2.079312801361084, -18.919870376586914, 0.3359137773513794,
                    -0.002808041640852679, 0.022641949116037438,
                    0.06772797660868829, 0.9974429197838155, 1.767102435869269,
                    4.099334155319101, 1.3691029802958168
                  ]
                }
              ]
            }
          }
        }
      }
    },
    "metadata": {
      "schema_version": "1.0.0"
    },
    "objects": {
      "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
        "name": "1232b4f4-e3ca-446a-91cb-d8d403703df7",
        "object_data": {
          "text": [{ "name": "color", "val": "red" }]
        },
        "type": "PassengerCar"
      }
    },
    "streams": {
      "LIDAR1": { "type": "lidar" },
      "ZFC": { "type": "camera" }
    }
  }
}
```

### 動的プロパティを持つ3Dライン

```json
{
  "openlabel": {
    "frame_intervals": [{ "frame_end": 0, "frame_start": 0 }],
    "frames": {
      "0": {
        "frame_properties": {
          "streams": { "lidar": {} },
          "timestamp": 0,
          "external_id": "0"
        },
        "objects": {
          "cc06aced-d7dc-4638-a6e9-dc7f5e215340": {
            "object_data": {
              "poly3d": [
                {
                  "attributes": {
                    "text": [{ "name": "stream", "val": "lidar" }]
                  },
                  "closed": false,
                  "name": "line-3d-1",
                  "val": [
                    -5.0, 0.0, 0.0, -5.0, 10.0, 0.0, 5.0, 10.0, 0.0, 5.0, 0.0,
                    0.0, -5.0, 0.0, 0.0
                  ]
                }
              ],
              "text": [{ "name": "occluded", "val": "No" }]
            }
          }
        }
      }
    },
    "metadata": { "schema_version": "1.0.0" },
    "objects": {
      "cc06aced-d7dc-4638-a6e9-dc7f5e215340": {
        "name": "cc06aced",
        "type": "Region"
      }
    },
    "streams": {
      "lidar": { "type": "lidar" },
      "ZFC": { "type": "camera" }
    }
  }
}
```

### オブジェクトデータポインターを使用したスパース性

以下の例では、オブジェクト`1232b4f4-e3ca-446a-91cb-d8d403703df7`には`the-bbox-name`というバウンディングボックスがあり、フレーム0と3に提供されています。フレーム1と2では、バウンディングボックスが補間されます。

```json
{
  "openlabel": {
    "objects": {
      "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
          "name": "car-name",
          "type":  "car",
          "object_data_pointers": {
            "the-bbox-name": {
              "type":"bbox",
              "frame_intervals": [{"frame_start": 0, "frame_end": 3}]
            }
          }
        }
    },
    "frames": {
      "0": {
        ...,
        "objects": {
          "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
            "object_data": {
              "bbox": [{"name": "the-bbox-name",...}]
            }
          }
        }
      },
      "1": {},
      "2": {},
      "3": {
        ...,
        "objects": {
          "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
            "object_data": {
              "bbox": [{"name": "the-bbox-name",...}]
            }
          }
        }
      }
    }
  }
}
```

### 補間プロパティを使用したスパース性

以下の例では、スパース性は`interpolated`プロパティを使用して決定されます。オブジェクト`1232b4f4-e3ca-446a-91cb-d8d403703df7`にはバウンディングボックスがあり、フレーム1と2では`interpolated`プロパティが`true`に設定されていますが、フレーム0と3では設定されていません。フレーム1と2のジオメトリ値は無視され、代わりにフレーム0と3のジオメトリ値から補間されます。

```json
{
  "openlabel": {
    ...,
    "frames": {
      "0": {
        ...,
        "objects": {
          "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
            "object_data": {
              "bbox": [
                {
                  "attributes": {
                    "stream": [{ "name": "stream", "val":  "CAM" }],
                    "boolean": [{ "name": "interpolated", "val": false }]
                  },
                  ...
                }
              ]
            }
          }
        }
      },
      "1": {
        ...,
        "objects": {
          "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
            "object_data": {
              "bbox": [
                {
                  "attributes": {
                    "stream": [{ "name": "stream", "val":  "CAM" }],
                    "boolean": [{ "name": "interpolated", "val": true }]
                  },
                  ...
                }
              ]
            }
          }
        }
      },
      "2": {
        ...,
        "objects": {
          "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
            "object_data": {
              "bbox": [
                {
                  "attributes": {
                    "stream": [{ "name": "stream", "val":  "CAM" }],
                    "boolean": [{ "name": "interpolated", "val": true }]
                  },
                  ...
                }
              ]
            }
          }
        }
      },
      "3": {
        ...,
        "objects": {
          "1232b4f4-e3ca-446a-91cb-d8d403703df7": {
            "object_data": {
              "bbox": [
                {
                  "attributes": {
                    "stream": [{ "name": "stream", "val":  "CAM" }],
                    "boolean": [{ "name": "interpolated", "val": true }]
                  },
                  ...
                }
              ]
            }
          }
        }
      }
    }
  }
}
```

### コンテキストを含むOpenLabel

```json
{
  "openlabel": {
    "context": {
      "0": {
        // A global static context
        "name": "", // This has no meaning to us
        "type":  "isDayTime",
        "attributes": {
          "boolean": [{ 
            "name": "", // This has no meaning to us
            "val": true
          }]
        }
      },
      "1": {
        // A global dynamic context
        "name": "",
        "type": "numberOfSignsPassed",
        "attributes": {}
      },
      "2": {
        // A stream specific static context
        "name": "",
        "type": "isCameraPointingForward",
        "attributes": {
          "text": [{ "name": "stream", "value": "CAM1"}],
          "boolean": [{ "name": "", "value": true}
        }
      },
      "3": {
        // Same property as above but in a different sensor
        "name": "",
        "type": "isCameraPointingForward",
        "attributes": {
          "text": [{ "name": "stream", "value": "CAM2"}],
          "boolean": [{ "name": "", "value": true}
        }
      },
      "4": {
        // A stream specific dynamic context
        "name": "",
        "type": "landscapeCharacteristics"
        "attributes": {
          "text": [{ "name": "stream", "value": "CAM1"}]
        }
      }
    },
    "frames": {
      "0": {
        ...,
        "contexts": {
          "1": {
            "attributes": {
              "num": [{ "name": "", "value": 7 }]
            }
          }
        }
      },
      "1": {},
      "2": {},
      "3": {
        ...,
        "objects": {
          "4": {
            "attributes": {
              "vec": [{ "name": "", "value": ["trees", "fields"] }]
            }
          }
        }
      }
    }
  }
}
```

### 3Dセマンティックセグメンテーションとインスタンスセグメンテーション

3Dセグメンテーションタスクのプレアノテーションをアップロードする際、OpenLabelにはシーンに存在するクラス分類とインスタンスの両方が含まれます。クラス分類はオブジェクトタイプ`3DPointcloudSegmentation`を持つ特別なオブジェクトによって保持されます。このオブジェクトにはRLEを使用してエンコードされたクラス分類を含むバイナリオブジェクトデータエントリが必要です。インスタンスには`classification_id`の値を持つオブジェクトエントリが必要です。

Kognicでは、以下のクラス分類番号体系に従う必要があります。

| 範囲          | 意味                          |
| ----------- | --------------------------- |
| 0           | 未分類                         |
| 1-255       | セマンティック分類（例：道路、建物）          |
| 256 - 65535 | インスタンス分類（例：車1、車2、歩行者1、歩行者2） |

```json
{
  "openlabel": {
    "frames": {
      "0": {
        "objects": {
          "ecdb280e-0ff0-4f59-b9f2-9135e42f991c": {
            "object_data": {}
          },
          "b088dcbf-c7fe-46a5-a71d-88ef49bdc107": {
            "object_data": {
              "binary": [
                {
                  "attributes": {
                    "text": [
                      {
                        "val": "lidar",
                        "name": "stream"
                      }
                    ]
                  },
                  "data_type": "",
                  "encoding": "rle",
                  "name": "labels",
                  "val": "<RLE string>"
                }
              ]
            }
          }
        }
      }
    },
    "metadata": {
      "schema_version": "1.0.0"
    },
    "objects": {
      "ecdb280e-0ff0-4f59-b9f2-9135e42f991c": {
        "name": "ecdb280e-0ff0-4f59-b9f2-9135e42f991c",
        "type": "tree",
        "object_data": {
          "num": [
            {
              "val": 332.0,
              "name": "classification_id"
            }
          ]
        }
      },
      "b088dcbf-c7fe-46a5-a71d-88ef49bdc107": {
        "name": "b088dcbf-c7fe-46a5-a71d-88ef49bdc107",
        "type": "3DPointCloudSegmentation"
      }
    }
  }
}

```

### リレーションとしてのジオメトリコレクション

以下は2つのカーブがジオメトリコレクションを形成する例です。ジオメトリコレクションは任意のタイプのジオメトリの任意のグループ化が可能であることに注意してください。

```json
{
  "openlabel": {
    "frames": {
      "0": {
        "objects": {
          "824e20e4-b3bd-4ba8-8d40-9d32a3985312": {
            "object_data": {
              "poly2d": [
                {
                  "attributes": {},
                  "closed": false,
                  "mode": "MODE_POLY2D_ABSOLUTE",
                  "name": "curve-518f2936",
                  "val": []
                }
              ]
            }
          },
          "923eb0cf-ddf2-4eb3-881c-95846d8d1a3d": {
            "object_data": {
              "poly2d": [
                {
                  "attributes": {},
                  "closed": false,
                  "mode": "MODE_POLY2D_ABSOLUTE",
                  "name": "curve-e63dc662",
                  "val": []
                }
              ]
            }
          },
          "f7b8704f-985c-4369-93a8-5b0c77757ee9": {
            "object_data": {}
          }
        }
      }
    },
    "metadata": {
      "schema_version": "1.0.0"
    },
    "objects": {
      "824e20e4-b3bd-4ba8-8d40-9d32a3985312": {
        "name": "824e20e4-b3bd-4ba8-8d40-9d32a3985312",
        "object_data": {},
        "type": "dashed" // collection subtype 1
      },
      "923eb0cf-ddf2-4eb3-881c-95846d8d1a3d": {
        "name": "923eb0cf-ddf2-4eb3-881c-95846d8d1a3d",
        "object_data": {},
        "type": "solid" // collection subtype 2
      },
      "f7b8704f-985c-4369-93a8-5b0c77757ee9": {
        "name": "f7b8704f-985c-4369-93a8-5b0c77757ee9",
        "object_data": {},
        "type": "laneMarking" // the collection type
      }
    },
    "relations": {
      "0": {
        "name": "0", // specifying the collection as a relation
        "rdf_objects": [
          {
            "type": "object",
            "uid": "824e20e4-b3bd-4ba8-8d40-9d32a3985312"
          },
          {
            "type": "object",
            "uid": "923eb0cf-ddf2-4eb3-881c-95846d8d1a3d"
          }
        ],
        "rdf_subjects": [
          {
            "type": "object",
            "uid": "f7b8704f-985c-4369-93a8-5b0c77757ee9"
          }
        ],
        "type": "geometry_collection"
      }
    }
  }
}


```
