请问X5是否支持两路mipi同时接入相同型号的摄像头

我的X5主板同时接了2个摄像头,videoIndex分别是0,2单独打开都可以,同时打开时第二个摄像头打开失败,我的摄像头型号为两个IMX477, pipeId配置相同或者不同都是如此:

2025/07/14 13:09:47.400 !INFO [OpenCamera][0450]hbn module
set camera fps: 50,width: 1920,height: 1080
Camera 0:
mipi_host: 0
Camera 1:
mipi_host: 2
Camera 2:
mipi_host: 0
Camera 3:
mipi_host: 0
Mipi csi0 has been used, please use other Cam interfaces
2025/07/14 13:09:47.400 ERROR [CamInitParam][0283]No camera sensor found, please check whether the camera connection or video_idx is correct.

2025/07/14 13:09:47.400 ERROR [OpenCamera][0498]CamInitParam failed error(-1)
[ERROR] [2025-07-14 13:09:47] open camera2 failed , camera2PipeId=1, camera2VideoIndex=2,width=1920,height=1080,fps=50 ret=-1
Cannot open file /sys/kernel/debug/vpu/venc.Cannot open file /sys/kernel/debug/vpu/vdec.Cannot open file /sys/kernel/debug/jpu/jenc.2025/07/14 13:09:47.440 ERROR [GetImageFrame][0690]get chn from 1920x1080 failed
[ERROR] [2025-07-14 13:09:47] Camera: sp_vio_get_frame ModelImage failed 1, ret=-1

请问如何解决?我项目上需要同时接入2路摄像头

1 个赞

那位大佬能知道如何解决吗,多谢了

从日志看:

Camera 0: mipi_host: 0
Camera 1: mipi_host: 2
Camera 2: mipi_host: 0   <-- 冲突
Camera 3: mipi_host: 0

说明:

  • 第一个摄像头使用了 mipi_host=0
  • 第二个摄像头也被分配了 mipi_host=0,导致冲突;

需要修改配置,确保使用不同的 MIPI Host

mipi host是修改程序中开流函数cam.open_cam(cam_id, 0, 30, 1920, 1080)吗

参数含义如下:

参数名 含义 示例说明
cam_id 摄像头索引(videoIndex) 0: /dev/video02: /dev/video2
mode MIPI host(MIPI CSI 控制器编号) 0: MIPI CSI0,2: MIPI CSI2
fps 帧率 30: 每秒30帧
width, height 分辨率 1920x1080

为什么我使用这段代码,open_cam第二位只有为1和-1时才行,使用的微雪官方的sc230ai双目

import sys
import time
import cv2
from hobot_vio import libsrcampy as srcampy
import numpy as np
def test_single_camera(cam_id=0):
    
    # 打开一个相机,并实时显示图像
    # :param cam_id: 相机 ID(MIPI 通道),默认为 0(相机 1),可以改为 1(相机 2)
    
    cam = srcampy.Camera()
    ret = cam.open_cam(cam_id, 1, 30, 1920, 1080) # 设置相机采集所用的参数-
    print(f"Camera {cam_id} open_cam return:", ret)
    if ret != 0:
        print(f"Error: 无法打开相机 {cam_id}")
        return
    # 实时显示相机画面,按 `q` 退出-
    while True:
        origin_image = cam.get_img(2, 1920, 1080)
        nv12 = np.frombuffer(origin_image, dtype=np.uint8).reshape(1080 * 3 // 2, 1920)
        bgr = cv2.cvtColor(nv12, cv2.COLOR_YUV2BGR_NV12)# COLOR_YUV420sp2RGB-
        if bgr is not None:
            cv2.imshow(f"Camera {cam_id}", bgr)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    # 关闭相机-
    cam.close_cam()
    print(f"Camera {cam_id} closed. Exiting…")
    # 关闭窗口-
    cv2.destroyAllWindows()
# 运行单相机测试(默认加载相机 1,可改 cam_id=1 选择相机 2)-
# for cam_id in [0, 1, 2, 3]:
cam_id=0
print(f"尝试打开 Camera {cam_id} …")
test_single_camera(cam_id)

而且运行其他官方示例都有这个问题

请问,我应该如何修改mipi_host, 因我是购买的相同型号的2个摄像头,这个参数是在系统配置里改,还是在我的应用代码里修改,还是有哪些工具可以使用来修改,或者说是我需要找摄像头厂商来进行修改?多谢了

这块的话也可参考一下我们双目相机的代码,手册中确实没有给出明确的使用方式

cam.open_cam(0,0,~~~~
cam1.open_cam(1,1,~~~~
写这两个试试

X5接了两个IMX219 mipi摄像头,如何实现两个视频同时通过web浏览器查看?

目前官方确实没有给出双目同时调用的例程,这块也已经向内部提了需求,以及记录在案。展示可以尝试参考Tros章节双目的源码

谢谢,公司着急用在设备上,如果不能支持一下,我们就放弃x5方案了

同时调用两路mipi肯定是没有问题的,web端显示是集成进tros中的,全部的代码+双目深度的算法都是完全开源的,这块可以根据需求进行修改达到功能。
商务合作的话可以参考我们的 地心引力计划 DGP - 地瓜机器人全球创业支持与生态加速计划 ,或者发邮件咨询,我们的商业团队会联系并且安排人力进行支持。

您好,正常来说mipi还是usb插上后系统都应该识别后分配不同的video的编号,但是X5对mipi并没有分配,这样就给开发带来了很大不便利,不知道他用了哪个。希望能够改成系统对这块的支持,我们用的其他芯片的板子都能够很好的识别。

你好,收到您的建议,这块也会想内部系统软件提建议,您的宝贵意见已经进入我们内部的需求池