Comment traiter les images de caméra avec Teams et Zoom Volume de traitement dans le style d'animation

`Cet article est également présenté ici. '' https://cloud.flect.co.jp/entry/2020/04/02/114756#f-459f23dc

Dans les articles précédents et deux précédents, j'ai présenté comment traiter les images de caméra avec Teams et Zoom. Dans ces articles, nous présentons une démo qui détecte les sourires et les émotions (expressions) et affiche une marque de sourire.

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

Cette fois, je l'ai élargi un peu plus et j'ai essayé une expérience pour convertir l'image en style d'animation et l'afficher, donc je vais la présenter. Tout d'abord, je pense qu'il est difficile d'utiliser le CPU car le décalage est un peu trop important pour le convertir en image de type animation en temps réel. ~~ (Je n'ai pas essayé si c'est mieux avec le GPU.) ~~ ➔ Je l'ai essayé sur GPU. Environ 15fps sort. C'était incroyablement rapide.

frame_test_4screen.gif

Ensuite, je vais le présenter immédiatement.

Conversion d'image de style anime

Il semble qu'il ait été présenté dans les médias d'information il y a environ six mois, tant d'entre vous le savent peut-être, mais la méthode de conversion des photos en style anime est publiée sur la page suivante.

https://github.com/taki0112/UGATIT

Dans cet UGATIT, contrairement à la simple conversion de style image2image, il semble qu'il soit devenu possible de répondre aux changements de forme en ajoutant une fonction unique appelée AdaLIN basée sur la technologie dite GAN qui utilise Generator et Discriminator. est.

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.

Pour plus de détails, consultez cet article [^ 1] et l'article de commentaire [^ 2], et lorsque vous effectuez une conversion en utilisant le modèle entraîné publié sur la page ci-dessus, cela ressemble à ceci.

image.png

Cela ne semble pas très bien se convertir si le sujet est éloigné. De plus, mon oncle ne semble pas être capable de le gérer très bien. L'ensemble de données utilisé dans la formation est également publié sur la page ci-dessus, mais il semble être biaisé envers les jeunes femmes, donc cela semble être la cause. (Je ne suis pas encore oncle, est-ce impossible?)

Aperçu de la mise en œuvre

Comme mentionné ci-dessus, il semble nécessaire de faire une image proche du sujet (le visage de la personne) (≒ le visage occupe la majeure partie de l'écran). Cette fois, j'ai essayé la procédure d'identification de l'emplacement du visage avec la fonction de détection de visage introduite jusqu'à la dernière fois, en découpant l'emplacement et en le convertissant avec UGATIT.

image.png

Pour plus de détails sur l'implémentation, consultez le référentiel mentionné ci-dessous. [^ 3] [^ 3]: Depuis le 2 avril 2020, le code source est sale car il est fait par ajout et ajout. Refactoriser quelque part)))

Environnement

Veuillez préparer v4l2loopback, modèle de reconnaissance faciale, etc. en vous référant aux Articles jusqu'à la dernière fois.

De même, comme précédemment, clonez le script à partir du référentiel suivant et installez les modules requis.

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

Placement des modèles formés UGATIT

UGATIT fournit officiellement le code source pour Tensorflow et PyTorch, mais il semble que le seul modèle formé soit la version Tensorflow. Obtenez ceci et déployez-le. De plus, il semble que l'extraction échoue avec l'outil d'extraction zip normal de Windows ou Linux. Il y a un rapport dans le problème que 7zip fonctionne bien avec Windows. De plus, cela ne semble pas poser de problèmes sur Mac. La solution pour Linux est inconnue ... [^ 4] [^ 4]: tous au 2 avril 2020

Pour le moment, la valeur de hachage (md5sum) du modèle qui fonctionne normalement est décrite. (C'est peut-être la principale pierre d'achoppement.)

$ 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

Stockez ces fichiers dans UGATIT / checkpoint du dossier cloné à partir de git ci-dessus. Si ça ressemble à ça, ça va.

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

Organisons une vidéoconférence!

L'exécution est la suivante. Une option a été ajoutée.

--Saisissez le numéro de périphérique webcam réel dans input_video_num. Pour / dev / video0, entrez le 0 de fin. --Spécifiez le fichier de périphérique du périphérique de webcam virtuelle pour output_video_dev. --Définissez anime_mode sur True.

De plus, veuillez utiliser ctrl + c pour le terminer.

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

Lorsque vous exécutez la commande ci-dessus, ffmpeg s'exécute et la vidéo commence à être livrée au périphérique de caméra virtuelle.

Comme auparavant, lorsque vous avez une visioconférence, vous verrez quelque chose comme factice ~ ~ dans la liste des appareils vidéo, alors sélectionnez-le. Ceci est un exemple de Teams. L'image source de la conversion est également affichée en balayant dans le coin supérieur droit de l'écran. Il sera converti en un style anime et livré plus que ce à quoi je m'attendais. Cependant, il est très lourd, et s'il s'agit d'un petit vieux PC, il est au niveau de 1 image par seconde (processeur Intel (R) Core (TM) i7-4770 à 3,40 GHz, 32 Go de RAM). Il peut être difficile de fonctionner normalement. Pour l'instant, je pense que c'est un personnel décrocheur. J'aimerais éventuellement l'essayer sur GPU.

out3.gif

finalement

Il peut être difficile de communiquer avec désinvolture car le travail à domicile est prolongé, mais je pense qu'il serait bon d'apporter ce genre de jeu aux vidéoconférences et d'activer les conversations. Je pense que nous pouvons faire plus, alors essayez-le.

Recommended Posts

Comment traiter les images de caméra avec Teams et Zoom Volume de traitement dans le style d'animation
Comment traiter les images de caméra avec Teams et Zoom
Comment mettre OpenCV dans Raspberry Pi et collecter facilement des images des résultats de détection de visage avec Python
Comment afficher plusieurs images d'une galaxie en tuiles
Le traitement parallèle de Python joblib ne fonctionne pas dans l'environnement uWSGI. Comment traiter en parallèle sur uWSGI?
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Comment créer une trame de données et jouer avec des éléments avec des pandas
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
Node.js: Comment tuer les descendants d'un processus démarré par child_process.fork ()
Comment collecter des images en Python
Comment gérer les caractères déformés dans json de Django REST Framework
Comment rechercher à l'aide de l'Astroquery de Python et obtenir des images ajustées avec Skyview
Comment utiliser BigQuery en Python
(Journal 1) Comment créer, parcourir et enregistrer des données dans la base de données SQL du service Microsoft Azure avec python
Comment écrire ce processus en Perl?
Comment utiliser is et == en Python
Comment afficher les images dans l'administration de Django
Comment dessiner une image OpenCV avec Pygame
Comment passer le chemin vers la bibliothèque construite avec pyenv et virtualenv avec PyCharm
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Comment lire les fichiers de numéros de série en boucle, les traiter et les représenter graphiquement
Comment obtenir une liste de fichiers dans le même répertoire avec python
Comment gérer les fuites de mémoire dans matplotlib.pyplot
[REAPER] Comment jouer à Reascript avec Python
Comment suivre le travail avec Powershell
Comment faire un traitement parallèle multicœur avec python
Comment générer une séquence en Python et C ++
Comment implémenter le traitement du temps d'attente avec wxpython
Convertissez des PDF en images en masse avec Python
Résumé de la façon d'importer des fichiers dans Python 3
Coexistence de Fcitx et Zoom ~ Avec localisation japonaise ~
Comment gérer les erreurs d'exécution dans subprocess.call
Résumé de l'utilisation de MNIST avec Python
Script pour tweeter avec des multiples de 3 et des nombres avec 3 !!
Comment spécifier des attributs avec Mock of Python
Comment implémenter "named_scope" de RubyOnRails avec Django
Comment utiliser tkinter avec python dans pyenv
Comment afficher des images en continu avec matplotlib Memo
Conversion en ondelettes d'images avec PyWavelets et OpenCV
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment obtenir l'accès par attribut et la conservation de l'ordre d'insertion dans Python dict
[Linux] Comment afficher l'utilisation du processeur avec la commande ps, afficher l'en-tête et ne pas afficher le processus grep
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Vérifiez le temps de traitement et le nombre d'appels pour chaque processus avec python (cProfile)