一、完整数据流变换链(硬件流水线真实顺序)

plaintext

MIPI Sensor 感光输出
      ↓
【RAW(Bayer拜耳)】 (原始光电信号,无ISP处理)
      ↓(必须经过ISP图像信号处理器)
Demosaic、白平衡、降噪、Gamma校正 →
      ↓
【NV12(YUV420 Semi-Planar)】(ISP标准输出、嵌入式图像基准格式)
      ↓(硬件编码器执行有损压缩)
【JPG(JPEG码流)】

⚠️ 单向不可逆关键点

  1. RAW → NV12:单向 RAW 经过 ISP 算法生成 NV12无法从 NV12 还原出 RAW(ISP 做了大量非线性图像处理,丢失传感器原始采样信息)。
  2. NV12 → JPG:单向有损 JPG 是压缩产物;无法从 JPG 无损还原原始 NV12,解压只能得到失真 YUV 图像。
  3. 反向不存在原生硬件通路:不能把 JPG 送入上游 ISP 生成 NV12/RAW。

二、三种格式详细定义、变换关系、用途

1. RAW(Bayer Raw,RGGB/RGGB10)

本质:摄像头感光二极管直接输出的原始采样数据,只有单色感光点不是可视图像

变换关系

唯一上游来源:MIPI Sensor; 唯一下游通路:送入ISP处理,输出 NV12。

不能直接送入编码器、不能直接送入 AI 网络。

适用用途
  1. 底层硬件调试:排查 Sensor 曝光、噪声、I2C 寄存器、排线故障(当前相机调试阶段可用);
  2. 镜头标定、相机内参标定
  3. ISP 调参:白平衡、降噪、动态范围优化; ❌ 禁止场景:AI 推理、视频预览、日常图像存储。

2. NV12(YUV420SP)

本质:ISP 处理完成后的未压缩可视图像,分为亮度平面 Y、交错色度 UV;RDK X5 全硬件单元通用标准格式。

变换关系

上游:RAW 经过 ISP 转换; 下游两条分支:

  • 分支 A:直接送往 VPS 硬件缩放 / BPU AI 推理 / H264/H265 硬件编码器
  • 分支 B:送入 JPEG 硬件编码器,压缩生成 JPG; 可软件转换:NV12 ↔ RGB24/RGB8(CPU/VPS 硬件转换)。
适用用途(项目主链路核心格式)
  1. MIPI 相机 ROS 话题 /image_combine_raw 标准输出格式;
  2. FCOS / YOLOv5 AI 推理最优输入格式(零拷贝送入 BPU,避免多次色彩转换);
  3. 硬件 H.264/H.265 视频编码输入;
  4. HDMI EGL 预览渲染输入;
  5. 算法调试抓帧(保存裸 NV12 帧复现推理问题); ❌ 缺点:裸流无文件头,播放器打开必须手动指定分辨率。

3. JPG(JPEG 有损压缩图像)

本质:NV12 (YUV420) 经过离散余弦变换的有损压缩封装格式,自带文件头、分辨率信息,通用图像标准。

变换关系

上游:只能由 NV12 经过 JPEG 编码器生成; 下游:解码后得到失真 YUV 图像(不能恢复原始 NV12)。

适用用途
  1. WebSocket 网页远程预览(你的/image_combine_jpeg话题);
  2. 抓拍截图、图片上传、本地快照存档;
  3. PC / 手机通用浏览; ❌ 禁止场景:不要解压 JPG 后送入 AI 目标检测;压缩损失细节,会降低 FCOS/YOLO 检测精度。

三、关系总结表

表格

格式 压缩属性 上游来源 下游输出 核心用途 能否直接给 AI 推理
RAW(Bayer) 无压缩 Sensor MIPI 仅 ISP 底层调试、标定 ❌ 不能
NV12 无压缩 ISP 输出(RAW 处理后) VPS/BPU/H264/JPG 编码器 AI 推理、视频编码、本地预览 ✅ 推荐首选
JPG 有损压缩 NV12 编码生成 网络传输、图片存储 网页预览、截图存档 ❌ 不推荐

四、结合你 RDK X5 工程推荐标准链路

正式产品主链路(最优)

Sensor → RAW → ISP → NV12

  1. NV12 一路:VPS 预处理 → FCOS/YOLO 推理;
  2. NV12 二路:硬件 H264 编码,视频录像;
  3. NV12 三路(可选分支):硬件 JPG 编码 → WebSocket 远程预览。

❌ 不推荐错误链路

NV12 → JPG → 解码YUV → AI推理 多次压缩 + 色彩转换,带宽浪费、精度下降。

五、调试抓帧选型建议

  1. 排查相机硬件、Sensor、ISP 问题 → 保存 RAW
  2. 调试目标检测算法、复现漏检问题 → 保存 NV12
  3. 需要快速发给电脑查看画面 → 保存 JPG

补充命令参考(开发板调试)

bash

运行

# 播放裸NV12文件(必须指定分辨率)
ffplay -f rawvideo -pixel_format nv12 -video_size 1280x720 frame.nv12
# NV12 转JPG
ffmpeg -f rawvideo -pixel_format nv12 -video_size 1280x720 -i frame.nv12 frame.jpg
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