Obsah:

RoboPhoto - generátor mozaiky pre verejnosť: 4 kroky
RoboPhoto - generátor mozaiky pre verejnosť: 4 kroky

Video: RoboPhoto - generátor mozaiky pre verejnosť: 4 kroky

Video: RoboPhoto - generátor mozaiky pre verejnosť: 4 kroky
Video: Part 5 - The House of the Seven Gables Audiobook by Nathaniel Hawthorne (Chs 15-18) 2024, Júl
Anonim
Image
Image
RoboPhoto - generátor mozaiky pre verejnosť
RoboPhoto - generátor mozaiky pre verejnosť
RoboPhoto - generátor mozaiky pre verejnosť
RoboPhoto - generátor mozaiky pre verejnosť

RoboPhoto je generátor fotomozaiky v reálnom čase

RoboPhoto vytvára fotomozaiku svojich používateľov - na počkanie.

Vďaka použitiu moderných digitálnych techník, ako je spracovanie obrazu, rozpoznávanie tváre a umelá inteligencia, je RoboPhoto schopný vytvoriť fotomozaiku všetkých návštevníkov, ktorí prechádzajú okolo a stlačia jeho tlačidlo-v reálnom čase.

Pri každom stlačení tlačidla sa urobí fotografia osoby, ktorá je po ruke. RoboPhoto okamžite naskenuje a interpretuje každú fotografiu. Softvér RoboPhoto potom zmení všetky jednotlivé obrázky - tak, aby sa stali súčasťou väčšieho obrázka, a potom tento zmenený obrázok vytlačí na nálepku označenú sadou súradníc, ktoré označujú umiestnenie každej fotografie v rámci tohto väčšieho obrázka. Potom je každý návštevník požiadaný, aby umiestnil svoju vlastnú fotografickú nálepku na väčšie plátno obsahujúce iba zodpovedajúcu mriežku.

Počas prevádzky RoboPhoto sa vytvorí nový obrázok. Fotomozaika zložená z týchto jednotlivých fotografií, ktoré budú napodobňovať vopred definovaný „cieľový obrázok“.

RoboPhoto funguje aj v režime pre jedného používateľa. Keď je takto nakonfigurovaný, RoboPhoto vytvorí úplnú mozaiku jedného používateľa.

Zásoby

  • Počítač so systémom Windows 10 s nainštalovanými balíkmi Visual Studio a IoT
  • Raspberry Pi 3B+ s nainštalovaným IoT systému Microsoft Windows 10
  • Farebná tlačiareň štítkov (Brother VC-500W)
  • Veľké červené tlačidlo namontované na podstavci pre vstup užívateľa
  • Obrazovka HDMI pre spätnú väzbu od používateľov
  • Fotoaparát Microsoft Xbox Kinect v2- ukradnutý môjmu synovi- na fotografovanie
  • Sieť (Wifi, LAN)
  • Cieľová mriežka. List papiera, na ktorom je vytlačená mriežka -vyplnený súradnicami. Táto papierová mriežka sa používa ako plátno, kde si návštevníci môžu nalepiť svoju fotografiu na určené súradnice. A tak nakoniec spolu vytvoria konečný výsledok: nádhernú novú fotomozaiku.

Bol použitý fotoaparát Microsoft Kinect 2.0, pretože dokáže snímať hĺbkové obrázky. Táto funkcia sa používa na vytvorenie virtuálnej zelenej obrazovky pre každú jednotlivú fotografiu. RoboPhoto tak môže premaľovať pozadie na každej jednotlivej fotografii tak, aby zodpovedalo farbe cieľového kusu v rámci budúcej mozaiky.

Krok 1: Ako funguje

Ako to funguje
Ako to funguje
Ako to funguje
Ako to funguje
Ako to funguje
Ako to funguje
Ako to funguje
Ako to funguje

