Aplikácia WizAR umožňuje používateľom komunikovať s okolitými elektronickými zariadeniami formou 3D gest vykonávaných pohybom telefónu, kde ovládané zariadenie je vybrané fyzickým poukázaním naň. Takýto spôsob komunikácie imituje používanie čarovnej paličky a snaží sa vytvoriť efekt kúzlenia. Predstavte si napríklad, že chcete vypnúť televízor. Pomocou WizAR môžete nasmerovať telefón na televízor a pohnúť im tak, ako keby ste kreslili vo vzduchu kružnicu. Vykonané gesto je následne spracované umelou inteligenciou, ktorá vyhodnotí povel, ktorý sa následne odošle na prijímajúce zariadenie. Prototyp aplikácie WizAR získal prvé miesto na Živých IT projektov.
Na to, aby sme boli schopní dosiahnuť želanú funkcionalitu potrebujeme vyriešiť niekoľko rôznych problémov. Najdôležitejším z nich je orientácia v priestore. Počas používania našej aplikácie potrebujeme mať neustály prehľad o tom, kde sa používateľ nachádza vrámci fyzického priestoru, kam je otočený a kde smeruje jeho mobilné zariadenie. Len tak môžeme dosiahnuť želanú “point and shoot” funkcionalitu. My sme sa rozhodli tento problém vyriešiť netradične, za pomoci rozšírenej reality.
Rozšírená realita (AR, z anglického augmented reality) je najdôležitejším prvkom našej aplikácie. Táto technológia dokáže minimalizovať hranicu medzi virtuálnym a skutočným svetom. Pomocou doplňovania informácií, či virtuálnych objektov do fyzického priestoru nám AR umožňuje pozmeňovať a svojím spôsobom aj vylepšovať okolitý svet. Využitie rozšírenej reality je veľmi široké, popularite sa teší nielen v hrách ale aj v priemyselnej prevádzke. Na to, aby sme dosiahli želaný AR efekt potrebujeme skombinovať fyzický svet, o ktorom sa dozvedáme prevažne z kamery premietanej na displej zariadenia, a virtuálne objekty, ktoré sú do obrazu doplňované. Inou možnosťou je použiť okuliare a virtuálne objekty prezentovať pomocou hranolového projektora (GoogleGlass). Na orientáciu vo fyzickom svete kombinuje AR obraz z kamery a rôzne senzory zabudované do hardvérového zariadenia, ako sú napríklad gyroskop, akcelerometer a kompas. Tieto informácie sú spracovávané pomocou algoritmov počítačového videnia.
Príkladom systému ktorý podporuje rozšírenú realitu sú iOS zariadenia (napr. iPhone), ktoré využívajú framework ARKit a špeciálny zabudovaný hardvérový čip. Príkladom profesionálneho systému je projekt HoloLens od spoločnosti Microsoft.
Aj keď sa spojenie rozšírenej reality a orientácie v priestore môže zdať na prvý pohľad netradičné, faktom je, že navigácia a orientácia v priestore je kľúčovou funkcionalitou každej AR knižnice. Na to, aby sme dokázali vkladať virtuálne objekty do fyzického priestoru, potrebujeme tieto dva svety čo najlepšie prepojiť. Ak položím virtuálnu lampu na fyzický stôl, lampa si musí držať svoju pozíciu bez ohľadu na môj pohyb. Ak by túto základnú predispozíciu táto virtuálna lampa nedokázala splniť, samotná AR by bola nepresvedčivá a vo výsledku by pôsobila rušivo. Počas využívania rozšírenej reality a objavovania okolitého sveta sa teda vytvára virtuálna mapa, ktorá je viazaná na fyzický okolitý priestor. Na prepojenie tejto mapy využíva AR fixačné body z fyzického priestoru, ktoré sú zvyčajne reprezentované časťami priestoru, ktoré majú výrazné vlastnosti, ako napríklad priestorové hrany. My túto virtuálnu mapu využívame na sledovanie pohybu používateľa vrámci fyzického priestoru, čo nám umožňuje určovať jeho pozíciu a orientáciu s vysokou presnosťou (príkladom vysokej presnosti môže byť aplikácia Measure od spoločnosti Apple, ktorá umožňuje merať fyzické objekty za použitia rozšírenej reality). Tieto informácie následne využívame pri klasifikácií 3D fyzického gesta a detekcii prijímacieho zariadenia.
Architektúra
Naše riešenie sa skladá z piatich komponentov: mobilná aplikácia, umelá inteligencia, webový portál, webový backend a hardvér. Komunikácia medzi jednotlivými časťami prebieha pomocou protokolu HTTP. Vývoj komponentov prebiehal paralelne, nakoľko sme potrebovali maximalizovať produktivitu všetkých členov tímu. To sme dosiahli pomocou vopred definovaných integračných rozhraní.
Centrom všetkého diania je v našom prípade smartfón. Používateľ prostredníctvom zariadenia vykonáva gestá a tým komunikuje s okolitými smart zariadeniami. Gestá sú kreslené v 3D priestore prostredníctvom rozšírenej reality. Mobilná aplikácia, napísaná v jazyku Swift, je natívna aplikácia pre platformu iOS, čo nám umožňuje využívať knižnicu ARKit pre rozšírenú realitu a CoreML pre potreby strojového učenia a spracovania obrazu.
Vykonané gesto sa následne spracuje a odošle na klasifikáciu na webový server, ktorý sa nachádza na cloude. Za jeho webovým API sa nachádza neurónová sieť predtrénovaná na dátach, ktoré sme si vytvorili v laboratorných podmienkach. Jej úlohou je na základe nakreslených súradníc určiť, aké gesto používateľ vykonal.
Po získaní odpovede z neurónovej siete sa táto informácia vyhodnotí a odošle sa požiadavka na vykonanie úkonu na samotnom hardvérovom zariadení. Takýmto povelom môže byť zapnutie, vypnutie či nastavenie hlasitosti. Reálnych možností je nekonečno.
Každá takáto úloha je odosielaná na webový backend, ktorý tieto dáta agreguje a ukladá v databáze. Zozbierané dáta slúžia na analytické a štatistické účely. Technologicky sme sa rozhodli pre realizáciu backendu použiť platformu .Net Core — webové API a aplikáciu písať v jazyku C#.
Používateľský prístup k backendu umožňuje frontend webová aplikácia, pomocou ktorej môžu používatelia sledovať svoje dáta a vykonávať rôzne nastavenia. Zároveň je táto aplikácia úvodnou bránou do nášho systému pre používateľa — umožňuje mu prejsť registračným procesom a spárovať si s jeho účtom mobilnú aplikáciu. Frontendová vrstva je napísaná s využitím rámca ReactJS, prezentuje používateľom grafické používateľské rozhranie, pomocou ktorého môžu vykonávať jednotlivé želané operácie a sledovať štatistické údaje vo forme pekných grafov.
Aby sme ukázali potenciál nášho riešenia, rozhodli sme sa vytvoriť si aj vlastný hardvér. Ten tvorí počítač Raspberry Pi, ktorého softvér je písaný v jazyku Java, pomocou ktorého dokážeme prostredníctvom súčiastky relé zabezpečiť zapnutie a vypnutie pripojeného zariadenia. Komunikácia s hardvérovým komponentom prebieha pomocou webového API, ktoré nám dovoľuje pripojené zariadenie (napr. svetlo, televízor) ovládať na diaľku. Takto sme chceli poukázať na potenciál už existujúcej elektroniky, ktorá síce nieje “smart”, no pomocou relatívne lacného prídavného hardvéru dokáže slúžiť aj naďalej v dnešnom modernom svete.
Diaľkové ovládanie zariadení
Pri riešení použiteľnosti sme sa výrazne inšpirovali jednoduchosťou a intuitívnosťou klasického diaľkového (TV) ovládača. Jeho použitie je samozrejmé pre ľudí vo všetkých vekových kategóriách a zdá sa, že sme si ako ľudia na túto formu interakcie zvykli.
Naším cieľom bolo tento proces replikovať, s menšími či väčšími vylepšeniami. Na komunikáciu sme si vybrali protokoly BLE (Bluetooth Low Energy) a WiFi, čo nám umožnilo z dlhodobého hľadiska zaistiť podporu pre čo najväčší počet smart zariadení.
Orientácia v priestore
Vyriešenie problému orientácie v priestore je kľúčové pre fungovanie celej aplikácie. Počas používania aplikácie potrebujeme mať absolútny prehľad o:
- polohe používateľa,
- polohe a orientácií (naklonenie, otočenie) smartfónu,
- polohe smart zariadení rozmiestnených po priestore.
Sledovanie polohy používateľa a smartfónu automaticky zabezpečuje knižnica pre AR. Pre sledovanie smart zariadení je potrebné najprv označiť ich polohu, pričom aplikácia na daných miestach v priestore vytvorí špeciálne virtuálne objekty.
Gestá
Po tom, čo sme si zmapovali priestor a pridali doň naše smart zariadenia môžeme začať plnohodnotne využívať našu aplikáciu. Komunikácia s hardvérom prebieha prostredníctvom 3D gést v priestore, ktoré sa vykonávajú za pomoci smartfónu. Ten imituje funkciu čarovnej paličky.
Naším cieľom bolo podporovať komplexné gestá, nie len detegovať rýchlejší pohyb či zatrasenie zariadením. Preto sme sa rozhodli aj v tomto prípade spoľahnúť na rozšírenú realitu. Po tom, ako sa používateľ rozhodne vykonať kúzlo začne aplikácia na pozadí kresliť do priestoru body, vzhľadom na namierenie, polohu a detekciu pohybu telefónu.
Po ukončení gesta sú koordináty nakresleného virtuálneho objektu, zloženého z veľkého množstva malých objektov, odoslané na klasifikáciu. Naša natrénovaná neurónová sieť klasifikuje výsledné gesto a túto informáciu odošle späť mobilnému zariadeniu.
Detekcia ovládaného smart zariadenia je finálny proces, ktorý využíva už existujúcu funkcionalitu. Virtuálny lúč, ktorý bol použitý na kreslenie gesta, nám stačí jednoducho natiahnuť (tj. zachovať orientáciu a zväčšiť veľkosť vektora) a následne zistiť, či prechádza priestorom virtuálneho smart zariadenia. Vzhľadom na to, že všetky fyzické smart zariadenia obsahujú virtuálnu kópiu môžeme túto funkcionalitu implementovať pomocou tzv. hit testingu vo virtuálnom priestore, nakoľko sme si fyzické (ovládané) zariadenia “nakopírovali” do virtuálneho priestoru v podobe virtuálnych objektov. V prípade že takýto lúč pretína viacero zariadení sa použije zariadenie nachádzajúce sa najbližšie k polohe používateľa.
Poloha používateľa
Sledovanie polohy používateľa je základná a nevyhnutná funkcionalita každej knižnice, ktorá pracuje s rozšírenou realitou. Jednotlivé virtuálne objekty, ktoré vkladáme do reálneho sveta, majú svoju polohu, ktorú potrebujeme zachovať. Táto poloha môže byť buď statická (tj. relatívne voči súradnici [0, 0, 0]) alebo dynamická (tj. relatívne voči polohe smartfónu).
ARKit rieši tento problém prvým spôsobom. Pri prvotnej inicializácií AR sveta určí knižnica aktuálnu polohu telefónu stredobodom všetkého ([0, 0, 0]). Jednotlivé virtuálne objekty sú do priestoru vkladané na pozície relatívne od daného bodu.
Sledovanie orientácie, polohy a pohybu telefónu za použitia zadnej kamery zabezpečuje trieda ARWorldTrackingConfiguration. Okrem iného tiež podporuje detekciu vertikálnych a horizontálnych plôch a detekciu (vopred známych) obrázkov a objektov. Pre potreby našej aplikácie nieje nutné využívať tieto pokročilé funkcie. Samotnú koordináciu jednotlivých procesov, ktoré spoločne zabezpečujú funkcionalitu rozšírenej reality má na starosti trieda ARSession. Tá kombinuje dáta z kamery a senzorov (gyroskop, akcelerometer, kompas), pričom poloha zariadenia je vyrátavaná voči počiatočnému bodu.
ARKit si pri používaní aplikácie vytvára tzv. feature pointy, čo sú záchytné body v priestore, pomocou ktorých je možné sa orientovať. Sú to práve tieto body, ktoré nám umožňujú pochopiť okolitý fyzický priestor a ktoré nám umožňujú detegovať plochy či objekty. Počas používania sa tiež vytvára mapa ARWorldMap, ktorej úlohou je zapamätať si priestor (feature pointy a obrazový záznam) relatívne voči polohe zariadenia a prihliadajúc na jeho pohyb. Okrem feature pointov táto mapa obsahuje aj informácie o virtuálnych objektoch, ktoré sme pridali do priestoru rozšírenej reality. Všetky zapamätané informácie využíva naša aplikácia pri opätovnom spustení či reštarte tak, aby dokázala nadviazať na stav uložený počas predošlého používania aplikácie. Táto funkcionalita označovaná pojmom “Persistent AR experience” bola do ARKitu pridaná vo verzii 2.
Aplikácia sa pri zapamätanej mape spustí v tzv. relokalizačnom móde, kedy využíva výstup z kamery na rozpoznanie známeho priestoru a obnovenie virtuálnej polohy telefónu a koreňového bodu. Detailnejšie informácie o tejto funkcionalite opisuje článok Saving and Loading World Data nachádzajúci sa v dokumentácii knižnice. Neustálym sledovaním priestoru a učením sa sme zabezpečili možnosť adaptácie mapy na zmeny fyzického priestoru. Samotná mapa je uložená priamo na zariadení a môže byť zdieľaná členmi rodiny čo znamená, že pridávanie smart zariadení do priestoru je nutné urobiť iba raz.
Mapu rozšíreného sveta využívame aj na sledovanie polohy smart zariadení. Pri prvotnom pridaní smart zariadenia, pomocou smartfónu, získavame polohu tohto zariadenia vykonaním hit testu, tentokrát však voči fyzickému priestoru, a jeho virtuálnu podobu umiestňujeme do priestoru rozšírenej reality. Následne je možné s týmto zariadením komunikovať a interagovať. Pod pojmom hit test v tomto prípade rozumieme využitie techník počítačového videnia na detekciu fyzického objektu, ktorý je zobrazený v určitom bode na obrazovke, a získanie detailnejších informácií o polohe a vzdialenosti daného objektu od smartfónu.
Rozpoznávanie gest
Na rozpoznávanie gest sme vytvorili vlastnú hlbokú neurónovú sieť. Architektúra tejto siete bola inšpirovaná architektúrou siete pre klasifikáciu datasetu MNIST (ručne písané číslice). Táto relatívne malá neurónka sa skladá z konvolunčných vrstiev (Convolutional Neural Network - CNN) a obsahuje 176000 trénovateľných parametrov. Vstupom siete je 2D obrázok gesta nakresleného používateľom (obrázok je generovaný z 3D koordinátov pohybu mobilného zariadenia) a výstupom pravdepodobnosť klasifikácie jednotlivých podporovaných gést. Na to, aby sme boli schopní túto sieť natrénovať sme si vytvorili vlastný dataset, ktorý tvorí 10000 obrázkov. Jednotlivé obrázky reprezentujú jednoduché geometrické útvary (štvorec, trojuholník, kruh), ktoré sú mierne deformované tak, aby bližšie odzrkadľovali reálne, používateľom kreslené gestá.
Následujúci obrázok znázorňuje použitú architektúru našej neurónovej siete a opisuje jednotlivé použité vrstvy. Okrem toho tiež môžeme pozorovať transformáciu veľkosti informácie počas prechodu medzi jednotlivými vrstvami od vstupu (vrstva conv2d_1) až po výstup (vrstva activation_5) siete a počet trénovateľných parametrov pre každú vrstvu:
Ak Vás zaujímajú detailnejšie informácie o tejto architektúre a chceli by ste sa dozvedieť ako (a prečo vôbec) funguje, tieto články Vám poskytnú odpovede na Vaše otázky:
- CS231n Convolutional Neural Networks for Visual Recognition (Andrej Karpathy)
- A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way (Sumit Saha)
- Data Augmentation | How to use Deep Learning when you have Limited Data — Part 2 (Bharath Raj)
Záver
Vrámci našej aplikácie WizAR sa nám podarilo demonštrovať obrovský potenciál rozšírenej reality. Využitím tejto technológie na plnohodnotnú orientáciu vo fyzickom priestore a zisťovanie vzdialeností od okolitých predmetov a ich veľkostí dokážeme riešiť problémy, ktoré boli doteraz technologicky náročné (napr. vnútro-priestorová navigácia či mapovanie priestorov budov pre potreby simulácie). Ukázali sme, že jej využívanie nieje limitované len na samotnú vizuálnu stránku (hry, AR prehliadka, a podobne) ale svoje uplatnenie si nájde aj na pozadí. Už dnes je možné tieto komplikované programy a algoritmy spúšťať na masívne rozšírených a relatívne dostupných zariadeniach akými sú moderné smartfóny. Z dlhodobého hľadiska teda možno predpokladať vylepšenie týchto už teraz výborných technológií a rozšírenie možností ich použitia.
Pre tých z Vás, ktorých tento článok zaujal a radi by ste sa pustili do podobného projektu odporúčam držať sa oficiálnej Apple ARKit dokumentácie a pozorne si preštudovať jednotlivé demo aplikácie, ktoré táto dokumentácia obsahuje. To Vám umožní s touto knižnicou experimentovať a testovať jej možnosti a hranice. Len tak je možné vymaniť sa z prúdu a pustiť sa vlastnou, zatiaľ neprebádanou cestou.