シーンの例
Kognicプラットフォームに生データをアップロードする際は、シーンの形式で行う必要があります。シーンとは、画像、点群、その他のセンサーデータなど、さまざまなソースからのデータの集合です。
kognic-io 2.5.0では、センサーデータからシーンタイプを推定する新しいシーンモデルをリリースしました。点群がない場合は、カメラのみのシーケンスが作成されます。
この新しいモデルと関連するAPIで作成されたシーンは常にシーケンスになるため、非シーケンスのインプットを必要とするリクエストには追加できません。今後はあらゆる場面でシーケンスへの標準化を進める予定のため、この点は次第に問題にならなくなる見込みです。
新しいモデルでは、シーンが集約シーンであることを指定する必要はありません。また、最初のフレームに大きな(fat)点群を含み、残りのフレームには何も含まない、いわゆる「事前集約」シーンの作成はサポートされなくなりました。詳細については、集約LiDARとカメラシーケンス集約LiDARとカメラシーケンスを参照してください。
このモデルの詳細については、シーンシーンをご覧ください。
ローカルファイルからシーンを作成
このガイドでは、ソースがコンピュータ上にある場合のシーンアップロード手順を説明します。
前提条件
クイックスタートクイックスタートガイドを完了し、kognic-ioライブラリをインストール済みである必要があります。複数のワークスペースにアクセスできるユーザーは、データのアップロード先となるワークスペースを指定する必要があります(高度な設定高度な設定を参照)。
ローカルファイルを使用してシーンをアップロードするには、以下が必要です:
- kognic-io >= 2.5.1
- シーンのキャリブレーション(キャリブレーション概要キャリブレーション概要を参照)
- Kognicがサポートするファイルフォーマットのローカルデータ(サポートされているファイルフォーマットサポートされているファイルフォーマットを参照)
例
Kognicはローカルファイルへの参照を保持して後から取得することができないため、ローカルファイルを扱う場合はpostpone_external_resource_importをfalseに設定する必要があります。
クラウドリソースからシーンを作成
このガイドでは、アクセス可能なバケットにソースがある場合のシーンアップロード手順を説明します。
前提条件
クイックスタートクイックスタートガイドを完了し、kognic-ioライブラリをインストール済みである必要があります。複数のワークスペースにアクセスできるユーザーは、データのアップロード先となるワークスペースを指定する必要があります(高度な設定高度な設定を参照)。
クラウドリソースを使用してシーンをアップロードするには、以下が必要です:
- kognic-io >= 2.5.1
- 有効なデータインテグレーションデータインテグレーション
- シーンのキャリブレーション(キャリブレーション概要キャリブレーション概要を参照)
- Kognicがサポートするファイルフォーマットのバケット上のデータ(サポートされているファイルフォーマットサポートされているファイルフォーマットを参照)
概要
各リソース(画像、点群、IMUデータ)にlocal_file=LocalFile(...)を指定する代わりに、local_file=Noneのままにして、クラウドプラットフォームのネイティブ形式(gs://やs3://のURLなど)でexternal_resource_uriを指定します。
例
この例は、IMUデータと自車両ポーズを含む完全な2D+3Dシーンを示しています。IMU、自車両ポーズ、点群を削除することで、2Dのみのシーンに縮小できます。
postpone_external_resource_importを使用するとインポートを延期でき、いわゆる「インデックス済み」(Indexed)シーンが作成されます(「インデックス済み」と呼ぶのは、システム内に存在しうるデータのインデックスのみを保持し、シーンが使用されるか後で手動でリクエストされるまでデータを取得しないためです)。
from kognic.io.client import KognicIOClient
from kognic.io.model.scene import SceneRequest, Frame, ImageResource, SensorResource, Resource, EgoVehiclePose
scene = SceneRequest(
workspace_id="<workspace_id>",
external_id="my_first_scene_from_external_resources",
frames=[
Frame(
frame_id="1",
timestamp_ns=1742225790,
# For 2D-only scenes, omit pointclouds entirely.
pointclouds=[
SensorResource(
external_resource_uri="<uri>",
sensor_name="my_lidar",
local_file=None,
)
],
images=[
ImageResource(
external_resource_uri="<uri>",
sensor_name="my_camera",
start_shutter_timestamp_ns=1742225789,
end_shutter_timestamp_ns=1742225790,
local_file=None,
)
],
# For 2D-only scenes, omit ego_vehicle_pose entirely.
ego_vehicle_pose=EgoVehiclePose(
x=0.0, y=0.0, z=0.0, rotation_x=0.0, rotation_y=0.0, rotation_z=0.0, rotation_w=1.0
)
)
],
calibration_id="<calibration_id>",
# For 2D scenes, omit imudata_resource entirely.
imudata_resource=Resource(
external_resource_uri="<uri>",
local_file=None
),
sensor_specification=None,
should_motion_compensate=False, # Omit for 2D, optionally set for 3D+2D
postpone_external_resource_import=False, # Set true if you want to import at a later point in time
)
client = KognicIOClient()
scene_uuid = client.scene.create_scene(scene).scene_uuid
print("Scene uploaded, got uuid:", scene_uuid)