最终目标是捕获常规网络摄像头源,以某种方式对其进行操作(模糊脸部、替换背景等),然后以某种方式输出结果,以便可以选择受操作的源作为任何应用程序期望的输入网络摄像头(Discord、Teams...)。
我正在 Windows 机器上工作,并且更喜欢在 Python 中执行此操作。目前,这种组合让我迷失了。
- 捕获和操作很容易https://pypi.org/project/opencv-python/ https://pypi.org/project/opencv-python/
- 暴露 feed 步骤似乎过于复杂
显然,在 Linux 上有一些 Python 库只提供该功能,但它们在 Windows 上不起作用。所有听起来像是暗示一个好的解决方案的东西都直接进入了 C++ 国家。有些程序基本上可以做我想做的事,例如网络摄像头(https://webcamoid.github.io/ https://webcamoid.github.io/) and I could拼凑出一个解决方案,通过 Python 捕获和处理源,然后使用 webcamoid 记录输出并将其输入虚拟网络摄像头。但我更喜欢将所有事情集中在一起完成。
我已经搜索了一下,并在 stackoverflow 上发现了有关该主题的以下问题:
-
使用 OpenCV 输出作为网络摄像头 https://stackoverflow.com/questions/21446292/using-opencv-output-as-webcam(使用 C++,但也提供了 Python 解决方案 - 然而,pyfakewebcam 不适用于 Windows)
-
(没有真正回答,只是链接到其他问题)
-
如何模拟网络摄像头设备 https://stackoverflow.com/questions/35480034/how-to-simulate-a-webcam-device(更多 C++ 提示,链接到 msdn 的编写自定义媒体源)
-
Windows 上的人工网络摄像头 https://stackoverflow.com/questions/44047422/artificial-webcam-on-windows(基本上是我想要的,但又是用C++)
-
编写虚拟网络摄像头? https://stackoverflow.com/questions/6243891/writing-a-virtual-webcam(更多关于这在 C++ 中如何工作的解释)
我正在得到strong印象中我需要 C++ 来完成这个任务或者必须在 Linux 上工作。然而,由于缺乏 Linux 机器、任何设置以及 C++ 编程经验,这对于本应是的“玩具项目”来说似乎需要大量工作。但也许我只是在某个地方缺少一个明显的库或功能?
因此,问题是:有没有办法在 Windows 上通过 Python 公开“网络摄像头”流?
最后一个想法:如果我使用带有 Linux Python 环境的 docker 容器来实现我想要的功能会怎么样。然后该容器可以将“虚拟网络摄像头”传输到主机吗?
您可以通过使用来做到这一点py虚拟摄像头 https://github.com/letmaik/pyvirtualcam
首先,你需要使用pip安装它
pip install pyvirtualcam
然后去这个链接 https://github.com/CatxFish/obs-virtual-cam/releases并下载最新版本的 zip 文件
解压并导航到 \bin\[您计算机的位]
在该目录中打开命令提示符并输入
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)