RoboPhoto je inštalácia obsahujúca podstavec s veľkým červeným tlačidlom, počítač s pripojenou tlačiarňou štítkov a malé zariadenie IoT ovládajúce používateľské rozhranie (obrazovka a tlačidlo). V mojom prípade: RaspBerry 3B+.

  1. RoboPhoto funguje na verejne prístupnom mieste a (po zapnutí) funguje sám. Pri behu nabáda okoloidúcich návštevníkov RoboPhoto, aby stlačil veľké červené tlačidlo.
  2. Pri každom stlačení tohto veľkého červeného tlačidla RoboPhoto nasníma fotografiu návštevníka, ktorý tlačidlo stlačil fotoaparátom Kinect.
  3. Potom RoboPhoto použije svoj pokročilý A. I. a schopnosti spracovania obrazu zmeniť každú fotografiu tak, aby zodpovedala kúsku v budúcej mozaike. Aby sa to dosiahlo, RoboPhoto prekreslí pozadie každej fotografie tak, aby zodpovedalo farbe cieľového kusu v rámci vopred načítaného obrázku. Po úprave RoboPhoto vytlačí upravenú fotografiu na nálepku spolu so sadou súradníc, ktoré presne určujú umiestnenie tejto jednej nálepky v mozaike.

  4. Potom je používateľ požiadaný, aby nálepku umiestnil na cieľový list mozaiky.
  5. A tak - po návšteve mnohých pleople - vznikne nové umelecké dielo. Na vytvorenie mozaiky budete potrebovať veľa jednotlivých kúskov. Pri 600 kusoch som dosiahol slušné výsledky

RoboPhoto môže fungovať aj v režime pre jedného používateľa.

V tejto konfigurácii RoboPhoto vytvára úplnú mozaiku mnohých upravených fotografií od jedného používateľa. Po stlačení tlačidla RoboPhoto nasníma približne> 600 rôznych fotografií používateľa a potom ich všetky upraví a usporiada tak, aby vytvorili jednu novú mozaiku vytvorenú podľa vopred zvoleného cieľového obrázku.

Krok 2: Zostavenie hardvéru

Zostavenie hardvéru
Zostavenie hardvéru
Zostavenie hardvéru
Zostavenie hardvéru

Ako je znázornené na obrázku vyššie, počítač Win 10 je pripojený k kamere Kinect. Kinect musí byť pripojený pomocou USB 3.0. V čase, keď som vytváral RoboPhoto - nebol k dispozícii žiadny Raspberry Pi s USB 3.0.*

Počítač sa používa aj na tlač na pripojenú tlačiareň štítkov. V mojom prípade Brother VC-500W. Pomerne lacná domáca farebná tlačiareň štítkov. Je to však veľmi veľmi pomalé. Ak je to možné, použite radšej profesionálneho.

Veľké červené tlačidlo je pripevnené k Raspberry Pi 3B+. K GPIO sú pripojené iba 4 vodiče. Toto je jediné potrebné spájkovanie vykonané v tomto návode. Pi tiež poskytuje spätnú väzbu pre nášho návštevníka prostredníctvom 7-palcovej obrazovky TFT cez HDMI.

Aby som to upratal, postavil som drevený podstavec, ktorý drží všetky tieto súčiastky.

Vedľa podstavca je pri stene umiestnený list papiera obsahujúci mriežku cieľa a súradnice (A1/A2). Pretože tlačiareň štítkov som použila maximálne na šírku štítku = 2,5 cm, všetky štvorce v tejto mriežke merajú 2,5 cm x 2,5 cm.

*Dnes Raspberry Pi4 ponúka USB3.0. Alse W10 je možné spustiť na zariadení. Teoreticky by teda malo byť možné vytvoriť RoboPhoto v2.0 bez použitia počítača. Snáď mi Covid '19 poskytne dostatok času na to, aby som čoskoro vydal taký návod.

Krok 3: Napíšte kód

Písanie kódexu
Písanie kódexu
Písanie kódexu
Písanie kódexu

Kód

RoboPhoto bol vytvorený pomocou programu VisualStudio ako riešenie s dvoma projektmi:

  1. Aplikácia Windows Forms v počítači je hostiteľom servera TCP a spracováva vstup Kinect
  2. Raspberry Pi 3B+, ktorý je hostiteľom TCP klienta v rámci aplikácie s hlavičkou UWP (nastavenej ako spúšťacia aplikácia), ktorá zvládne udalosti pri stlačení tlačidla a poskytne používateľovi spätnú väzbu prostredníctvom 7-palcovej obrazovky TFT.

