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