繁体   English   中英

捕获和操作网络摄像头馈送并将其公开为“虚拟网络摄像头” - 在 Python 中,在 Windows 中

[英]Capturing and manipulating a webcam feed and exposing it as a “virtual webcam” - in Python, on Windows

最终目标是捕获常规的网络摄像头提要,以某种方式对其进行操作(模糊面部,替换背景,...),然后以某种方式 output 得到结果,以便可以选择经过操作的提要作为任何应用程序期望的输入网络摄像头(Discord、Teams、...)。

我正在使用 Windows 机器,并且更愿意在 Python 中执行此操作。 目前,这种组合让我迷失了方向。

显然,在 Linux 上有 Python 库仅提供该功能,但它们不适用于 Windows。 一切听起来像是暗示一个好的解决方案的东西都直接进入了 C++ 国家。 There are programs which basically do what I want, eg webcamoid ( https://webcamoid.github.io/ ) and I could hack together a solution which captures and processes the feed via Python, then uses webcamoid to record the output and feed it进入虚拟网络摄像头。 但我更愿意将所有事情合二为一。

我一直在搜索,并在stackoverflow上找到了这些关于该主题的问题:

我有一个强烈的印象,我需要 C++ 或者必须在 Linux 上工作。 但是,由于缺乏 Linux 机器和任何设置以及 C++ 编程经验,这对于本应是的“玩具项目”来说似乎需要大量工作。 但也许我只是在某处遗漏了一个明显的库或功能?

因此,问题是:有没有办法通过 Windows 上的 Python 暴露“网络摄像头”stream?

最后一个想法:如果我使用 docker 容器和 Linux Python 环境来实现我想要的功能怎么办。 然后该容器可以 stream 成为主机的“虚拟网络摄像头”吗?

您可以使用pyvirtualcam来做到这一点

首先,您需要使用 pip 安装它

pip install pyvirtualcam

然后 go到此链接并从最新版本下载 zip 文件

解压缩并导航到 \bin\[您的计算机的 bittedness]

在该目录中打开命令提示符并键入

regsvr32 /n /i:1 "obs-virtualsource.dll"

这会将假相机注册到您的计算机

如果您想取消注册相机,请运行以下命令:

regsvr32 /u "obs-virtualsource.dll"

现在您可以使用 pyvirtualcam 将帧发送到相机

这是一个示例:

import pyvirtualcam
import numpy as np

with pyvirtualcam.Camera(width=1280, height=720, fps=30) as cam:
    while True:
        frame = np.zeros((cam.height, cam.width, 4), np.uint8) # RGBA
        frame[:,:,:3] = cam.frames_sent % 255 # grayscale animation
        frame[:,:,3] = 255
        cam.send(frame)
        cam.sleep_until_next_frame()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM