Innehållsförteckning:
Video: RoboPhoto - en mosaikgenerator för allmänheten: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:40
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
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+.
- 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.
- 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.
-
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.
- Därefter uppmanas användaren att placera klistermärket på mosaikmålbladet.
- 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
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
Koda
RoboPhoto skapades med VisualStudio som en lösning med två projekt:
- En Windows Forms -applikation på datorn är värd för en TCP -server och hanterar Kinect -ingång
- 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:
- hela sökvägen och filnamnet för målbilden för detta projekt
- hela vägen där enskilda fotografier (bitar) av detta projekt lagras
- Antal kolumner som mosaiken kommer att innehålla
- 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 för att du läste min Instructable. Detta var min första. Jag hoppas att du tyckte om det.
Rekommenderad:
Inställning för extern Bluetooth GPS -leverantör för Android -enheter: 8 steg
Inställning för extern Bluetooth GPS-leverantör för Android-enheter: Den här instruktionsboken kommer att förklara hur du skapar din egen externa Bluetooth-aktiverade GPS för din telefon, tänd vad som helst för ungefär $ 10. Materialräkning: NEO 6M U-blox GPSHC-05 bluetooth-modul Kunskap om gränssnitt Blutooth LavenergimodulerArdui
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)
Väggfäste för iPad som kontrollpanel för hemautomation, med servostyrd magnet för att aktivera skärmen: 4 steg (med bilder)
Väggfäste för iPad Som kontrollpanel för hemautomation, med servostyrd magnet för att aktivera skärmen: På senare tid har jag ägnat ganska mycket tid åt att automatisera saker i och runt mitt hus. Jag använder Domoticz som min hemautomationsapplikation, se www.domoticz.com för mer information. I min sökning efter en instrumentpanelapplikation som visar all Domoticz -information tillsammans
Övertyga dig själv om att bara använda en 12V-till-AC-omriktare för LED-ljussträngar istället för att koppla om dem för 12V: 3 steg
Övertyga dig själv om att bara använda en 12V-till-AC-linjeomvandlare för LED-ljussträngar istället för att koppla om dem för 12V: Min plan var enkel. Jag ville klippa upp en väggdriven LED-ljussträng i bitar och sedan dra om den för att gå av 12 volt. Alternativet var att använda en kraftomvandlare, men vi vet alla att de är fruktansvärt ineffektiva, eller hur? Höger? Eller är de det?
1.5A linjär regulator för konstant ström för lysdioder för: 6 steg
1.5A linjär regulator för konstant ström för lysdioder för: Så det finns massor av instruktioner som täcker användning av LED -lampor med hög ljusstyrka. Många av dem använder den kommersiellt tillgängliga Buckpuck från Luxdrive. Många av dem använder också linjära regleringskretsar som toppar vid 350 mA eftersom de är mycket ineffektiva