Inhaltsverzeichnis:

RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit - Gunook
RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit - Gunook

Video: RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit - Gunook

Video: RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit - Gunook
Video: Karley.de Video Tutorial - Bedienung der RoboPhoto V2 Software 2024, November
Anonim
Image
Image
RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit
RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit
RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit
RoboPhoto - ein Mosaik-Generator für die Öffentlichkeit

RoboPhoto ist ein Echtzeit-Photomosaik-Generator

RoboPhoto erstellt ein Fotomosaik seiner Benutzer – während Sie warten.

Durch den Einsatz moderner digitaler Techniken wie Bildverarbeitung, Gesichtserkennung und künstlicher Intelligenz ist RoboPhoto in der Lage, ein Fotomosaik aller vorbeigehenden und auf Knopfdruck stehenden Besucher zu erstellen – in Echtzeit.

Bei jedem Tastendruck wird ein Foto der anwesenden Person aufgenommen. Sofort wird jedes Foto von RoboPhoto gescannt und interpretiert. Die RoboPhoto-Software ändert dann alle einzelnen Bilder – so dass sie Teil eines größeren Bildes werden, und druckt dieses geänderte Bild dann auf einen Aufkleber, der mit einer Reihe von Koordinaten beschriftet ist, die die Position jedes Fotos innerhalb dieses größeren Bildes angeben. Jeder Besucher wird dann aufgefordert, seinen eigenen Fotosticker auf einer größeren Leinwand zu platzieren, die nur ein entsprechendes Raster enthält.

Während des Betriebs von RoboPhoto wird ein neues Bild erstellt. Ein Fotomosaik aus diesen einzelnen Fotografien, das ein vordefiniertes „Zielbild“nachahmt.

RoboPhoto arbeitet auch im Einzelbenutzermodus. Bei dieser Konfiguration erstellt RoboPhoto ein vollständiges Mosaik eines einzelnen Benutzers.

Lieferungen

  • Ein Windows 10-PC mit installierten Visual Studio- und IoT-Paketen
  • Ein Raspberry Pi 3B+ mit installiertem Microsoft Windows 10 IoT
  • Ein Farbetikettendrucker (Brother VC-500W)
  • Ein großer roter Druckknopf, der auf einem Sockel montiert ist, für Benutzereingaben
  • Ein HDMI-Bildschirm für Benutzer-Feedback
  • Eine Microsoft Xbox Kinect v2-Kamera – meinem Sohn gestohlen – zum Fotografieren
  • Ein Netzwerk (Wifi, LAN)
  • Ein Zielraster. Ein Blatt Papier mit einem aufgedruckten Raster - gefüllt mit Koordinaten. Dieses Papierraster dient als Leinwand, auf der die Besucher ihr Foto auf die vorgesehenen Koordinaten kleben können. Und so bilden sie schließlich zusammen das Endergebnis: ein wunderschönes neues Fotomosaik.

Es wurde eine icrosoft Kinect 2.0 Kamera verwendet, da diese Tiefenbilder aufnehmen kann. Diese Funktion wird verwendet, um auf jedem einzelnen Foto einen virtuellen Greenscreen zu erstellen. Auf diese Weise kann RoboPhoto den Hintergrund jedes einzelnen Fotos neu streichen, damit er der Farbe eines Zielstücks innerhalb des zukünftigen Mosaiks entspricht.

Schritt 1: Wie es funktioniert

Wie es funktioniert
Wie es funktioniert
Wie es funktioniert
Wie es funktioniert
Wie es funktioniert
Wie es funktioniert
Wie es funktioniert
Wie es funktioniert

