[PYTHON] Erstellen Sie einen Effektor für Videokonferenzen mit Spout + OpenCV + dlib (Teil 1).

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

Erstellen Sie einen Effektor für Videokonferenzen mit Spout + OpenCV + dlib (Teil 1).
Erstellen Sie mit opencv ganz einfach Miniaturansichten aus erotischen Videoordnern
Loop-Video-Laden mit opencv
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Machen wir ein IoT-Shirt mit Lambda, Kinesis, Raspberry Pi [Teil 1]
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Suchen Sie mit opencv nach phasenidentischen zusammengesetzten Wörtern
Zeichnen Sie eine Illustration mit Python + OpenCV
Machen Sie Scrapy exe mit Pyinstaller
Erstellen Sie eine MQTT Publisher Box Teil 2