Innehållsförteckning:

RoboPhoto - en mosaikgenerator för allmänheten: 4 steg
RoboPhoto - en mosaikgenerator för allmänheten: 4 steg

Video: RoboPhoto - en mosaikgenerator för allmänheten: 4 steg

Video: RoboPhoto - en mosaikgenerator för allmänheten: 4 steg
Video: Steven Greer: UAPs, CE5, Lazar, Skinwalker Ranch 2024, Juli
Anonim
Image
Image
RoboPhoto - en mosaikgenerator för allmänheten
RoboPhoto - en mosaikgenerator för allmänheten
RoboPhoto - en mosaikgenerator för allmänheten
RoboPhoto - en mosaikgenerator för allmänheten

RoboPhoto är en fotomosaikgenerator i realtid

RoboPhoto skapar en fotomosaik av sina användare - medan du väntar.

Genom att använda moderna digitala tekniker som bildbehandling, ansiktsigenkänning och artificiell intelligens kan RoboPhoto skapa en fotomosaik av alla besökare som går förbi och trycker på knappen-i realtid.

Varje gång du trycker på knappen tas ett foto av personen till hands. Omedelbart skannas och tolkas varje foto av RoboPhoto. RoboPhoto -programvaran ändrar sedan alla enskilda bilder - så att den blir en del av en större bild och skriver sedan ut den ändrade bilden på ett klistermärke märkt med en uppsättning koordinater som anger platsen för varje foto i den större bilden. Varje besökare uppmanas sedan att placera sin egen fotoklister på en större duk som endast innehåller ett motsvarande rutnät.

Under driften av RoboPhoto kommer en ny bild att skapas. En fotomosaik bestående av dessa individuella fotografier som kommer att efterlikna en fördefinierad”målbild”.

RoboPhoto fungerar också i enanvändarläge. När det är konfigurerat på detta sätt skapar RoboPhoto en fullständig mosaik av en enda användare.

Tillbehör

  • En Windows 10 -dator med Visual Studio och IoT -paket installerade
  • En Raspberry Pi 3B+ med Microsoft Windows 10 IoT installerat
  • En färgetikettskrivare (Brother VC-500W)
  • En stor röd tryckknapp monterad på en piedestal för användarinmatning
  • En HDMI-skärm för användaråterkoppling
  • En Microsoft Xbox Kinect v2-kamera- stulen från min son- för att ta fotografier
  • Ett nätverk (Wifi, LAN)
  • Ett målnät. Ett pappersark med ett rutnät tryckt på det -fyllt med koordinater. Detta pappersgaller används som duk där besökare kan fästa sitt fotografi på de angivna koordinaterna. Och så småningom kommer de att bilda tillsammans slutresultatet: en vacker ny fotomosaik.

En Microsoft Kinect 2.0-kamera användes eftersom den kan ta djupbilder. Denna funktion används för att skapa en virtuell grönskärm på varje enskilt fotograp. På så sätt kan RoboPhoto måla om bakgrunden på varje enskilt fotografi för att matcha färgen på en målbit i den blivande mosaiken.

Steg 1: Hur det fungerar

Hur det fungerar
Hur det fungerar
Hur det fungerar
Hur det fungerar
Hur det fungerar
Hur det fungerar
Hur det fungerar
Hur det fungerar

RoboPhoto är en installation som innehåller en piedestal med en stor röd knapp på, en dator med etikettskrivare ansluten och en liten IoT -enhet som hanterar användargränssnittet (skärm och knapp). I mitt fall: en RaspBerry 3B+.

  1. RoboPhoto fungerar inom en offentlig tillgänglig plats och är (efter att ha slagit på den) självoperativ. När de springer uppmuntras förbipasserande besökare av RoboPhoto att trycka på den stora röda knappen.
  2. När den stora röda knappen trycks in kommer RoboPhoto att ta ett foto av besökaren som precis tryckte på knappen med Kinect -kameran.
  3. Då kommer RoboPhoto att använda sin avancerade A. I. och bildbehandlingsförmåga för att ändra varje foto för att matcha ett stycke i den blivande mosaiken. För att uppnå detta målar RoboPhoto om bakgrunden på varje foto för att matcha färgen på en målbit i en förinstallerad bild. Efter redigeringen skriver RoboPhoto ut det redigerade fotot på ett klistermärke tillsammans med en uppsättning koordinater som markerar platsen för det här klistermärket i mosaiken.

  4. Därefter uppmanas användaren att placera klistermärket på mosaikmålbladet.
  5. Och därmed - efter att många folk har besökt - kommer ett nytt konstverk att dyka upp. För att skapa en mosaik behöver du många individuella bitar. Jag fick anständiga resultat med 600 bitar

RoboPhoto kan också fungera i enkelanvändarläge.

I denna konfiguration skapar RoboPhoto en fullständig mosaik av ouf redigerade fotografier från en enda användare. Efter att ha tryckt på knappen kommer RoboPhoto att skjuta omkring> 600 olika fotografier av användaren och sedan redigera och ordna dem alla för att bilda en enda ny mosaik, skapad efter en förvald målbild.

Steg 2: Montering av hårdvaran

Montering av hårdvaran
Montering av hårdvaran
Montering av hårdvaran
Montering av hårdvaran

