Skip to content

PCD 어노테이터 스키마

키 예시타입설명
sensor_typestring라이다 기종·센서명 (예: LiDAR_HDL-64E)
timestampstringISO-8601 캡처 시각
vehicle_speed_kmhnumber캡처 시 차량 속도(km/h)
Tool Code설명UI 표시명
object_mode객체 모드Object Mode
3d_bounding_box3D 바운딩 박스Cuboid
3d_segmentation3D 세그멘테이션Segmentation
3d_polygon3D 폴리곤Polygon
3d_polyline3D 폴리라인Polyline
review_comment리뷰 코멘트-
tracking_mode트래킹 모드-
selection_color색상 선택-
projected_images투영 이미지-
roiROI-
roi_boxROI 박스-
type Point3D = {
x: number
y: number
z: number
id?: string // 폴리곤/폴리라인 포인트에서 사용
isLocked?: boolean // PSR 내부에서 사용
}

3D Bounding Box (Cuboid) - PSR 구조:

{
"id": "LG3lpgJs6P",
"tool": "3d_bounding_box",
"psr": {
"position": { "x": 10.62, "y": 6.46, "z": 0.91, "isLocked": false },
"scale": { "x": 1.92, "y": 2.72, "z": 1.36, "isLocked": false },
"rotation": { "x": 0, "y": 0, "z": 2.23, "isLocked": false }
}
}

3D Segmentation:

{
"id": "Av1KRf5ZSj",
"tool": "3d_segmentation",
"points": [21056, 21058, 21060, 21062, 21064] // 포인트클라우드 인덱스 배열
}

3D Polygon / Polyline:

{
"id": "7gAI0zKpcg",
"tool": "3d_polygon",
"points": [
{ "x": 7.19, "y": 6.98, "z": -0.82, "id": "0JvJ3arXzi" },
{ "x": 6.27, "y": -5.56, "z": 1.52, "id": "MQNruYWfsj" },
{ "x": 11.18, "y": -10.85, "z": 0, "id": "CWOovnGwoK" }
]
}
// 빈 points 배열을 가진 3d_segmentation 어노테이션 자동 삭제
beforeAction: (annotatorData, variables) => {
const validatePoint = (annotatorData) => {
for (const annotation of pcdData) {
if (annotation?.points?.length === 0 && annotations[i]?.tool === '3d_segmentation') {
deleteAnnotationIdList.push(annotations[i].id)
}
}
}
validatePoint(annotatorData)
return dataGrooming(annotatorData, variables)
}

3D 바운딩박스, 세그멘테이션, 폴리곤을 포함한 예제:

{
"extra": {
"pcd": {
"pointCount": 125000,
"sensorType": "lidar",
"coordinateSystem": "ego_vehicle",
"boundingBox": {
"min": { "x": -50, "y": -50, "z": -5 },
"max": { "x": 50, "y": 50, "z": 10 }
}
}
},
"relations": {
"pcd": [
{
"id": "pcd_001pcd_002",
"tool": "relation",
"isLocked": false,
"isVisible": true,
"isValid": true,
"annotationId": "pcd_001",
"targetAnnotationId": "pcd_002",
"classification": {
"class": "상호작용",
"interaction_type": "following"
},
"label": ["상호작용"]
}
]
},
"annotations": {
"pcd": [
{
"id": "pcd_001",
"tool": "3d_bounding_box",
"isLocked": false,
"isVisible": true,
"isValid": true,
"classification": {
"class": "차량",
"vehicle_type": "car",
"color": "white",
"occlusion": "none"
},
"label": ["차량", "car"]
},
{
"id": "pcd_002",
"tool": "3d_bounding_box",
"isLocked": false,
"isVisible": true,
"isValid": true,
"classification": {
"class": "차량",
"vehicle_type": "truck",
"color": "blue",
"occlusion": "partial"
},
"label": ["차량", "truck"]
},
{
"id": "pcd_003",
"tool": "3d_bounding_box",
"isLocked": false,
"isVisible": true,
"isValid": true,
"classification": {
"class": "보행자",
"pose": "standing",
"age_group": "adult"
},
"label": ["보행자"]
},
{
"id": "seg_001",
"tool": "3d_segmentation",
"isLocked": false,
"isVisible": true,
"isValid": true,
"classification": {
"class": "도로",
"surface_type": "asphalt"
},
"label": ["도로"]
},
{
"id": "seg_002",
"tool": "3d_segmentation",
"isLocked": false,
"isVisible": true,
"isValid": true,
"classification": {
"class": "식생",
"vegetation_type": "tree"
},
"label": ["식생"]
},
{
"id": "poly_001",
"tool": "3d_polygon",
"isLocked": false,
"isVisible": true,
"isValid": true,
"classification": {
"class": "차선",
"lane_type": "solid_white"
},
"label": ["차선"]
},
{
"id": "line_001",
"tool": "3d_polyline",
"isLocked": false,
"isVisible": true,
"isValid": true,
"classification": {
"class": "경계선",
"boundary_type": "curb"
},
"label": ["경계선"]
}
]
},
"annotationsData": {
"pcd": [
{
"id": "pcd_001",
"tool": "3d_bounding_box",
"psr": {
"position": { "x": 10.62, "y": 6.46, "z": 0.91, "isLocked": false },
"scale": { "x": 4.5, "y": 1.8, "z": 1.5, "isLocked": false },
"rotation": { "x": 0, "y": 0, "z": 1.57, "isLocked": false }
}
},
{
"id": "pcd_002",
"tool": "3d_bounding_box",
"psr": {
"position": { "x": 25.3, "y": 8.12, "z": 1.2, "isLocked": false },
"scale": { "x": 8.0, "y": 2.5, "z": 3.0, "isLocked": false },
"rotation": { "x": 0, "y": 0, "z": 1.52, "isLocked": false }
}
},
{
"id": "pcd_003",
"tool": "3d_bounding_box",
"psr": {
"position": { "x": 5.2, "y": -3.5, "z": 0.9, "isLocked": false },
"scale": { "x": 0.6, "y": 0.6, "z": 1.8, "isLocked": false },
"rotation": { "x": 0, "y": 0, "z": 0.0, "isLocked": false }
}
},
{
"id": "seg_001",
"tool": "3d_segmentation",
"points": [
21056, 21058, 21060, 21062, 21064, 21066, 21068, 22100, 22102, 22104, 22106, 22108, 22110, 23050, 23052,
23054, 23056, 23058
],
"isCompressed": false
},
{
"id": "seg_002",
"tool": "3d_segmentation",
"points": [0, 500, 10000, 300, 50000, 800],
"isCompressed": true,
"compressionFormat": "rle"
},
{
"id": "poly_001",
"tool": "3d_polygon",
"points": [
{ "x": -2.0, "y": -15.0, "z": 0.0, "id": "pt_001" },
{ "x": -2.0, "y": 0.0, "z": 0.0, "id": "pt_002" },
{ "x": -1.8, "y": 0.0, "z": 0.0, "id": "pt_003" },
{ "x": -1.8, "y": -15.0, "z": 0.0, "id": "pt_004" }
]
},
{
"id": "line_001",
"tool": "3d_polyline",
"points": [
{ "x": 10.0, "y": -20.0, "z": 0.15, "id": "ln_001" },
{ "x": 10.0, "y": -10.0, "z": 0.15, "id": "ln_002" },
{ "x": 10.0, "y": 0.0, "z": 0.15, "id": "ln_003" },
{ "x": 10.0, "y": 10.0, "z": 0.15, "id": "ln_004" },
{ "x": 10.0, "y": 20.0, "z": 0.15, "id": "ln_005" }
]
}
]
},
"annotationGroups": {
"pcd": [
{
"id": "group_vehicles",
"tool": "annotationGroup",
"isLocked": false,
"isValid": true,
"annotationList": [
{ "annotationId": "pcd_001", "children": [] },
{ "annotationId": "pcd_002", "children": [] }
],
"classification": {
"class": "차량_그룹",
"scenario": "traffic_flow"
}
}
]
},
"assignmentId": 8001
}