自动驾驶—CARLA仿真(11)bounding_boxes demo

📌 测试用例

PythonAPI/examples/bounding_boxes.py

这是一个 2D/3D 边界框(Bounding Box)生成与可视化系统,用于:

  1. 在仿真中生成大量 NPC 车辆
  2. 通过 RGB 摄像头 + 实例分割摄像头 获取场景数据
  3. 实时计算并绘制 2D/3D 边界框
  4. 将边界框、速度、灯光状态等结构化数据保存为 JSON

适用于 自动驾驶感知算法训练、数据集生成、传感器融合验证

carla_bounding+boxes

3D box 有些异常,使用时请检查、增加后处理等;


🔑 主要模块解析

1. 数据结构定义
  • EDGES:定义 3D 边界框的 12 条边连接顺序(8 个顶点 → 12 条边)
  • SEMANTIC_MAP :CARLA 语义标签 ID 到类别名和颜色的映射(如 14: ('car', (0,0,142))

✅ 支持 28 类语义标签,覆盖道路、车辆、行人、交通设施等。


2. 坐标变换与投影
  • build_projection_matrix():构建相机内参矩阵(K 矩阵)
  • get_image_point() :将 3D 世界坐标 → 相机坐标 → 2D 图像坐标
    • 处理 CARLA 特有的坐标系转换:(x,y,z) → (y,-z,x)
  • point_in_canvas():判断 2D 点是否在图像范围内

💡 这是 3D→2D 投影的核心数学工具


3. 实例分割解码
python 复制代码
def decode_instance_segmentation(img_rgba):
    semantic_labels = img_rgba[..., 2]  # R 通道存语义标签
    actor_ids = ...  # G+B 通道组合为 Actor ID
  • 利用 sensor.camera.instance_segmentation 输出的 RGBA 图像
  • R 通道:语义类别 ID
  • G+B 通道:Actor 唯一 ID(16 位)

✅ 实现 像素级实例识别,为每个物体生成独立掩码。


4. 2D 边界框生成
python 复制代码
def bbox_2d_for_actor(actor, actor_ids, semantic_labels):
    mask = (actor_ids == actor.id)
    ys, xs = np.where(mask)
    return (xmin, ymin, xmax, ymax)
  • 基于实例分割掩码,计算 轴对齐 2D 边界框(AABB)

5. 3D 边界框生成
python 复制代码
def bbox_3d_for_actor(actor, ego, camera_bp, camera):
    # 1. 获取 8 个 3D 顶点的世界坐标
    verts = actor.bounding_box.get_world_vertices(...)
    
    # 2. 投影到 2D 图像(处理相机后方的点)
    for edge in EDGES:
        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 目标检测训练。


6. 可视化系统
  • visualize_2d_bboxes():在 RGB 图像上绘制矩形框 + 类别标签
  • visualize_3d_bboxes():绘制 3D 边界框的 12 条边 + 标签

🎮 通过 2/3 实时切换 2D/3D 可视化模式。


7. 结构化数据导出

每帧保存 JSON 文件,包含:

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 对。


8. 仿真环境配置
  • 同步模式:确保传感器数据与时序严格对齐
  • 双摄像头
    • sensor.camera.rgb:获取原始图像
    • sensor.camera.instance_segmentation:获取实例 ID 图
  • 100 辆 NPC:创建密集交通场景
  • 距离过滤:仅处理 50 米内的车辆(可配置)

🎯 核心应用场景

应用 如何使用本脚本输出
2D 目标检测训练 使用 bbox_2d + RGB 图像
3D 目标检测训练 使用 bbox_3d 参数(中心、尺寸、朝向)
多目标跟踪(MOT) 利用 actor.id 实现跨帧关联
行为预测 结合 velocitylight_state(转向灯、刹车灯)
合成数据集 生成带精确标注的 PNG+JSON 对

⚠️ 技术点

  1. 3D 边界框正确投影

    • 处理 相机后方的顶点 (使用 is_behind_camera=True 的投影矩阵)
    • 避免 3D 框在图像边缘出现断裂
  2. 相对坐标系

    • 所有 3D 信息(位置、速度、朝向)均 相对于 ego 车辆
    • 符合自动驾驶感知系统的输入要求
  3. 灯光状态编码

    • 解析 VehicleLightState 为结构化字典
    • 提供 意图线索(如左转灯亮 → 可能左转)

✅ 总结

该脚本是 CARLA 感知数据生成的工业级范例,展示了:

  1. 如何融合 RGB + 实例分割 获取像素级物体 ID
  2. 如何从仿真中提取 精确的 2D/3D 边界框
  3. 如何导出 结构化、可直接用于训练的标注数据

它是构建 自动驾驶感知 pipeline 的关键工具,特别适合生成 带 3D 标注的合成数据集

相关推荐
人工智能知识库1 小时前
华为HCIA-AI Solution H13-313题库(带详细解析)
人工智能·华为·hcia-ai·h13-313
深度之眼1 小时前
机器学习可解释性的研究进展!
深度学习·机器学习·可解释性
集芯微电科技有限公司2 小时前
替代HT6310/KP3310离线式AC-DC无感线性稳压器
数据结构·人工智能·单片机·嵌入式硬件·fpga开发
悟道心2 小时前
6. 自然语言处理NLP - 迁移学习
人工智能·transformer
juxieyiyi8782 小时前
CDN与PCDN在边缘计算中的分工
人工智能·边缘计算·cdn·pcdn·平台搭建·互联网项目·pcdn平台搭建双收益
peixiuhui2 小时前
OpenPLC与RK3576边缘计算网关中结合应用的技术案例与分析
人工智能·边缘计算·rk3588·rk3568·openplc·rk3576·g8701
vyuvyucd2 小时前
Python库使用全攻略
人工智能
十三画者2 小时前
【文献分享】SpatialZ弥合从平面空间转录组学到三维细胞图谱之间的维度差距
人工智能·数据挖掘·数据分析·数据可视化
一条咸鱼_SaltyFish2 小时前
[Day13] 微服务架构下的共享基础库设计:contract-common 模块实践
开发语言·人工智能·微服务·云原生·架构·ai编程
童欧巴2 小时前
DeepSeek V4,定档春节
人工智能·aigc