ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AirSim图像API深度教程:获取RGB、深度图与语义分割图像的完整指南

AirSim图像API深度教程:获取RGB、深度图与语义分割图像的完整指南 AirSim图像API深度教程获取RGB、深度图与语义分割图像的完整指南【免费下载链接】AirSimOpen source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI Research项目地址: https://gitcode.com/gh_mirrors/ai/AirSimAirSim 是由微软 AI Research 开源的自动驾驶车辆仿真器基于 Unreal Engine / Unity 构建。本教程聚焦AirSim 图像APIsimGetImage / simGetImages手把手教你获取三种最核心的仿真图像RGB 场景图像、深度图Depth与语义分割Segmentation图像。无论是做计算机视觉算法验证、深度估计训练还是自动驾驶感知数据集采集这些真值级图像都是你的最佳拍档。一、先认识 AirSim 图像API的两大入口 AirSim 提供了两个层次清晰的图像获取 APIAPI特点适用场景simGetImage(camera, type)一次获取一张 PNG 压缩图像最简洁快速验证、单图调试simGetImages([requests])一次调用可同时请求多台相机的多种图像类型支持 PNG / 未压缩 RGB / 浮点数组批量采集、RGB深度分割同步获取simGetImages的参数由 ImageRequest 定义每个响应 ImageResponse 中不仅包含图像数据还附带相机位姿camera_position / camera_orientation和时间戳方便你做图像与位姿的精确同步。最关键的枚举是 ImageType它决定了你拿到的是哪种图像# 获取一张最基础的 RGB 场景图PNG 压缩字节流 client airsim.MultirotorClient() png_image client.simGetImage(front_center, airsim.ImageType.Scene)常用ImageType一览值类型含义0SceneRGB 场景图像1DepthPlanar平面深度与相机平面平行的距离单位米浮点2DepthPerspective透视深度沿视线射线的距离浮点3DepthVis深度可视化图0~100 米灰度映射4DisparityNormalized归一化视差图0~1立体视觉用5Segmentation语义分割真值图6SurfaceNormals表面法线7Infrared红外对象 ID 到灰度映射8/9OpticalFlow / OpticalFlowVis光流及其可视化二、获取 RGB 图像三种姿势由你选无人机前视相机拍摄的 RGB 场景是 AirSim 仿真最直观的呈现姿势 1PNG 压缩最简单simGetImage直接返回 PNG 字节流丢进二进制文件就是一张 .png适合落盘保存。姿势 2未压缩 RGBA 数组配合 NumPy 处理如果要用 NumPy / OpenCV 做图像处理请请求未压缩数组pixels_as_floatFalse, pixels_as_floatFalse然后 reshaperesponses client.simGetImages([ airsim.ImageRequest(front_center, airsim.ImageType.Scene, False, False)]) resp responses[0] img1d np.fromstring(resp.image_data_uint8, dtypenp.uint8) img_rgb img1d.reshape(resp.height, resp.width, 3) img_rgb np.flipud(img_rgb) # 原始图像是垂直翻转的姿势 3一次拿齐多相机多类型在单次调用里同时请求左右立体相机的 RGB 图与左相机深度图responses client.simGetImages([ airsim.ImageRequest(0, airsim.ImageType.Scene), # 左相机 PNG airsim.ImageRequest(1, airsim.ImageType.Scene, False, False), # 右相机 RGB 数组 airsim.ImageRequest(1, airsim.ImageType.DepthPlanar, True)]) # 深度浮点图在 Python 中处理图像时可直接把结果喂给深度学习框架或目标检测模型例如检测算法在 RGB 帧上标注出的结果完整可运行的示例见 cv_capture.py多旋翼入门示例见 hello_drone.py。三、深度图4 种格式按需取用 深度图是 AirSim 相对真实相机最大的真值优势。官方推荐以浮点格式获取pixels_as_floatTrue保存为 PFM 格式Portable Float Map不受 0-255 像素范围限制# 浮点深度图转 NumPy 2D 数组 depth airsim.list_to_2d_float_array( resp.image_data_float, resp.width, resp.height) airsim.write_pfm(depth.pfm, depth)四种深度类图像怎么选DepthPlanar点在相机平面上的深度所有与相机平行的面深度一致——与 SGM 等立体匹配算法的输出兼容性好DepthPerspective沿投影射线的真实距离——可直接喂给 ROS 的depth_image_proc生成点云DepthVis黑白可视化的深度图纯白 ≥100 米纯黑 0 米调试时最直观DisparityNormalized(Xl - Xr)/Xmax归一化视差用于立体视觉研究。下图同时展示了 RGB 原图上、深度图左下灰阶与语义分割图中下彩色三种图像模态这也是深度图最常见的对照视图透视深度图还可以直接构建立体点云AirSim 官方示例中由深度图生成的三维点云效果如下辅助工具函数都在 utils.py 中如 write_pfm、write_pngPFM 格式的原理与查看器说明见 docs/pfm.md。四、语义分割拿到像素级标注真值 ImageType.Segmentation会返回场景的真值语义分割图AirSim 启动时为环境中每个 mesh 分配 0~255 的对象 ID再映射为固定颜色见 seg_color_palette.png每个 ID 对应的 RGB 值记录在 seg_rgbs.txt 中。如何给目标物体指定 ID用simSetSegmentationObjectIDAPI还支持正则表达式批量设置client.simSetSegmentationObjectID(Ground, 20) # 单个 mesh client.simSetSegmentationObjectID(ground[\w]*, 21, True) # 正则批量Ground_2、Ground_3...注意典型 Unreal 环境里同一物体常由多个 mesh 组成如 Ground、Ground_2、Ground_3正则表达式能帮你一行搞定。mesh 名称在哪查打开 Unreal 编辑器用 World Outliner 查看。AirSim 自带 Blocks 环境中地面 mesh 的命名如下所示避坑提醒获取分割图请始终使用未压缩格式pixels_as_floatFalse, pixels_as_floatFalse因为 PNG 压缩可能改变像素值导致颜色与对象 ID 的对应关系出错resp client.simGetImages([ airsim.ImageRequest(0, airsim.ImageType.Segmentation, False, False)])[0] img np.fromstring(resp.image_data_uint8, dtypenp.uint8) img np.flipud(img.reshape(resp.height, resp.width, 3)) # 统计图中出现的所有分割颜色 print(np.unique(img[:, :, 0], return_countsTrue))完整示例见 segmentation.py。另外把某个对象 ID 设为-1可让该物体在分割图中隐身。五、实战技巧让采集更专业 ✨图像与位姿严格同步用client.simPause(True)/simPause(False)暂停物理仿真在暂停窗口内取图像和物理状态保证二者完全一致记住 flipud未压缩图像默认垂直翻转reshape 后务必np.flipud再处理相机名称多旋翼默认有front_center、front_left、front_right、bottom_center、back_center五路相机旧版 ID0~4仍可用车辆则是front_center、fpv等。也可通过 settings.json 添加外部相机改分辨率与 FOV在 settings.json 的CameraDefaults.CaptureSettings中设置Width、Height、FOV_Degrees、MotionBlurAmount等参数计算机视觉模式在 settings.json 中加SimMode: ComputerVision即可禁用物理、仅保留相机配合simSetVehiclePose/simSetCameraPose自由移动相机采集图像示例见 cv_mode.py批量采集参考 DataCollection 目录下的立体图像深度视差批量生成器可产出带真值标注的训练数据集。六、核心资料索引 资源路径图像 API 官方文档docs/image_apis.mdsettings.json 配置说明docs/settings.mdPFM 浮点图格式说明docs/pfm.md分割对象 ID 颜色表docs/seg_rgbs.txt图像类型与请求定义PythonClient/airsim/types.py图像读写工具函数PythonClient/airsim/utils.py分割示例脚本PythonClient/computer_vision/segmentation.py数据采集示例Examples/DataCollection/掌握simGetImagesImageType的组合拳你就拥有了 AirSim 图像API的全部精髓一次调用同步产出 RGB、深度图与语义分割三合一真值数据为下游感知算法提供最干净的训练与验证燃料。祝你采集顺利【免费下载链接】AirSimOpen source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI Research项目地址: https://gitcode.com/gh_mirrors/ai/AirSim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表