【问题标题】:Capturing and manipulating a webcam feed and exposing it as a "virtual webcam" - in Python, on Windows捕获和操作网络摄像头提要并将其公开为“虚拟网络摄像头” - 在 Python 中,在 Windows 上
【发布时间】:2020-08-12 12:24:12
【问题描述】:

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

我在一台 Windows 机器上工作,并且更喜欢在 Python 中执行此操作。目前,这种组合让我迷失了方向。

显然,在 Linux 上,有一些 Python 库只是提供了该功能,但它们在 Windows 上不起作用。一切听起来像是暗示一个好的解决方案的东西都直接进入了 C++ 国家。有些程序基本上可以满足我的需求,例如webcamoid (https://webcamoid.github.io/) 和我可以 共同开发一个解决方案,该解决方案通过 Python 捕获和处理提要,然后使用 webcamoid 记录输出并将其馈送到虚拟网络摄像头。但我更愿意一次性完成所有事情。

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

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

因此,问题是:有没有办法在 Windows 上通过 Python 公开“网络摄像头”流?

最后一个想法:如果我使用带有 Linux Python 环境的 docker 容器来实现我想要的功能会怎样。然后该容器能否将“虚拟网络摄像头”流式传输到主机?

【问题讨论】:

    标签: python windows opencv webcam


    【解决方案1】:

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

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

    pip install pyvirtualcam
    

    然后去This Link下载最新版本的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()
    

    【讨论】:

    • 安装说明已经过时了。使用当前的 pyvirtualcam 版本,安装 OBS Studio(现在有一个内置的虚拟摄像头)就足够了。不再支持旧的社区插件。
    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2011-09-08
    • 2015-08-18
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多