[PYTHON] Comment traiter les images de caméra avec Teams et Zoom

`Cet article est également présenté ici. '' https://cloud.flect.co.jp/entry/2020/03/31/162537

Bonjour à tous.

Actuellement, à la demande du gouverneur de Tokyo, notre société travaille en principe à domicile pour empêcher la propagation d'une nouvelle infection à coronavirus. Il y a beaucoup de gens qui prennent des mesures similaires, et je pense qu'il y a diverses difficultés, mais j'aimerais travailler ensemble pour surmonter cette chanson difficile.

Soit dit en passant, en règle générale, si vous travaillez à domicile pendant une longue période, vous pouvez être stressé, par exemple ne pas pouvoir avoir des conversations informelles qui ont lieu quotidiennement. Dans une telle situation, je voudrais créer une situation où vous pouvez rire et faire une pause, alors je voudrais vous présenter une petite histoire.

Le contenu est une méthode d'accrochage, de traitement et de livraison d'une webcam dans les vidéoconférences telles que Microsoft Teams et Zoom. Puisque je suis un utilisateur Linux, cette fois je vais l'introduire sous Linux. Je pense que d'autres plates-formes seront introduites quelque part.

De plus, je choisis le moment et le cas pour créer "une situation où même on peut rire et faire une pause", alors faites-le à vos risques et périls (^ _ ^) /.

test.gif

supposition

Je pense que cela fonctionne bien sur la plupart des systèmes Linux, mais l'environnement avec lequel j'ai travaillé est Debian Buster.

$ cat /etc/debian_version
10.3

De plus, si python3 n'est pas inclus, veuillez l'installer.

$ python3 --version
Python 3.7.3

Installation des logiciels associés

Appareil de webcam virtuelle

Cette fois, nous utiliserons une webcam virtuelle appelée v4l2loopback. https://github.com/umlaeute/v4l2loopback

Nous devons identifier le périphérique de webcam virtuelle à partir de la webcam réelle, alors vérifiez d'abord le fichier de périphérique pour la webcam réelle. Dans l'exemple ci-dessous, video0 et video1 semblent être attribués à la webcam réelle.

$ ls /dev/video*
/dev/video0  /dev/video1

Maintenant, introduisons le bouclage v4l2. Tout d'abord, git clone, make et installe.

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

Chargez ensuite le module. A ce moment, il semble qu'il soit nécessaire d'ajouter exclusive_caps = 1 afin de le reconnaître notamment avec chrome. [https://github.com/umlaeute/v4l2loopback/issues/78]

sudo modprobe v4l2loopback exclusive_caps=1

Maintenant que le module est chargé, vérifions le fichier de l'appareil. Dans l'exemple ci-dessous, video2 a été ajouté.

$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2

ffmpeg Le moyen le plus simple d'envoyer des données à un appareil de webcam virtuelle est d'utiliser ffmpeg. Veuillez l'installer rapidement avec apt-get etc.

Crochet de caméra Web et distribution vidéo

Cette fois, si un sourire est détecté, j'essaierai de traiter l'image. Lorsqu'un sourire est détecté, une marque de sourire s'affiche sur la vidéo.

Tout d'abord, clonez les fichiers dans le référentiel suivant pour installer le module.

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

Obtenez le fichier en cascade à partir d'ici. Pour plus de détails sur le fichier en cascade, consultez la formule opencv. https://github.com/opencv/opencv/tree/master/data/haarcascades

$ wget https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml -P models/
$ wget https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_smile.xml -P models/

Empruntons la marque de sourire de M. Toya.

$ wget https://4.bp.blogspot.com/-QeM2lPMumuo/UNQrby-TEPI/AAAAAAAAI7E/cZIpq3TTyas/s160/mark_face_laugh.png -P images/

Ce serait bien d'avoir une structure de dossiers comme celle-ci.

$ ls -1
haarcascade_frontalface_default.xml
haarcascade_smile.xml
mark_face_laugh.png
webcamhooker.py

L'exécution est la suivante. Entrez le numéro de périphérique webcam réel dans --input_video_num. Pour / dev / video0, entrez le 0 de fin. Pour --output_video_dev, spécifiez le fichier de périphérique du périphérique de webcam virtuelle. De plus, veuillez utiliser ctrl + c pour le terminer.

$ python3 webcamhooker.py --input_video_num 1 --output_video_dev /dev/video2

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.

Ayons un chat vidéo!

Lorsque vous faites un chat vidéo, vous verrez quelque chose comme factice ~ ~ dans la liste des appareils vidéo, alors sélectionnez-le. Ceci est un exemple de Teams. Pensez à la gauche et à la droite comme les écrans de chaque participant. L'utilisateur de gauche utilise ce périphérique de caméra virtuelle. Le côté droit est le côté récepteur. Lorsque vous souriez, vous verrez une marque de sourire. Grand succès (^ _ ^) /.

test.gif

finalement

Maintenant que la communication en face à face est difficile, j'espère que vous pourrez en profiter encore plus en utilisant le chat vidéo. Cette fois, j'ai montré un exemple de détection d'un sourire et de traitement de l'image, mais je pense que divers traitements peuvent être effectués en utilisant opencv et d'autres outils en fonction de l'appareil. Veuillez essayer différentes choses!

référence

Je me suis référé ici pour la détection de sourire avec opencv. https://qiita.com/fujino-fpu/items/99ce52950f4554fbc17d

Veuillez vous référer ici pour coller des images avec opencv. https://qiita.com/a2kiti/items/9672fae8e90c2da6f352

Recommended Posts

Comment traiter les images de caméra avec Teams et Zoom
Comment traiter les images de caméra avec Teams et Zoom Volume de l'analyse des émotions avec Tensorflow
Comment traiter les images de caméra avec Teams et Zoom Volume de traitement dans le style d'animation
Comment déboguer avec Jupyter ou iPython Notebook
Comment afficher des images en continu avec matplotlib Memo
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
Comment modifier avec SQLAlchemy?
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Comment supprimer avec SQLAlchemy?
Comment créer un BOT Cisco Webex Teams à l'aide de Flask
Comment ne pas charger d'images lors de l'utilisation de PhantomJS avec Selenium
Comment annuler RT avec Tweepy
Comment activer Keras Regressor pour être enregistré avec Pickle ou Joblib
Python: comment utiliser async avec
Comment collecter des images en Python
Pour utiliser virtualenv avec PowerShell
Comment installer python-pip avec ubuntu20.04LTS
Comment gérer les données déséquilibrées
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Comment démarrer avec Scrapy
Comment démarrer avec Python
Comment gérer l'erreur DistributionNotFound
Comment démarrer avec Django
Comment augmenter les données avec PyTorch
Node.js: Comment tuer les descendants d'un processus démarré par child_process.fork ()
Comment calculer la date avec python
Comment installer mysql-connector avec pip3
Comment INNER JOIN avec SQL Alchemy
Comment installer Anaconda avec pyenv
Le moyen le plus rapide d'obtenir régulièrement des images de caméra avec opencv de python
Comment rechercher à l'aide de l'Astroquery de Python et obtenir des images ajustées avec Skyview
Comment effectuer un traitement arithmétique avec le modèle Django
[Blender] Comment définir shape_key avec un script
Comment titrer plusieurs figures avec matplotlib
Comment obtenir l'identifiant du parent avec sqlalchemy
Apprenez à coloriser les images monochromes avec Chainer
Comment ajouter un package avec PyCharm
Comment installer DLIB avec 2020 / CUDA activé
Comment utiliser ManyToManyField avec l'administrateur de Django
Comment utiliser OpenVPN avec Ubuntu 18.04.3 LTS
Comment utiliser Cmder avec PyCharm (Windows)
Comment empêcher les mises à jour de paquets avec apt
Comment utiliser BigQuery en Python
Comment utiliser Ass / Alembic avec HtoA
Caméra à pixel unique à expérimenter avec Python
Comment gérer les erreurs de compatibilité d'énumération
Comment utiliser le japonais avec le tracé NLTK
Comment faire un test de sac avec python
Comment rechercher Google Drive dans Google Colaboratory
Comment afficher le japonais python avec lolipop
Comment télécharger des vidéos YouTube avec youtube-dl
Ajouter des images à des photos iOS avec Pythonista
Comment utiliser le notebook Jupyter avec ABCI
Comment mettre hors tension de Linux sur Ultra96-V2