RoboPhoto ist eine Installation, die aus einem Podest mit einem großen roten Knopf darauf, einem Computer mit angeschlossenem Etikettendrucker und einem kleinen IoT-Gerät besteht, das die Benutzeroberfläche (Bildschirm und Knopf) bedient. In meinem Fall: eine RaspBerry 3B+.

  1. RoboPhoto arbeitet an einem öffentlich zugänglichen Ort und ist (nach dem Einschalten) selbstständig. Beim Laufen werden vorbeikommende Besucher von RoboPhoto ermutigt, den großen roten Knopf zu drücken.
  2. Immer wenn dieser große rote Knopf gedrückt wird, macht RoboPhoto ein Foto des Besuchers, der gerade den Knopf mit der Kinect-Kamera gedrückt hat.
  3. Dann verwendet RoboPhoto seine fortschrittliche KI. und Bildverarbeitungsfähigkeiten, um jedes Foto so zu ändern, dass es einem Stück innerhalb des zukünftigen Mosaiks entspricht. Um dies zu erreichen, zeichnet RoboPhoto den Hintergrund jedes Fotos neu, damit er der Farbe eines Zielstücks in einem vorgeladenen Bild entspricht. Nach der Bearbeitung druckt RoboPhoto das bearbeitete Foto zusammen mit einer Reihe von Koordinaten auf einen Aufkleber, die die Position dieses einen Aufklebers innerhalb des Mosaiks bestimmen.

  4. Dann wird der Benutzer aufgefordert, den Aufkleber auf dem Mosaik-Target-Blatt zu platzieren.
  5. Und so entsteht – nach vielen Besuchern – ein neues Kunstwerk. Um ein Mosaik zu erstellen, werden viele Einzelteile benötigt. Ich habe anständige Ergebnisse mit 600 Teilen erzielt

RoboPhoto kann auch im Einzelbenutzermodus betrieben werden.

In dieser Konfiguration erstellt RoboPhoto ein vollständiges Mosaik aus bearbeiteten Fotos von einem einzigen Benutzer. Nach dem Drücken der Schaltfläche wird RoboPhoto etwa >600 verschiedene Fotos des Benutzers aufnehmen und dann alle bearbeiten und zu einem einzigen neuen Mosaik arrangieren, das nach einem vorgewählten Zielbild erstellt wird.

Schritt 2: Zusammenbau der Hardware

Zusammenbau der Hardware
Zusammenbau der Hardware
Zusammenbau der Hardware
Zusammenbau der Hardware

Wie im Bild oben gezeigt, ist der Win 10 PC mit der Kinect-Kamera verbunden. Kinect muss über USB 3.0 verbunden sein. Zu der Zeit, als ich RoboPhoto erstellte, war kein Raspberry Pi mit USB 3.0 verfügbar.*

Der PC wird auch verwendet, um den Druck auf den angeschlossenen Etikettendrucker abzuwickeln. In meinem Fall ein Brother VC-500W. Ein ziemlich billiger Farbetikettendrucker für den Haushalt. Es ist jedoch sehr sehr langsam. Verwenden Sie besser einen professionellen, wenn Sie können.

Der Big Red Button ist an einem Raspberry Pi 3B+ angeschlossen. An den GPIO sind nur 4 Drähte angeschlossen. Dies ist das einzige Löten, das in diesem Instructable benötigt wird. Der Pi liefert unserem Besucher auch Feedback über einen 7''-TFT-Bildschirm über HDMI.

Um es aufzuräumen, habe ich einen Holzsockel gebaut, der all diese Komponenten hält.

Neben dem Sockel, an der Wand, wird ein Blatt Papier mit dem Zielraster und den Koordinaten platziert (A1/A2). Da der Etikettendrucker, den ich verwendet habe, die Etikettenbreite = 2,5 cm maximiert, messen alle Quadrate in diesem Raster 2,5 cm x 2,5 cm.

*Heute bietet Raspberry Pi4 USB3.0 an. Auch W10 kann auf dem Gerät ausgeführt werden. Es sollte also theoretisch möglich sein, ein RoboPhoto v2.0 ohne den Einsatz eines PCs zu erstellen. Vielleicht gibt mir Covid '19 alleine genug Zeit, um bald ein solches Instructable zu veröffentlichen.

Schritt 3: Schreiben des Codes

Schreiben des Codes
Schreiben des Codes
Schreiben des Codes
Schreiben des Codes

Code

RoboPhoto wurde mit VisualStudio als Lösung mit zwei Projekten erstellt:

  1. Eine Windows Forms-Anwendung auf dem PC hostet einen TCP-Server und verarbeitet Kinect-Eingaben
  2. Ein Raspberry Pi 3B+, der einen TCP-Client in einer UWP-gesteuerten Anwendung (als Startup-App festgelegt) hostet, um Tastendruckereignisse zu verarbeiten und dem Benutzer über seinen 7-Zoll-TFT-Bildschirm Feedback zu geben.

