JSON Schema Reference¶
This page documents the JSON schema for scene data serialization.
Overview¶
The MIMIC Data API uses Pydantic for JSON serialization, which automatically handles:
Type conversion (NumPy arrays to nested lists)
Validation on deserialization
Optional field handling
Serialization¶
Export a scene to JSON:
from mimic_data_api import Scene
# Pretty-printed JSON
json_str = scene.model_dump_json(indent=2)
# Compact JSON
json_str = scene.model_dump_json()
# Save to file
with open("scene.json", "w") as f:
f.write(scene.model_dump_json(indent=2))
Deserialization¶
Load a scene from JSON:
from mimic_data_api import Scene
# From string
scene = Scene.model_validate_json(json_str)
# From file
with open("scene.json", "r") as f:
scene = Scene.model_validate_json(f.read())
Schema Structure¶
Top-Level Scene¶
{
"ego_vehicle": { ... },
"actors": [ ... ]
}
EgoVehicle¶
{
"trajectory": {
"timestamps": [0.0, 0.1, 0.2, ...],
"object2world": [
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]],
...
],
"linear_velocity": null,
"angular_velocity": null
},
"sensors": {
"cameras": [ ... ],
"lidars": [ ... ],
"radars": [ ... ]
}
}
Camera¶
{
"id": 1,
"name": "front_camera",
"camera_model": "pinhole",
"intrinsics": {
"fx": 1000.0,
"fy": 1000.0,
"cx": 640.0,
"cy": 360.0,
"skew": 0.0,
"height": 720.0,
"width": 1280.0
},
"distortion_parameters": {
"p1": 0.0,
"p2": 0.0,
"k1": 0.0,
"k2": 0.0,
"k3": 0.0,
"k4": 0.0,
"k5": null,
"k6": null
},
"extrinsics": [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
],
"trajectory": { ... },
"images_data": [
{
"filepath": "camera/00000000.png",
"timestamp": 0.0,
"undistorded": true,
"rolling_shutter": {
"readout_time": 0.0,
"readout_direction": "global"
}
}
]
}
Lidar¶
{
"id": 1,
"name": "top_lidar",
"extrinsics": [ ... ],
"intrinsics": {
"lidar_type": "rotating",
"rotation_type": "clockwise",
"vertical_fov": 0.785,
"horizontal_fov": 6.283,
"horizontal_resolution": 0.01,
"vertical_resolution": {
"vertical_resolution": 0.01,
"elevation_channel_mapping": null
},
"max_range": 100.0,
"min_range": 0.1,
"horizontal_beam_divergence": null,
"vertical_beam_divergence": null
},
"trajectory": { ... },
"lidar_pcds_data": [
{
"filepath": "lidar/00000000.ply",
"timestamp": 0.0,
"egomotion_compensated": true,
"has_missing_points": false
}
],
"min_cut_off_range": 1.5
}
Radar¶
{
"id": 1,
"name": "front_radar",
"extrinsics": [ ... ],
"intrinsics": {
"range": 200.0,
"azimuth_fov": 1.047,
"elevation_fov": 0.524,
"azimuth_resolution": [[0.0, 0.01], [0.524, 0.02]],
"elevation_resolution": null,
"min_speed_resolution": -50.0,
"max_speed_resolution": 50.0
},
"trajectory": { ... },
"radar_pcds_data": [
{
"filepath": "radar/00000000.ply",
"timestamp": 0.0
}
]
}
Actor¶
{
"id": 1,
"name": "Vehicle_001",
"dimensions": {
"length": 4.5,
"width": 2.0,
"height": 1.5
},
"boxtype": "vehicle",
"original_boxtype": "sedan",
"dynamic": true,
"trajectory": { ... },
"description": "A sedan traveling in the adjacent lane",
"original_id": null
}
WorldTrajectory¶
{
"timestamps": [0.0, 0.1, 0.2],
"object2world": [
[
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]
],
[
[1.0, 0.0, 0.0, 1.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]
],
[
[1.0, 0.0, 0.0, 2.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]
]
],
"linear_velocity": null,
"angular_velocity": null
}
Validation¶
The Data API validates JSON on deserialization:
from mimic_data_api import Scene
from pydantic import ValidationError
try:
scene = Scene.model_validate_json(json_str)
except ValidationError as e:
print(f"Validation failed: {e}")
Common validation errors:
Timestamp mismatch: Image timestamps must match trajectory timestamps
Missing required fields: All non-optional fields must be present
Type errors: Values must match expected types
Constraint violations: e.g., negative timestamps, invalid file extensions
Programmatic Schema Access¶
Get the JSON schema programmatically:
from mimic_data_api import Scene, Camera, Actor
import json
# Get full scene schema
schema = Scene.model_json_schema()
print(json.dumps(schema, indent=2))
# Get individual class schemas
camera_schema = Camera.model_json_schema()
actor_schema = Actor.model_json_schema()