[具身智能-612]:RAW / NV12 / JPG 变换链路、转换关系与工程用途(适配 RDK X5 MIPI+AI 检测链路)

[具身智能-612]:RAW / NV12 / JPG 变换链路、转换关系与工程用途(适配 RDK X5 MIPI+AI 检测链路)

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

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