Im obigen Diagramm habe ich versucht, Ihnen eine Vorstellung davon zu geben, was mein Soft tut. Das Visual Studio, das ich geschrieben habe, um diese (absolut 100% funktionierende) RoboPhoto-Lösung zu erstellen, wird mit diesem Instructable bereitgestellt. Ich muss jedoch jeden warnen, der diese Datei herunterlädt: Der Code, den ich geschrieben habe, ist alles andere als schön und oft an meinen Entwickler-PC gebunden. Daher ermutige ich jeden, eine bessere, schönere und stabilere Lösung zu schaffen.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Netzwerk

Im Beispielcode wird der Code des Pi über Visual Studio an eine IPAddress in meinem Netzwerk bereitgestellt. Sie sollten dies wahrscheinlich ändern, damit es zu Ihren eigenen passt. Klicken Sie dazu mit der rechten Maustaste auf das ARM-Clientprojekt, nachdem Sie die Lösung in Visual Studio geöffnet haben, wählen Sie dann Eigenschaften und ändern Sie den Wert Remotecomputer auf die IPAdresse Ihres eigenen Pi. Außerdem müssen Sie den Datenverkehr vom Client zum Server auf Port 8123 innerhalb der Windows-Firewall auf dem Server (PC) zulassen. Wenn Sie die Lösung in Visual Studio ausführen, sollten Sie aufgefordert werden, dies für U.

Beim Codieren hatte ich viele Probleme, W32 und UWP richtig zu kommunizieren. Ich habe es zum Laufen gebracht, indem ich zwei separate Klassen in Client & Server verwendet habe: bzw. MyEchoClient.cs (im ARM-Client) und ConnectionClient.cs (behandelt Client-Verbindungen im Server).

Mosaikdateien - benutzerdefinierte Klasse

RoboPhoto erstellt Mosaike, um ein Zielbild nachzuahmen. Dieses Zielbild und alle einzelnen Fotos, die zusammen das zukünftige Mosaik bilden, sowie einige andere Eigenschaften jedes RoboPhoto werden in Dateien in einem Dateisystem gespeichert. Mein begleiteter Code verwendet eine Reihe von Dateien und Ordnern im Verzeichnis c:\tmp\MosaicBuilder. Innerhalb dieses Ordners liest der Code alle Unterordner mit einem Ordnernamen, der mit [prj_] beginnt, als Mosaikprojektordner. In all diesen [prj_]-Ordnern wird versucht, eine Projektdatei namens [_projectdata.txt] zu öffnen, die alle für jedes Projekt erforderlichen Informationen enthält.

Eine solche Projektdatei besteht aus:

  1. der vollständige Pfad & Dateiname des Ziel-Images dieses Projekts
  2. der vollständige Pfad, in dem einzelne Fotos (Stücke) dieses Projekts gespeichert sind
  3. Anzahl der Spalten, die das Mosaik enthalten wird
  4. Anzahl der Zeilen, die das Mosaik enthalten wird

Beispielprojekte werden in der ZIP-Datei bereitgestellt: \slnBBMosaic2\wfMosaicServerKinect\bin\x86\Debug\prj_xxx

Im C#-Servercode erfolgt die gesamte Mosaikbehandlung über eine benutzerdefinierte Klasse: BBMosaicProject.cs

Microsoft Kinect v2.0 - Greenscreen

Um einfach nur Fotos zu machen, reicht jede Kamera. Aber ich habe Microsoft Kinect v2.0 verwendet, um Farbbilder und Tiefenbilder zu kombinieren. Auf diese Weise kann ein Greenscreen-Effekt erzeugt werden. Der Hintergrund in allen von Kinect empfangenen Farbbildern wird durch eine einheitliche grüne Fläche (BBBackgroundRemovalTool.cs) ersetzt.

Dem Serverprojekt wurde ein Verweis auf Microsoft. Kinect hinzugefügt.

EMGU

Da wir sicher sein müssen, dass sich eine Person auf dem Foto befindet, das beim Drücken der Taste aufgenommen wurde, wurden RoboPhoto Gesichtserkennungsfunktionen hinzugefügt.

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

Nur wenn sich eine Person im Bild befindet, wird der Greenscreen in diesem Bild durch eine einheitliche Farbfläche ersetzt, deren Farbcodes der durchschnittlichen Farbe des Zielobjekts im zukünftigen Mosaik entsprechen.

Schritt 4: Danke

Danke schön
Danke schön

Vielen Dank für das Lesen meines Instructable. Dies war mein erster. Ich hoffe, dass es Ihnen gefallen hat.

Empfohlen: