Table des matières:

RoboPhoto - un générateur de mosaïque pour le public : 4 étapes
RoboPhoto - un générateur de mosaïque pour le public : 4 étapes

Vidéo: RoboPhoto - un générateur de mosaïque pour le public : 4 étapes

Vidéo: RoboPhoto - un générateur de mosaïque pour le public : 4 étapes
Vidéo: Generate AI Avtar Photos like midjourney AI Bot | Best AI Avatar Image generator 2024, Novembre
Anonim
Image
Image
RoboPhoto - un générateur de mosaïque pour le public
RoboPhoto - un générateur de mosaïque pour le public
RoboPhoto - un générateur de mosaïque pour le public
RoboPhoto - un générateur de mosaïque pour le public

RoboPhoto est un générateur de photomosaïque en temps réel

RoboPhoto crée une photomosaïque de ses utilisateurs - pendant que vous attendez.

En utilisant des techniques numériques modernes telles que le traitement d'images, la reconnaissance faciale et l'intelligence artificielle, RoboPhoto est capable de créer une photomosaïque de tous les visiteurs passant et appuyant sur son bouton - en temps réel.

Chaque fois que le bouton est enfoncé, une photo est prise de la personne à portée de main. Instantanément chaque photo est numérisée et interprétée par RoboPhoto. Le logiciel RoboPhoto modifiera ensuite toutes les images individuelles - afin qu'elles fassent partie d'une image plus grande, puis imprimera cette image modifiée sur un autocollant étiqueté avec un ensemble de coordonnées indiquant l'emplacement de chaque photo dans cette image plus grande. Chaque visiteur est ensuite invité à placer son propre autocollant photo sur une toile plus grande contenant uniquement une grille correspondante.

Pendant le fonctionnement de RoboPhoto, une nouvelle image sera créée. Une photomosaïque composée de ces photographies individuelles qui imiteront une « image cible » prédéfinie.

RoboPhoto fonctionne également en mode mono-utilisateur. Lorsqu'il est configuré de cette façon, RoboPhoto crée une mosaïque complète d'un seul utilisateur.

Fournitures

  • Un PC Windows 10 avec les packages Visual Studio et IoT installés
  • Un Raspberry Pi 3B+ avec Microsoft Windows 10 IoT installé
  • Une imprimante d'étiquettes couleur (Brother VC-500W)
  • Un gros bouton-poussoir rouge monté sur un socle pour l'entrée de l'utilisateur
  • Un écran HDMI pour les retours utilisateurs
  • Un appareil photo Microsoft Xbox Kinect v2 - volé à mon fils - pour prendre des photos
  • Un réseau (Wifi, LAN)
  • Une grille cible. Une feuille de papier avec une grille imprimée dessus - remplie de coordonnées. Cette grille de papier sert de toile où les visiteurs peuvent coller leur photographie sur les coordonnées désignées. Et finalement, ils formeront ensemble le résultat final: une magnifique nouvelle photomosaïque.

Une caméra icrosoft Kinect 2.0 a été utilisée car elle peut prendre des images en profondeur. Cette fonctionnalité est utilisée pour créer un écran vert virtuel sur chaque photo. De cette façon, RoboPhoto peut repeindre l'arrière-plan de chaque photographie individuelle pour qu'il corresponde à la couleur d'une pièce cible dans la future mosaïque.

Étape 1: Comment cela fonctionne

Comment ça marche
Comment ça marche
Comment ça marche
Comment ça marche
Comment ça marche
Comment ça marche
Comment ça marche
Comment ça marche

