如何将OAK相机当做网络摄像头使用?

如何将OAK相机当做网络摄像头使用?

OAK相机也可以用作网络摄像头。要启用此功能,你可以运行DepthAI演示uvc应用程序或使用UVC功能分支。确保使用USB3线,否则在某些情况下,USB2不工作

使用DepthAI演示脚本

首先,安装DepthAI

如果使用QT GUI,请在此选择UVC应用程序。

或者,直接从终端运行:

python3 depthai_demo.py --app uvc

使用UVC特征分支

# Skip cloning if you already have depthai-python repo
git clone https://github.com/luxonis/depthai-python.git
cd depthai-python
# Navigate to the custom branch
git checkout gen2_uvc
python3 examples/install_requirements.py
python3 examples/rgb_uvc.py

现在,你可以打开你最喜欢的会议应用程序,如Zoom或Slack,然后在网络摄像头选择菜单中选择Luxonis Device: UVC Video Contr

变通办法

目前,上述方法存在一些问题。即使在Linux上,UVC节点目前并不适用于所有应用程序。因为UVC代表USB Video Class,使用UVC管道打开OAK PoE系列的设备是不行的。另一个已知问题是在Windows操作系统上使用UVC管道不起作用,因为UVC描述符。以下是解决方法:

1.Python虚拟相机

一种选择是使用虚拟相机,如pyvirtualcam模块。你需要pip安装包并安装它的依赖项(如链接中所述)。这里有一个演示代码:

import pyvirtualcam
import depthai as dai
# Create pipeline
pipeline = dai.Pipeline()
cam = pipeline.create(dai.node.ColorCamera)
cam.setColorOrder(dai.ColorCameraProperties.ColorOrder.RGB)
cam.setPreviewSize(1280,720)
xout = pipeline.create(dai.node.XLinkOut)
xout.setStreamName("rgb")
cam.preview.link(xout.input)
# Connect to device and start pipeline
with dai.Device(pipeline) as device, pyvirtualcam.Camera(width=1280, height=720, fps=20) as uvc:
    qRgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
    print("UVC running")
    while True:
        frame = qRgb.get().getFrame()
        uvc.send(frame)

2.OBS转发UVC数据流

我们注意到,在一些应用上,比如Discord或Google Meet,Luxonis Device: UVC行不通。一种解决方法是使用OBS代理该流并使用OBS内部的虚拟摄像机。我运行的是Linux,为了使虚拟摄像机工作,我必须安装sudo apt install v4l2loopback-dkms(这也在安装说明中提到)。

这段视频将向你展示如何做到这一点。

3.OBS捕获cv2窗口

另一种解决方案是将视频流数据传输到主机,并捕获cv2.imshowOBS内的窗口:

  • 在depthai-python repo内部,运行python3 examples/ColorCamera/rgb_video.py。这将打开一个显示1080P视频流的新窗口。
  • 在OBS中,在源菜单下,单击+,添加新源。
  • 点击Window Capture (Xcomposite)选项,然后选择video
  • 然后,你可以点击Start Video Camera在OBS内部,使用来自OAK PoE设备的视频作为网络摄像头源。

Tags: