[具身智能-635]:vio_capture  srcampy 完整对比详解(D-Robotics RDK X3/X5) vio_capture srcampy 完整对比详解D-Robotics RDK X3/X5前置基础VIO Video Input/Output地瓜 RDK 平台视频输入输出子系统管理MIPI CSI ISP、图像缩放、数据流通路、HDMI 显示、硬件编码。两者底层共用同一套内核 VIO 驱动只是上层 Python 封装两套 API。底层驱动模块名字就叫vio_capture这也是命名源头。一、总体演进路线plaintext早期SDKvio_capture单纯采集接口 ↓ 新版SDKlibsrcampy(srcampy)【一体化多媒体套件】 底层不变VIO驱动 AMP多媒体流水线官方现状✅srcampy 作为新项目标准推荐FCOS MIPI Demo 采用⚠️ vio_capture 仅做兼容保留不再新增功能。二、vio_capture 详解1. 定位轻量化单一功能采集接口只负责从 MIPI CSI读取图像无显示、无硬件 bind、无 OSD、无编码能力。 导入方式python运行from hobot_vio import vio_capture2. 核心类VioCapture构造参数python运行cap vio_capture.VioCapture( video_index0, # CSI00CSI12 width512, height512, formatnv12 # 仅支持nv12 )常用方法python运行frame cap.read() # 获取 nv12 numpy数组阻塞读取 cap.release() # 释放CSI、ISP资源3. 数据流模型只能配置单路分辨率输出plaintextMIPI Sensor → ISP → 硬件缩放成 [w,h] NV12 → read()给到Python限制同一路 CSI 只能输出一种尺寸图像。 如果你同时想要 512×512AI 推理 1920×1080HDMI 预览vio_capture原生不支持硬件双通路。4. 优点API 极简上手快开销小适合无屏幕、只做后端 AI 运算的设备5. 致命短板不支持 ISP 硬件双路输出没有 HDMI 显示、硬件数据流绑定如果要预览画面Python 必须持续读取大图转发到 Display占用带宽 CPU延迟高不支持 OSD 画框、文字叠加不支持硬件 H.264/H.265 编码。6. 适用场景无头设备无 HDMI 显示器只需要单一分辨率图像做 AI 推理不需要实时预览录像三、srcampylibsrcampy详解全称释义回顾 src图像源 ampAMP 高级多媒体流水线 pypython 绑定python运行try: from hobot_vio import libsrcampy as srcampy except ImportError: from hobot_vio_rdkx5 import libsrcampy as srcampy1. 定位一体化全栈多媒体SDK能力覆盖MIPI 采集 ISP 多路缩放 HDMI 显示 硬件 DMA 数据流绑定 OSD 图层绘图 硬件音视频编码。包含四大核心类srcampy.Camera()摄像头采集srcampy.Display()HDMI 输出、OSD 图层srcampy.Encoder()硬件 H264/H265 编码srcampy.Decoder()硬件码流解码2. Camera 类核心接口open_cam () 【最关键】python运行cam.open_cam(video_index, fps, [w1,w2], [h1,h2], sensor_h, sensor_w)[w1,w2] [h1,h2]ISP 硬件双通路同时输出两路不同分辨率 NV12 图像通路 1小图512×512→ AI 推理通路 2原图1920×1080→ HDMI 预览 硬件同时生成两路CPU 不参与缩放get_img(fmt_id, w, h)python运行img cam.get_img(2, 512, 512)fmt_id2 代表 NV12指定读取哪一路分辨率的图像返回 bytes 裸 buffer可直接np.frombuffer送入 dnn.forward ()close_cam()释放 CSI 通道与 ISP 资源。3. Display 类核心接口python运行disp srcampy.Display() disp.display(layer_id, w, h) # layer0原始视频图层 # layer3OSD透明叠加图层画框、文字OSD 绘图函数set_graph_rect()绘制矩形检测框set_graph_word()绘制文本标签4. 全局超级接口srcampy.bind ()python运行srcampy.bind(cam, disp)硬件 DMA 直通绑定摄像头 ISP 输出大图直接路由到 HDMI图像数据完全不经过 Python 内存。 优势极低延迟、几乎零 CPU 占用。这是 srcampy 相比 vio_capture 最大的杀手锏。5. srcampy 完整流水线FCOS 代码plaintextMIPI CSI0 → ISP ├─通路A1920×1080 NV12 → bind硬件直通HDMI原始画面 └─通路B512×512 NV12 → cam.get_img读取 → BPU FCOS推理 ↳ 推理结果 → Display OSD图层叠加框6. srcampy 适用场景需要 HDMI 实时预览 AI 推理同时运行目标检测任务需要硬件 OSD 绘制框需要多路分辨率、硬件编码录像对画面延迟敏感的机器人视觉项目。四、vio_capture VS srcampy 横向对比总表表格对比项vio_capturesrcampy(libsrcampy)包hobot_vio.vio_capturehobot_vio.libsrcampy产品定位轻量化单纯采集全功能多媒体套件ISP 双路硬件输出❌不支持✅原生支持硬件 bind 直通 HDMI❌无✅支持极低延迟OSD 绘制矩形 / 文字❌无✅Display 图层接口硬件 H264/H265 编码❌无✅Encoder 类支持图像格式仅 NV12仅 NV12CSI 通道编号规则CSI00CSI12CSI00CSI12规则完全一致推荐新项目不推荐仅兼容✅官方标准推荐典型 demo 场景无头设备纯 AI 运算MIPIHDMI 目标检测当前 FCOS 工程五、高频工程坑点1. 互斥占用同一 CSI 通道不能同时打开 vio_capture 和 srcampy.Camera会抢占VIO 驱动打开失败。2. CSI1 通道极易踩错无论两套 APICSI0 → index0CSI1 → index2 不要写 13. vio_capture 无法实现 “预览 推理并行”如果用 vio_capture想要同时预览只能持续读取大图Python 转发CPU 负载上升、延迟明显变大。4. 资源释放程序异常退出不执行release()/close_cam()ISP 锁死需要重启开发板才能重新打开摄像头。六、选型建议直接套用项目需要HDMI 预览 / 检测框 OSD / 录像编码 / 双分辨率直接使用 srcampylibsrcampy设备无显示器只做后端 AI 识别单一分辨率追求代码极简 可选 vio_capture七、最简示例对照vio_capture 极简模板python运行from hobot_vio import vio_capture import numpy as np cap vio_capture.VioCapture(0, 512, 512, nv12) while True: frame cap.read() # dnn forward(frame) cap.release()srcampy 极简模板python运行from hobot_vio_rdkx5 import libsrcampy as srcampy import numpy as np sensor_w, sensor_h 1920,1080 model_w, model_h 512,512 preview_w, preview_h 1920,1080 cam srcampy.Camera() cam.open_cam(0, -1, [model_w, preview_w], [model_h, preview_h], sensor_h, sensor_w) disp srcampy.Display() disp.display(0, preview_w, preview_h) srcampy.bind(cam, disp) disp.display(3, preview_w, preview_h) while True: nv12_buf cam.get_img(2, model_w, model_h) img np.frombuffer(nv12_buf, dtypenp.uint8) # dnn forward(img) cam.close_cam() disp.close()