RoboPhoto est une installation contenant un piédestal avec un gros bouton rouge dessus, un ordinateur avec une imprimante d'étiquettes connectée et un petit appareil IoT gérant l'interface utilisateur (écran et bouton). Dans mon cas: un RaspBerry 3B+.

  1. RoboPhoto fonctionne dans un endroit accessible au public et est (après l'avoir allumé) autonome. Lors de la course, les visiteurs de passage sont encouragés par RoboPhoto à appuyer sur son gros bouton rouge.
  2. Chaque fois que vous appuyez sur ce gros bouton rouge, RoboPhoto prend une photo du visiteur qui vient d'appuyer sur le bouton avec la caméra Kinect.
  3. Ensuite, RoboPhoto utilisera son A. I. avancé. et des compétences en traitement d'image pour modifier chaque photo pour qu'elle corresponde à une pièce de la future mosaïque. Pour ce faire, RoboPhoto repeint l'arrière-plan de chaque photo pour qu'il corresponde à la couleur d'une pièce cible dans une image préchargée. Après l'édition, RoboPhoto imprime la photo éditée sur un autocollant avec un ensemble de coordonnées qui identifient l'emplacement de cet autocollant dans la mosaïque.

  4. Ensuite, l'utilisateur est invité à placer l'autocollant sur la feuille cible en mosaïque.
  5. Et ainsi, après la visite de nombreuses personnes, une nouvelle œuvre d'art émergera. Pour créer une mosaïque, vous aurez besoin de beaucoup de pièces individuelles. J'ai obtenu des résultats décents avec 600 pièces

RoboPhoto peut également fonctionner en mode mono-utilisateur.

Dans cette configuration, RoboPhoto crée une mosaïque complète de photographies éditées par un seul utilisateur. Après avoir appuyé sur le bouton, RoboPhoto prendra environ 600 photos différentes de l'utilisateur, puis les éditera et les arrangera toutes pour former une seule nouvelle mosaïque, créée après une image cible présélectionnée.

Étape 2: Assemblage du matériel

Assemblage du matériel
Assemblage du matériel
Assemblage du matériel
Assemblage du matériel

Comme le montre l'image ci-dessus, le PC Win 10 est connecté à la caméra Kinect. Kinect doit être connecté par USB 3.0. Au moment où j'ai créé RoboPhoto - aucun Raspberry Pi avec USB 3.0 n'était disponible.*

Le PC est également utilisé pour gérer l'impression sur l'imprimante d'étiquettes connectée. Dans mon cas, un Brother VC-500W. Une imprimante d'étiquettes couleur domestique assez bon marché. C'est quand même très très lent. Mieux vaut utiliser un professionnel si vous le pouvez.

Le Big Red Button est attaché à un Raspberry Pi 3B+. Seuls 4 fils sont connectés au GPIO. C'est la seule soudure nécessaire faite dans ce Instructable. Le Pi fournit également un retour d'information à notre visiteur au moyen d'un écran TFT 7'' sur HDMI.

Pour le ranger, j'ai construit un socle en bois qui contient tous ces éléments.

A côté du piédestal, contre le mur, une feuille de papier contenant la grille-cible et les coordonnées est placée (A1/A2). Parce que l'imprimante d'étiquettes que j'ai utilisée atteint sa largeur d'étiquette = 2,5 cm, tous les carrés de cette grille mesurent 2,5 cm x 2,5 cm.

*Aujourd'hui, Raspberry Pi4 propose l'USB3.0. Alse W10 peut être exécuté sur l'appareil. Il devrait donc théoriquement être possible de créer un RoboPhoto v2.0 sans utiliser de PC. Peut-être que Covid '19 me donnera suffisamment de temps pour publier bientôt un tel Instructable.

Étape 3: Rédaction du code

Rédaction du code
Rédaction du code
Rédaction du code
Rédaction du code

Code

RoboPhoto a été créé avec VisualStudio comme solution avec deux projets:

  1. Une application Windows Forms sur le PC héberge un serveur TCP et gère l'entrée Kinect
  2. Un Raspberry Pi 3B+ hébergeant un client TCP au sein d'une application dirigée par UWP (définie comme application de démarrage) pour gérer les événements d'appui sur les boutons et fournir à l'utilisateur un retour d'informations via son écran TFT 7''.

Dans le schéma ci-dessus, j'ai essayé de vous donner une idée de ce que fait mon soft. Le Visual Studio que j'ai écrit pour créer cette solution RoboPhoto (absolument 100% fonctionnel) est fourni avec ce Instructable. Cependant, je dois avertir tous ceux qui téléchargent ce fichier: le code que j'ai écrit est loin d'être joli et souvent lié à mon dev-PC. J'encourage donc tout le monde à créer une solution meilleure, plus agréable et plus stable.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Réseau

Dans l'exemple de code, le code du Pi est déployé via Visual Studio sur une adresse IP de mon réseau. Vous devriez probablement changer cela pour l'adapter au vôtre. Pour ce faire, cliquez avec le bouton droit sur le projet client ARM après avoir ouvert la solution dans Visual Studio, puis choisissez les propriétés et modifiez la valeur Machine distante sur l'adresse IP de votre propre Pi. Vous devez également autoriser le trafic allant du client au serveur sur le port 8123 dans le pare-feu Windows sur le serveur (PC). Si vous exécutez la solution à partir de Visual Studio, il devrait vous demander de le faire pour U.

Lors du codage, j'ai eu beaucoup de mal à faire communiquer correctement le W32 et l'UWP. Je l'ai fait fonctionner en utilisant deux classes distinctes dans le client et le serveur: resp MyEchoClient.cs (dans le client ARM) et ConnectionClient.cs (en gérant les connexions client sur le serveur).

Fichiers mosaïque - classe personnalisée

RoboPhoto crée des mosaïques pour imiter une image cible. Cette image cible et toutes les photographies individuelles qui constituent ensemble la future mosaïque, ainsi que certaines autres propriétés de chaque RoboPhoto sont stockées dans des fichiers dans un système de fichiers. Mon code accompagné utilise un ensemble de fichiers et de dossiers dans le répertoire c:\tmp\MosaicBuilder. Dans ce dossier, le code lira tous les sous-dossiers dont le nom de dossier commence par [prj_] en tant que dossiers de projet de mosaïque. Dans tous ces dossiers [prj_], il essaiera d'ouvrir un fichier de projet nommé [_projectdata.txt] qui contient toutes les informations requises pour chaque projet.

Un tel fichier de projet se compose de:

  1. le chemin complet et le nom de fichier de l'image cible de ce projet
  2. le chemin complet où les photographies individuelles (pièces) de ce projet sont stockées
  3. Nombre de colonnes que contiendra la mosaïque
  4. Nombre de lignes que contiendra la mosaïque

Des exemples de projets sont fournis dans le fichier zip: \slnBBMosaic2\wfMosaicServerKinect\bin\x86\Debug\prj_xxx

Dans le code du serveur C#, toute la gestion des mosaïques se fait via une classe personnalisée: BBMosaicProject.cs

Microsoft Kinect v2.0 - Écran vert

Pour simplement prendre des photos, n'importe quel appareil photo fera l'affaire. Mais j'ai utilisé Microsoft Kinect v2.0 pour combiner des images couleur et des images de profondeur. De cette façon, un effet d'écran vert peut être créé. L'arrière-plan de toutes les images couleur reçues de Kinect sera remplacé par une surface verte uniforme (BBBackgroundRemovalTool.cs).

Une référence à Microsoft. Kinect a été ajoutée au serverproject.

EMGU

Parce que nous devons être sûrs qu'une personne est sur la photo qui a été prise lorsque le bouton a été enfoncé, des capacités de reconnaissance faciale ont été ajoutées à RoboPhoto.

www.nuget.org/packages/Emgu. CV/3.4.3.3016

Ce n'est que lorsqu'une personne se trouve dans l'image que l'écran vert de cette image sera remplacé par une surface de couleur uniforme, avec des codes de couleur égaux à la couleur moyenne de la pièce cible dans la mosaïque que cette image deviendra.

Étape 4: Merci

Merci
Merci

Merci d'avoir lu mon Instructable. C'était mon premier. J'espère que vous avez aimé.

Conseillé: