簡體   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