mnjr123 2024-08-07 14:38 采纳率: 0%
浏览 41

树莓派4B连接无法同时调用两个USB摄像头

**树莓派4B同时调用两个USB摄像头出错,一次只能访问一个,无法同时访问。
**

img


摄像头连接图

#!/usr/bin/env python3

from flask import Flask, render_template, Response
import cv2


class VideoCamera(object):
    def __init__(self, camera_index):
        self.video = cv2.VideoCapture(camera_index)

    def __del__(self):
        self.video.release()

    def get_frame(self):
        success, image = self.video.read()
        if not success:
            return None
        ret, jpeg = cv2.imencode('.jpg', image)
        return jpeg.tobytes()


app = Flask(__name__)


#@app.route('/')
#def index():
#    return render_template('index.html')


def gen(camera):
    while True:
        frame = camera.get_frame()
        if frame is None:
            continue
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')


@app.route('/video_feed_1')
def video_feed_1():
    return Response(gen(VideoCamera(0)),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

@app.route('/video_feed_2')
def video_feed_2():
    return Response(gen(VideoCamera(2)),
                    mimetype='multipart/x-mixed-replace; boundary=frame')


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True, port=5000)


树莓派上运行的代码

img


单独访问第一个摄像头

img


单独访问第二个摄像头

img


在访问第一个摄像头时访问第二个摄像头视频流

img


报错找不到摄像头。。
如果能成功帮助解决问题,感激不仅可以适当给一些奖励

  • 写回答

1条回答 默认 最新

  • 一直免费一直爽 2024-08-11 20:59
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要解决这个问题,首先确保你的树莓派4B设备已经正确安装了uvc-streaming库,并且在启动时能够正常加载。以下是修复错误的方法:

    步骤 1: 确保库已安装

    打开终端(命令行),然后执行以下命令以确认是否已正确安装uvc-streaming库:

    pip list
    

    如果看到uvc-streaming出现在列表中,那么表示库已成功安装。如果没有找到这个库,你需要通过pip安装它:

    pip install uvc-streaming
    

    步骤 2: 更新依赖项

    确保Python环境中的所有依赖项都更新到了最新版本。这通常可以通过运行以下命令来完成:

    pip install --upgrade pip
    

    然后再次检查库是否已被添加到pip列表中:

    pip list
    

    步骤 3: 检查设备状态

    如果你在尝试调用两个USB摄像头时遇到问题,可能是因为其中一个摄像头没有被识别为可用。检查树莓派设备的状态,确保至少有一个摄像头是有效的。可以使用df -h命令查看磁盘空间:

    df -h
    

    步骤 4: 解决问题

    如果你已经确定库已安装并且设备也有效,接下来的问题可能是由于某些驱动程序未正确配置或冲突导致的。在这种情况下,可以尝试卸载并重新安装摄像头驱动程序,或者尝试禁用其他不必要的硬件检测选项:

    停止摄像头检测

    sudo modprobe -r v4l2loopback
    

    启动摄像头检测

    sudo modprobe v4l2loopback
    

    步骤 5: 运行测试

    现在你应该能够在控制台看到两个摄像头的有效状态。如果仍然出现问题,可能需要进一步诊断问题所在。比如,检查是否有其他设备占用同一接口,或是确保所有的USB设备都已经正确配置。

    示例代码示例

    如果你正在使用Flask框架处理视频流,可以参考以下修改后的代码:

    from flask import Flask, render_template, Response
    import cv2
    
    app = Flask(__name__)
    
    def generate_frames():
        # Replace 'camera_index' with the actual camera index for your USB cameras
        camera_index = 0
        
        # Initialize webcam object and start capturing frames
        camera = cv2.VideoCapture(camera_index)
        
        while True:
            # Capture frame-by-frame
            success, frame = camera.read()
            
            # If frame is read correctly
            if success:
                # Save the captured image into the "frames/" folder
                cv2.imwrite("/path/to/save/frame.jpg", frame)
                
                # Return the frame in the BGR format to be displayed
                yield (b'--frame\r\n'
                       b'Content-Type: image/jpeg\r\n\r\n' + open('/path/to/save/frame.jpg', 'rb').read() + b'\r\n\r\n')
            
            else:
                break
                
    @app.route('/video_feed_1')
    def video_feed_1():
        return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
    
    @app.route('/video_feed_2')
    def video_feed_2():
        return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True, port=5000)
    

    在这个例子中,我们创建了一个名为generate_frames的函数,用于读取摄像头帧并将它们转换成Web格式返回。注意替换实际的USB摄像头编号为camera_index变量。

    希望这些步骤能帮助您解决问题!如果您有任何疑问或需要更多帮助,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月7日

悬赏问题

  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法
  • ¥15 led数码显示控制(标签-流程图)
  • ¥20 为什么在复位后出现错误帧
  • ¥15 结果有了,想问一下这个具体怎么输入
  • ¥15 怎么修改鸿蒙app的UI及功能设计
  • ¥15 帮我利用jupyter 运行一个正确的代码
  • ¥15 如何使用Gephi软件和Python包中的GephiStreamer交互
  • ¥15 sqlite加密问题咨询
  • ¥15 appdesigner接收不到udp组播的数据
  • ¥15 verilog 非阻塞赋值下的移位拼接错误