Som visas på bilden ovan är Win 10 -datorn ansluten till Kinect -kameran. Kinect måste anslutas med USB 3.0. På den tiden skapade jag RoboPhoto - ingen Raspberry Pi med USB 3.0 var tillgänglig.*

Datorn används också för att hantera utskrift till den bifogade etikettskrivaren. I mitt fall en Brother VC-500W. En ganska billig hushållsfärgsetikettskrivare. Det går dock väldigt långsamt. Bättre att använda en professionell om du kan.

Den stora röda knappen är ansluten till en Raspberry Pi 3B+. Endast 4 ledningar är anslutna till GPIO. Detta är den enda lödning som behövs i denna instruktionsbok. Pi ger också återkoppling till vår besökare med hjälp av en 7-tums TFT-skärm över HDMI.

För att städa upp det byggde jag en träpiedestal som rymmer alla dessa komponenter.

Bredvid piedestalen, mot väggen, placeras ett pappersark med målgaller och koordinater (A1/A2). Eftersom etikettskrivaren jag använde max ut med etikettbredd = 2, 5 cm, mäter alla rutor i detta rutnät 2, 5cm x 2, 5cm.

*Idag erbjuder Raspberry Pi4 USB3.0. Alse W10 kan köras på enheten. Så det borde teoretiskt vara möjligt att skapa en RoboPhoto v2.0 utan användning av en dator. Kanske kommer Covid '19 att ge mig tillräckligt med tid på egen hand för att publicera en sådan Instructable snart.

Steg 3: Skriva koden

Skriva koden
Skriva koden
Skriva koden
Skriva koden

Koda

RoboPhoto skapades med VisualStudio som en lösning med två projekt:

  1. En Windows Forms -applikation på datorn är värd för en TCP -server och hanterar Kinect -ingång
  2. En Raspberry Pi 3B+ värd för en TCP-klient i en UWP-applikation (inställd som start-app) för att hantera knapptryckningshändelser och ge användaren feedback via sin 7-tums TFT-skärm.

I diagrammet ovan har jag försökt ge dig en uppfattning om vad min mjuk gör. Visual Studio som jag skrev för att skapa denna (helt 100% fungerande) RoboPhoto -lösning levereras med denna Instructable. Men jag måste varna alla för att ladda ner den här filen: Koden jag skrev är långt ifrån vacker och ofta bunden till min dev-PC. Så jag uppmuntrar alla att skapa en bättre, trevligare och stadigare lösning.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Nätverk

I exempelkoden distribueras Pi: s kod via Visual Studio till en IPAddress i mitt nätverk. Du bör förmodligen ändra detta för att passa ditt eget. För att göra detta - högerklicka på ARM -klientprojektet efter att ha öppnat lösningen i Visual Studio, välj sedan egenskaper och ändra värdet Remote machine till IPAddress för din egen Pi. Du måste också tillåta trafik från klient till server på port 8123 i Windows -brandväggen på servern (PC). Om du kör lösningen från Visual Studio bör den be dig att göra det för U.

Under kodningen har jag haft mycket problem med att få W32 och UWP att kommunicera korrekt. Jag fick det att fungera genom att använda två separata klasser i klient och server: resp MyEchoClient.cs (i ARM -klienten) och ConnectionClient.cs (hanlding -klientanslutningar i servern).

Mosaikfiler - anpassad klass

RoboPhoto skapar mosaik för att efterlikna en målbild. Denna målbild och alla enskilda fotografier som tillsammans utgör den blivande mosaiken, liksom några andra egenskaper för varje RoboPhoto lagras i filer i ett filsystem. Min medföljande kod använder en uppsättning filer och mappar i katalogen c: / tmp / MosaicBuilder. I den här mappen kommer koden att läsa alla undermappar med ett mappnamn som börjar med [prj_] som mosaikprojektmappar. Inom alla dessa [prj_] mappar försöker den öppna en projektfil som heter [_projectdata.txt] som innehåller all information som krävs för varje projekt.

En sådan projektfil består av:

  1. hela sökvägen och filnamnet för målbilden för detta projekt
  2. hela vägen där enskilda fotografier (bitar) av detta projekt lagras
  3. Antal kolumner som mosaiken kommer att innehålla
  4. Antal rader mosaiken kommer att innehålla

Exempelprojekt finns i zip -filen: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

I C# -serverkoden utförs all mosaikhantering via en anpassad klass: BBMosaicProject.cs

Microsoft Kinect v2.0 - Grön skärm

Att bara fotografera vilken kamera som helst. Men jag har använt Microsoft Kinect v2.0 för att kombinera färgbilder och djupbilder. På så sätt kan en grönskärmseffekt skapas. Bakgrunden i alla färgbilder som tas emot från Kinect kommer att ersättas med en enhetlig grön yta (BBBackgroundRemovalTool.cs).

En referens till Microsoft. Kinect har lagts till i serverprojektet.

EMGU

Eftersom vi måste vara säkra på att en person är med på fotot som togs när knappen trycktes, har ansiktsigenkänningsfunktioner lagts till i RoboPhoto.

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

Endast när en person befinner sig i bilden kommer den gröna skärmen i den här bilden att ersättas av en enhetlig färgad yta, med färgkoder som är lika med den genomsnittliga färgen för målstycket i den här mosaiken som ska bli.

Steg 4: Tack

Tack
Tack

Tack för att du läste min Instructable. Detta var min första. Jag hoppas att du tyckte om det.

Rekommenderad: