别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案
2026/5/15 16:14:17
PythonAPI/examples/bounding_boxes.py
这是一个2D/3D 边界框(Bounding Box)生成与可视化系统,用于:
适用于自动驾驶感知算法训练、数据集生成、传感器融合验证。
carla_bounding+boxes
3D box 有些异常,使用时请检查、增加后处理等;
EDGES:定义 3D 边界框的 12 条边连接顺序(8 个顶点 → 12 条边)SEMANTIC_MAP:CARLA 语义标签 ID 到类别名和颜色的映射(如14: ('car', (0,0,142)))✅ 支持28 类语义标签,覆盖道路、车辆、行人、交通设施等。
build_projection_matrix():构建相机内参矩阵(K 矩阵)get_image_point():将 3D 世界坐标 → 相机坐标 → 2D 图像坐标(x,y,z) → (y,-z,x)point_in_canvas():判断 2D 点是否在图像范围内💡 这是3D→2D 投影的核心数学工具。
defdecode_instance_segmentation(img_rgba):semantic_labels=img_rgba[...,2]# R 通道存语义标签actor_ids=...# G+B 通道组合为 Actor IDsensor.camera.instance_segmentation输出的 RGBA 图像✅ 实现像素级实例识别,为每个物体生成独立掩码。
defbbox_2d_for_actor(actor,actor_ids,semantic_labels):mask=(actor_ids==actor.id)ys,xs=np.where(mask)return(xmin,ymin,xmax,ymax)defbbox_3d_for_actor(actor,ego,camera_bp,camera):# 1. 获取 8 个 3D 顶点的世界坐标verts=actor.bounding_box.get_world_vertices(...)# 2. 投影到 2D 图像(处理相机后方的点)foredgeinEDGES:p1=get_image_point(verts[edge[0]],K,world_2_camera)...projection.append((p1x,p1y,p2x,p2y))# 3. 计算相对 ego 的 3D 信息return{'center':{x,y,z},# 相对位置'dimensions':{l,w,h},# 尺寸'rotation_yaw':...,# 相对偏航角'projection':[...]# 12 条边的 2D 投影}✅ 输出完整的 3D 检测所需参数,支持后续 3D 目标检测训练。
visualize_2d_bboxes():在 RGB 图像上绘制矩形框 + 类别标签visualize_3d_bboxes():绘制 3D 边界框的 12 条边 + 标签🎮 通过
2/3键实时切换 2D/3D 可视化模式。
每帧保存 JSON 文件,包含:
{"frame_id":123,"objects":[{"id":456,"class":"car","velocity":{"x":2.1,"y":-0.3,...},"bbox_3d":{"center":{...},"dimensions":{...},"rotation_yaw":1.2},"bbox_2d":{"xmin":100,"ymin":200,...},"light_state":{"brake":true,"left_blinker":false,...}}]}💾 按
R键启动录制,生成_out/目录下的 PNG + JSON 对。
sensor.camera.rgb:获取原始图像sensor.camera.instance_segmentation:获取实例 ID 图| 应用 | 如何使用本脚本输出 |
|---|---|
| 2D 目标检测训练 | 使用bbox_2d+ RGB 图像 |
| 3D 目标检测训练 | 使用bbox_3d参数(中心、尺寸、朝向) |
| 多目标跟踪(MOT) | 利用actor.id实现跨帧关联 |
| 行为预测 | 结合velocity和light_state(转向灯、刹车灯) |
| 合成数据集 | 生成带精确标注的 PNG+JSON 对 |
3D 边界框正确投影
is_behind_camera=True的投影矩阵)相对坐标系
灯光状态编码
VehicleLightState为结构化字典该脚本是 CARLA感知数据生成的工业级范例,展示了:
它是构建自动驾驶感知 pipeline的关键工具,特别适合生成带 3D 标注的合成数据集。