Der Auslauf kann als Kamera in einem Videokonferenzsystem wie Zoom ausgewählt werden. Wenn Sie also Webkamera → Auslauf (Gonyogonyo in Python) → Zoom usw. auswählen, möchten Sie Ihr Gesicht nicht so zeigen, wie es ist, wenn Sie von zu Hause aus arbeiten, sondern Ihren Ausdruck usw. , Sie können ganz einfach einen Effekt auf das Gesicht anwenden oder umgekehrt den anderen Hintergrund als das Gesicht löschen. Ich habe "leicht" geschrieben, aber tatsächlich ist der Originalartikel alt, so dass es nicht funktioniert, wenn die Versionen der einzelnen Module nicht kompatibel sind, so dass Shioume mein Know-how ist.
Klicken Sie hier, um zur Spout-Kopffamilie zu gelangen: https://spout.zeal.co/ Installieren Sie den Auslauf von hier aus.
Laden Sie dann Spout for Python herunter von:
https://github.com/spiraltechnica/Spout-for-Python
Wenn jeder Code im Beispiel in diesem Spout-for-Python-Master funktioniert, können Sie SpoutSDK.pyd in Libs unverändert verwenden. Wenn dies jedoch nicht funktioniert, müssen Sie ihn selbst erstellen.
Beim Erstellen für Python sind die folgenden Websites hilfreich. Nach dem obigen Original Es nimmt viel Zeit in Anspruch, da alle Bibliotheken außer Python erstellt werden.
https://rusin.work/vjing/tools/spout-for-python/
Eine der Arbeitsversionskombinationen in diesem Fall ist wie folgt. Das sind alles Plattformen Es ist nicht bekannt, ob es funktioniert. Es kann auf Ihrem PC funktionieren oder auch nicht. Insbesondere opencv usw. funktionieren möglicherweise nicht richtig. Wenn Sie die Arbeitsversion des Python-Ordners auf den nicht funktionierenden PC kopieren, funktioniert dies.
Python 3.74 PyOpenGL 3.15 pygame 1.18.2 opencv_python 4.2.0.34
Erstellen Sie es jetzt, um SpoutSDK.dll zu erstellen, die Sie in SpoutSDK.pyd umbenannt haben. Erhältlich bei Python mit dem Import SpoutSDK.
Wenn der folgende Code auf einem mit WebCam ausgestatteten PC funktioniert, ist er vorerst in Ordnung. Mit anderen Worten, Sie können das Video von WebCam mit SpoutReceive im DEMO-Ordner von Spout empfangen. Bitte prüfen. Wenn Sie es empfangen können, verwenden Sie Spout als Kamera von Zoom usw. Wenn ausgewählt, können Sie das Video an eine Videokonferenz senden.
Ich werde Ihnen im nächsten Beitrag zeigen, wie Sie dies bewirken können.
import sys
sys.path.append('../Library')
import cv2
import numpy as np
import SpoutSDK
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
def main():
# window details
width = 640
height = 480
display = (width,height)
# window setup
pygame.init()
pygame.display.set_caption('Spout Python Sender')
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
pygame.display.gl_set_attribute(pygame.GL_ALPHA_SIZE, 8)
cap = cv2.VideoCapture(0)
if cap.isOpened() is False:
raise("IO Error")
cap.set(cv2.CAP_PROP_FPS, 30)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
cap.set(3, width)
cap.set(4, height)
# OpenGL init
glMatrixMode(GL_PROJECTION)
glOrtho(0,width,height,0,1,-1)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glDisable(GL_DEPTH_TEST)
glClearColor(0.0,0.0,0.0,0.0)
glEnable(GL_TEXTURE_2D)
# init spout sender
spoutSender = SpoutSDK.SpoutSender()
spoutSenderWidth = width
spoutSenderHeight = height
# Its signature in c++ looks like this: bool CreateSender(const char *Sendername, unsigned int width, unsigned int height, DWORD dwFormat = 0);
spoutSender.CreateSender('Spout for Python Webcam Sender Example', width, height, 0)
# create texture id for use with Spout
senderTextureID = glGenTextures(1)
# initalise our sender texture
glBindTexture(GL_TEXTURE_2D, senderTextureID)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glBindTexture(GL_TEXTURE_2D, 0)
# loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
ret, frame = cap.read() #read camera image
#img = cv2.imread('image.png') # if use the image file
frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) #BGR-->RGB
h, w = frame.shape[:2]
glBindTexture(GL_TEXTURE_2D, senderTextureID)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, frame)
spoutSender.SendTexture(senderTextureID, GL_TEXTURE_2D, spoutSenderWidth, spoutSenderHeight, False, 0)
#glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# Clear screen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
# reset the drawing perspective
glLoadIdentity()
# Draw texture to screen
glBegin(GL_QUADS)
##
glTexCoord(0,0)
glVertex2f(0,0)
#
glTexCoord(1,0)
glVertex2f(width,0)
#
glTexCoord(1,1)
glVertex2f(width,height)
#
glTexCoord(0,1)
glVertex2f(0,height)
##
glEnd()
pygame.display.flip()
# unbind our sender texture
glBindTexture(GL_TEXTURE_2D, 0)
# pygame.time.wait(10)
if __name__ == '__main__':
main()
Recommended Posts