Na obrázku vyššie som sa vám pokúsil poskytnúť predstavu o tom, čo robí môj soft. Visual Studio, ktoré som napísal na vytvorenie tohto (úplne 100% funkčného) riešenia RoboPhoto, sa dodáva s týmto pokynom. Musím však varovať všetkých, ktorí sťahujú tento súbor: Kód, ktorý som napísal, nie je ani zďaleka pekný a často je viazaný na môj dev-PC. Preto povzbudzujem všetkých, aby vytvorili lepšie, krajšie a stabilnejšie riešenie.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Sieť

V ukážkovom kóde je kód Pi nasadený cez Visual Studio na IP adresu v mojej sieti. Pravdepodobne by ste to mali zmeniť, aby vyhovovalo vašim vlastným. Ak to chcete urobiť - kliknite pravým tlačidlom myši na projekt klienta ARM po otvorení riešenia v programe Visual Studio, potom zvoľte vlastnosti a hodnotu Vzdialený počítač môžete zrušiť na IP adresu vášho vlastného Pi. Tiež musíte povoliť prenos z klienta na server na porte 8123 v rámci brány Windows Firewall na serveri (PC). Ak spustíte riešenie z Visual Studio, malo by vás to požiadať, aby ste to urobili pre U.

Pri kódovaní som mal veľa problémov so správnou komunikáciou W32 a UWP. Začal som pracovať pomocou dvoch oddelených tried v klientovi a serveri: resp. MyEchoClient.cs (v klientovi ARM) a ConnectionClient.cs (hanlding klientských pripojení na serveri).

Mozaikové súbory - vlastná trieda

RoboPhoto vytvára mozaiky, ktoré napodobňujú cieľový obrázok. Tento cieľový obrázok a všetky jednotlivé fotografie, ktoré spolu tvoria budúcu mozaiku, ako aj niektoré ďalšie vlastnosti každého RoboPhoto sú uložené v súboroch v súborovom systéme. Môj sprevádzaný kód používa sadu súborov a priečinkov v adresári c: / tmp / MosaicBuilder. V tomto priečinku kód načíta všetky podpriečinky s názvom priečinka, ktorý začína na [prj_], ako priečinky mozaikového projektu. Vo všetkých týchto priečinkoch [prj_] sa pokúsi otvoriť súbor projektu s názvom [_projectdata.txt], ktorý obsahuje všetky informácie požadované pre každý projekt.

Takýto projektový súbor pozostáva z:

  1. úplná cesta a názov cieľového obrázku tohto projektu
  2. úplná cesta, kde sú uložené jednotlivé fotografie (kúsky) tohto projektu
  3. Počet stĺpcov, ktoré bude mozaika obsahovať
  4. Počet riadkov, ktoré bude mozaika obsahovať

Príklady projektov sú uvedené v súbore zip: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

V kóde servera C# sa všetky mozaiky spracovávajú prostredníctvom vlastnej triedy: BBMosaicProject.cs

Microsoft Kinect v2.0 - Greenscreen

Na fotografovanie stačí akýkoľvek fotoaparát. Na kombináciu farebných a hĺbkových obrázkov som však použil Microsoft Kinect v2.0. Takýmto spôsobom je možné vytvoriť efekt greenscreen. Pozadie vo všetkých farebných obrázkoch prijatých zo služby Kinect bude nahradených jednotným zeleným povrchom (BBBackgroundRemovalTool.cs).

Do serverového projektu bol pridaný odkaz na Microsoft. Kinect.

EMGU

Pretože musíme mať istotu, že sa na fotografii, ktorá bola urobená pri stlačení tlačidla, nachádza osoba, boli do RoboPhoto pridané možnosti rozpoznávania tváre.

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

Zelenú obrazovku na tomto obrázku nahradí jednotný farebný povrch iba vtedy, ak sa na obrázku nachádza osoba. Farebné kódy rovnajúce sa priemernej farbe cieľového kusu v budúcej mozaike sa stanú týmto obrázkom.

Krok 4: Ďakujem

Ďakujem
Ďakujem

Ďakujem, že ste si prečítali môj návod. Toto bol môj prvý. Dúfam, že ste si to užili.

Odporúča: