PCD 어노테이터 스키마
PCD 어노테이터 전용 스키마
Section titled “PCD 어노테이터 전용 스키마”PCD 전용 추가 메타데이터(extra)
Section titled “PCD 전용 추가 메타데이터(extra)”| 키 예시 | 타입 | 설명 |
|---|---|---|
sensor_type | string | 라이다 기종·센서명 (예: LiDAR_HDL-64E) |
timestamp | string | ISO-8601 캡처 시각 |
vehicle_speed_kmh | number | 캡처 시 차량 속도(km/h) |
지원 도구(Tools)
Section titled “지원 도구(Tools)”| Tool Code | 설명 | UI 표시명 |
|---|---|---|
object_mode | 객체 모드 | Object Mode |
3d_bounding_box | 3D 바운딩 박스 | Cuboid |
3d_segmentation | 3D 세그멘테이션 | Segmentation |
3d_polygon | 3D 폴리곤 | Polygon |
3d_polyline | 3D 폴리라인 | Polyline |
review_comment | 리뷰 코멘트 | - |
tracking_mode | 트래킹 모드 | - |
selection_color | 색상 선택 | - |
projected_images | 투영 이미지 | - |
roi | ROI | - |
roi_box | ROI 박스 | - |
Point3D 타입
Section titled “Point3D 타입”type Point3D = { x: number y: number z: number id?: string // 폴리곤/폴리라인 포인트에서 사용 isLocked?: boolean // PSR 내부에서 사용}annotationsData 구조 (도구별)
Section titled “annotationsData 구조 (도구별)”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" } ]}beforeAction Hook
Section titled “beforeAction Hook”// 빈 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}