So verarbeiten Sie Kamerabilder mit Teams und Zoom Verarbeitungsvolumen im Animationsstil

`Dieser Artikel wird auch hier vorgestellt. `` https://cloud.flect.co.jp/entry/2020/04/02/114756#f-459f23dc

In den vorherigen und zwei vorherigen Beiträgen habe ich vorgestellt, wie Kamerabilder mit Teams und Zoom verarbeitet werden. In diesen Beiträgen stellen wir eine Demo vor, die Lächeln und Emotionen (Ausdrücke) erkennt und eine Lächelnmarke anzeigt.

https://qiita.com/wok/items/0a7c82c6f97f756bde65 https://qiita.com/wok/items/06bdc6b0a0a3f93eab91

Dieses Mal habe ich es ein wenig erweitert und ein Experiment versucht, um das Bild in einen Animationsstil umzuwandeln und anzuzeigen, also werde ich es vorstellen. Zunächst denke ich, dass es schwierig ist, die CPU zu verwenden, da die Verzögerung etwas zu groß ist, um sie in Echtzeit in ein animationsähnliches Bild umzuwandeln. ~~ (Ich habe nicht versucht, ob es mit der GPU besser ist.) ~~ ➔ Ich habe es auf der GPU versucht. Es kommen ungefähr 15fps heraus. Es war wahnsinnig schnell.

frame_test_4screen.gif

Dann werde ich es sofort vorstellen.

Bildkonvertierung im Anime-Stil

Es scheint, dass es vor ungefähr einem halben Jahr in den Nachrichtenmedien veröffentlicht wurde, so viele von Ihnen wissen es vielleicht, aber die Methode zum Konvertieren von Fotos in einen Anime-Stil wird auf der folgenden Seite veröffentlicht.

https://github.com/taki0112/UGATIT

In diesem UGATIT scheint es im Gegensatz zur einfachen Konvertierung des image2image-Stils möglich geworden zu sein, auf Formänderungen zu reagieren, indem eine einzigartige Funktion namens AdaLIN hinzugefügt wird, die auf der sogenannten GAN-Technologie basiert, die Generator und Diskriminator verwendet. ist.

In our work, we propose an Adaptive Layer-Instance Normalization (AdaLIN) function to adaptively select a proper ratio between IN and LN. Through the AdaLIN, our attention-guided model can flexibly control the amount of change in shape and texture.

Einzelheiten finden Sie in diesem Dokument [^ 1] und im Kommentarartikel [^ 2]. Wenn Sie tatsächlich mit dem auf der obigen Seite veröffentlichten trainierten Modell konvertieren, sieht es so aus.

image.png

Es scheint nicht sehr gut zu konvertieren, wenn das Thema weit weg ist. Außerdem scheint mein Onkel nicht sehr gut damit umgehen zu können. Der in der Schulung verwendete Datensatz wird ebenfalls auf der obigen Seite veröffentlicht, scheint jedoch auf junge Frauen ausgerichtet zu sein, sodass dies die Ursache zu sein scheint. (Ich bin noch kein Onkel, ist das unmöglich?)

Implementierungsübersicht

Wie oben erwähnt, scheint es notwendig zu sein, ein Bild in der Nähe des Motivs (Gesicht der Person) zu erstellen (≒ Gesicht nimmt den größten Teil des Bildschirms ein). Dieses Mal habe ich versucht, den Standort des Gesichts mit der bis zum letzten Mal eingeführten Gesichtserkennungsfunktion zu identifizieren, den Standort auszuschneiden und mit UGATIT zu konvertieren.

image.png

Einzelheiten zur Implementierung finden Sie im unten genannten Repository. [^ 3] [^ 3]: Ab dem 2. April 2020 ist der Quellcode verschmutzt, da er durch Hinzufügen und Hinzufügen erstellt wird. Refactor irgendwo)))

Umgebung

Bitte bereiten Sie v4l2loopback, Gesichtserkennungsmodell usw. unter Bezugnahme auf Artikel bis zum letzten Mal vor.

Klonen Sie das Skript nach wie vor aus dem folgenden Repository und installieren Sie die erforderlichen Module.

$ git clone https://github.com/dannadori/WebCamHooker.git
$ cd WebCamHooker/
$ pip3 install -r requirements.txt

Platzierung von UGATIT-geschulten Modellen

UGATIT stellt offiziell Quellcode für Tensorflow und PyTorch zur Verfügung, aber es scheint, dass das einzige trainierte Modell die Tensorflow-Version ist. Holen Sie sich das und stellen Sie es bereit. Darüber hinaus scheint die Extraktion mit dem normalen Zip-Extraktions-Tool von Windows oder Linux fehlzuschlagen. Es gibt einen Bericht in der Ausgabe, dass 7zip unter Windows gut funktioniert. Außerdem scheint es auf dem Mac keine Probleme zu verursachen. Die Lösung für Linux ist unbekannt ... [^ 4] [^ 4]: Alle ab dem 2. April 2020

Derzeit wird der Hash-Wert (md5sum) des Modells beschrieben, das normal funktioniert. (Vielleicht ist dies der Stolperstein Nummer eins.)

$ find . -type f |xargs -I{} md5sum {}
43a47eb34ad056427457b1f8452e3f79  ./UGATIT.model-1000000.data-00000-of-00001
388e18fe2d6cedab8b1dbaefdddab4da  ./UGATIT.model-1000000.meta
a08353525ecf78c4b6b33b0b2ab2b75c  ./UGATIT.model-1000000.index
f8c38782b22e3c4c61d4937316cd3493  ./checkpoint

Speichern Sie diese Dateien in `` `UGATIT / checkpoint``` des Ordners, der von git oben geklont wurde. Wenn es so aussieht, ist es OK.

$ ls UGATIT/checkpoint/ -1
UGATIT.model-1000000.data-00000-of-00001
UGATIT.model-1000000.index
UGATIT.model-1000000.meta
checkpoint

Lassen Sie uns eine Videokonferenz haben!

Die Ausführung ist wie folgt. Eine Option wurde hinzugefügt.

Verwenden Sie außerdem Strg + C, um den Vorgang zu beenden.

$ python3 webcamhooker.py --input_video_num 0 --output_video_dev /dev/video2 --anime_mode True

Wenn Sie den obigen Befehl ausführen, wird ffmpeg ausgeführt und das Video wird an das virtuelle Kameragerät gesendet.

Wenn Sie eine Videokonferenz haben, wird nach wie vor etwas wie Dummy ~ ~ in der Liste der Videogeräte angezeigt. Wählen Sie es also aus. Dies ist ein Beispiel für Teams. Das Bild der Konvertierungsquelle wird auch durch Löschen in der oberen rechten Ecke des Bildschirms angezeigt. Es wird in einen Anime-Stil umgewandelt und mehr geliefert, als ich erwartet hatte. Es ist jedoch sehr schwer, und wenn es sich um einen etwas alten PC handelt, liegt er bei 1 Bild pro Sekunde (Intel (R) Core (TM) i7-4770-CPU bei 3,40 GHz, 32 G RAM). Es kann schwierig sein, normal zu arbeiten. Im Moment denke ich, dass es ein Aussteiger ist. Ich würde es gerne irgendwann auf der GPU ausprobieren.

out3.gif

Schließlich

Es mag schwierig sein, beiläufig zu kommunizieren, weil die Arbeit von zu Hause aus länger dauert, aber ich denke, es wäre gut, diese Art von Verspieltheit in Videokonferenzen einzubringen und Gespräche zu aktivieren. Ich denke, wir können mehr tun, also probieren Sie es bitte aus.

Recommended Posts

So verarbeiten Sie Kamerabilder mit Teams und Zoom Verarbeitungsvolumen im Animationsstil
So verarbeiten Sie Kamerabilder mit Teams und Zoom
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen
So zeigen Sie mehrere Bilder einer Galaxie in Kacheln an
Die parallele Verarbeitung der Python-Joblib funktioniert in der uWSGI-Umgebung nicht. Wie verarbeite ich parallel auf uWSGI?
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So erstellen Sie einen Datenrahmen und spielen mit Elementen mit Pandas
Wie man einen bestimmten Prozess am Anfang und Ende der Spinne mit Scrapy einfügt
So melden Sie sich mit Python bei AtCoder an und senden automatisch
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Node.js: So töten Sie Nachkommen eines Prozesses, der von child_process.fork () gestartet wurde
So sammeln Sie Bilder in Python
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
So suchen Sie mit Pythons Astroquery und erhalten passende Bilder mit Skyview
So arbeiten Sie mit BigQuery in Python
(Tagebuch 1) Erstellen, Durchsuchen und Registrieren von Daten in der SQL-Datenbank des Microsoft Azure-Dienstes mit Python
Wie schreibe ich diesen Prozess in Perl?
Verwendung ist und == in Python
So zeigen Sie Bilder in Djangos Admin an
So zeichnen Sie ein OpenCV-Bild mit Pygame
So übergeben Sie den Pfad zu der mit pyenv und virtualenv mit PyCharm erstellten Bibliothek
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
So lesen Sie Seriennummerndateien in einer Schleife, verarbeiten sie und zeichnen sie grafisch auf
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Umgang mit Speicherlecks in matplotlib.pyplot
[REAPER] Wie man Reascript mit Python spielt
So verfolgen Sie die Arbeit mit Powershell
So führen Sie eine Mehrkern-Parallelverarbeitung mit Python durch
So generieren Sie eine Sequenz in Python und C ++
So implementieren Sie die Time-Wait-Verarbeitung mit wxpython
Konvertieren Sie PDFs mit Python in Massenbilder
Zusammenfassung zum Importieren von Dateien in Python 3
Koexistenz von Fcitx und Zoom ~ Mit japanischer Lokalisierung ~
Umgang mit Laufzeitfehlern in subprocess.call
Zusammenfassung der Verwendung von MNIST mit Python
Skript zum Twittern mit Vielfachen von 3 und Zahlen mit 3 !!
So legen Sie Attribute mit Mock of Python fest
So implementieren Sie "named_scope" von RubyOnRails mit Django
Wie man tkinter mit Python in Pyenv benutzt
So zeigen Sie Bilder kontinuierlich mit matplotlib Memo an
Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
So erreichen Sie den Zugriff durch Attribut und Beibehaltung der Einfügereihenfolge in Python dict
[Linux] Anzeigen der CPU-Auslastung mit dem Befehl ps, Anzeigen des Headers und nicht Anzeigen des Grep-Prozesses
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
So zählen Sie die Anzahl der Vorkommen jedes Elements in der Liste in Python mit der Gewichtung
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Überprüfen Sie die Verarbeitungszeit und die Anzahl der Aufrufe für jeden Prozess mit Python (cProfile).