A kiterjesztett valóság (AR) egy olyan innovatív technológia, amely lehetővé teszi a körülöttünk lévő valós világ továbbfejlesztett megjelenítését. Jó példa erre a meccsek eredményeinek megjelenítése a pályán zajló élő focimeccsek mellé ágyazva. A beágyazás egy kiterjesztett valóság alkalmazáson keresztül történik, amely egy élő kameraképet renderel, és a valós világ képére egy virtuális objektumot erősít, és látásalapú felismerő algoritmusok segítségével megjeleníti a kamera előnézeti képernyőjén.
Ebben a blogban egy minta AR-alkalmazás fejlesztési folyamatát ismertetjük a Qualcomm Vuforia SDK használatával, amely az egyik legjobb SDK, amely a mobileszközök és táblagépek látásalapú AR-alkalmazásainak készítéséhez elérhető. Jelenleg Androidra, iOS-re és Unityre érhető el. Az SDK gondoskodik a legalacsonyabb szintű bonyodalmakról, így a fejlesztők teljes mértékben az alkalmazásra koncentrálhatnak.
Koncepcionális áttekintés
Az AR-térben használt kulcsfogalmak áttekintésével kezdünk. Fontos, hogy ezeket megértsük, mielőtt belekezdünk egy AR-alkalmazás fejlesztésébe.
- Célpontok – Ezek a valós világ tárgyai vagy jelölések (például vonalkódok vagy szimbólumok). A célpontokat a Vuforia Target Manager segítségével hozzuk létre. Létrehozásuk után egy objektum követésére és a rajta lévő tartalom megjelenítésére használhatók. A célpontok lehetnek képi célpontok, hengeres célpontok, felhasználó által meghatározott célpontok vagy szócélpontok, 2D képkockák (keretjelölők), virtuális gombok (amelyek eseményt válthatnak ki) vagy Cloud célpontok.
- Tartalom – Tartalom alatt egy 2D/3D objektumot vagy videót értünk, amelyet egy célpontra szeretnénk ráerősíteni. Például egy kép vagy videó megjelenítése a célpont tetején.
- Textúrák – A textúra egy vagy két azonos képformátumú kép által alkotott OpenGL objektum. A Vuforia AR rendszer a tartalmat textúrává alakítja, és az AR rendszer rendereli a textúrát a kamera előnézeti képernyőjén való megjelenítéshez.
- Java Native Interface – A Vuforia Android mintákban az életciklus eseményeit Java nyelven kezelik, de a követési események és a renderelés natív C++ nyelven íródnak. A JNI használható a Java és a C++ közötti kommunikációra, mivel lehetővé teszi a natív metódushívásokat Javából.
- Occlusion – A valós objektum által elrejtett virtuális objektum követését jelenti. Az okklúzió kezelésének kezelése magában foglalja a virtuális és valós objektumok közötti kapcsolat létrehozását átlátszó árnyékolók használatával, és így a grafikát úgy jeleníti meg, mintha a valós világban lévő objektumon belül lenne.
- OpenGL ES – A Vuforia belsőleg OpenGL ES-t használ a 2D és 3D grafika renderelésére egy grafikus processzoregység segítségével. Az OpenGL ES kifejezetten okostelefonokhoz és beágyazott eszközökhöz készült.
Vuforia komponensek
A fenti ábra a Vuforia AR alkalmazás alapvető komponenseit mutatja.
- Kamera – Rögzíti az előnézeti képkockát és továbbítja a képkövetőnek.
- Image Converter – A pixel formátum konverter a kamera alapértelmezett formátumát OpenGL ES renderelésre és követésre alkalmas formátumra konvertálja.
- Tracker – A tracker képfelismerő algoritmusok segítségével érzékeli és követi a valós világ objektumait a kamera előnézeti képkockájában. Az eredményeket az állapotobjektumban tárolja, amelyet átad a videoháttér renderelőnek.
- Videoháttér renderelő – A renderelő rendereli az állapotobjektumban tárolt kameraképet, és a kameraképernyőre növeli azt.
- Eszközadatbázisok – Az eszközadatbázis vagy adatkészlet a Target Manager segítségével létrehozott célpontokat tartalmazza. Tartalmaz egy XML konfigurációs fájlt és egy bináris .dat fájlt.
- Cloud Databases – A Target Manager segítségével hozható létre, és akár 1 millió célpontot tartalmazó adatbázist tartalmazhat, amely futás közben lekérdezhető.
A fejlesztés kezdete
TargetManager – Az első lépés a Vuforia Target Manager segítségével létrehozott célpontok létrehozása, amelyeket eszközadatként lehet használni. Ehhez először ingyenes regisztrációt kell végeznie a Vuforia fejlesztői portálon. Ezt a fiókot lehet használni a Vuforia forrásainak letöltésére és a Vuforia fórumokon történő problémabejegyzésre. Bejelentkezés után,
- Nyissa meg a TargetManager-t a Vuforia weboldalán a fentiek szerint, és nyissa meg a Device Databases fület.
- Kattintson az Create Database, Add Target gombra. Megnyílik egy új célpont párbeszédpanel.
- Válassza ki a helyi rendszerről azt a képet, amelyet célpontként szeretne megjeleníteni. Csak a 2 MB-nál kisebb méretű JPG vagy PNG képek (csak RGB vagy szürkeárnyalatos) támogatottak. Az ideális célképnek részletgazdagnak, jó kontrasztúnak és ismétlődő minták nélkülinek kell lennie.
- A célkép típusát egyetlen képként válassza ki. Adjon meg egy tetszőleges értéket szélességként, és kattintson a Cél létrehozása gombra. Rövid feldolgozási idő után a kiválasztott célpont létrejön.
- Ha a célpont minősítése több mint három, akkor a célpont használható a követéshez. A magasabb minősítés azt jelzi, hogy a képet az AR rendszer könnyen követi.
- Ugyanígy adjon hozzá további célpontokat. Válassza ki a letölteni kívánt célpontokat, és kattintson a kiválasztott célpontok letöltése gombra.
- A letöltés tartalmazni fog egy <adatbázis_név>.xml és egy <adatbázis_név>.dat fájlt. Az .xml fájl a célképek adatbázisát tartalmazza, míg a .dat fájl egy bináris fájl, amely a nyomon követhető adatbázisról tartalmaz információkat.
Telepítés és a mintakód letöltése
- Föltételezve, hogy már bejelentkezett a Vuforia fiókjába, folytassa a Vuforia SDK for Android és a Samples for Android letöltését
- Kivonja a Vuforia SDK mappát, és tegye ugyanabba a mappába, ahol az Android-SDK mappáját tartotta. Másolja a mintákat a Vuforia SDK mappában lévő üres sample könyvtárba, és importálja a VideoPlayBack mintát.
- Az Eclipse-ben lépjen a Window-Preferences menüpontra, és navigáljon a Java-Build Path – Class Variables menüpontra, és hozzon létre egy új változót.
- Add hozzá a QCAR_SDK_ROOT-ot a Name mezőben és válaszd ki a Vuforia SDK mappát a folder opcióra kattintva.
- Vizsgáld meg a projektedben a Java Build Path-ot, a vuforia.jar exportálva van a Order and Exports fül alatt.
- Nyisd meg a copyVuforiaFiles.xml-t és a <fileset> alatt add meg az armeabi-v7a elérési útját. Az elérési utat a Vuforia-SDK mappájának build könyvtárában ellenőrizheti. Az én esetemben Linuxon az útvonal : “/home/vineet/vineet/vuforia-sdk-android-2-8-8/build/lib/armeabi-v7a”
- Az előző lépés létrehozza a libVuforia.so fájlt a projekt libs könyvtárában, amikor elkészíti és futtatja az alkalmazást.
- A demo alkalmazás már tartalmaz 2 markert és videó fájlt, amelyeket tesztelésre használhat. A markereket az alkalmazás média mappájában található PDF fájlokból nyomtathatja ki.
- Az alkalmazás futtatása után megnyílik a kamera nézet képernyője. Ha a kamerát a jelölőre irányítja, a képernyőn megjelenik egy videó a jelölő fölött.
Developer Work Flow
Amikor a felhasználó elindítja a mintaalkalmazást, az a loadTextures() hívásával megkezdi a textúrák létrehozását és betöltését. Itt az assets mappából származó bittérképeket a Vuforia SDK motor által a 3D objektumok AR nézetben történő megjelenítéséhez szükséges textúrákká alakítja át.
Mivel egyidejűleg az alkalmazás az initAR() meghívásával elindítja a motor konfigurálásának folyamatát. Itt az alkalmazás aszinkron módon inicializálja a Vuforia SDK motort. A sikeres inicializálás után az alkalmazás elkezdi a nyomkövető adatok aszinkron betöltését. Betölti és aktiválja az adatkészleteket a TargetManager segítségével létrehozott cél XML fájlból.
A motor konfigurálása után az alkalmazás meghívja az initApplicationAR() funkciót, ahol létrehozza és inicializálja az OpenGLES nézetet, és csatol hozzá egy renderelőt, amely szükséges a videó megjelenítéséhez a kamera képernyőjének tetején, ha a képcél megtalálható. Az OpenGL ES nézethez csatolt renderelő a VideoPlaybackHelper segítségével kéri a videók betöltését, és meghívja az OpenGL DrawFrame() metódust a kameraképek követéséhez. Ennek során az elején betöltött textures objektumokból az OpenGL textúrák és a videó adatokhoz tartozó textúrák is létrejönnek.
Az alkalmazás ezután meghívja a startAR() parancsot a kamera elindításához. Amint a kamera elindul, a renderelő elkezdi követni a képkockákat. Ha az imageTarget megvan az alkalmazás megjeleníti a videót. A videó beállítható úgy, hogy automatikusan lejátsszon, vagy elindulhat tapintásra.
Az összes erőforrást az alkalmazás az onDestroy() hívásával tölti ki, amikor a felhasználó bezárja az alkalmazást.
Következtetés
Ezzel a bloggal most láttuk, hogyan használhatjuk a Vuforia-t az ImageTargets követésére és a videó megjelenítésére. A Vuforia rengeteg célra használható, például szövegfelismerésre, okklúziókezelésre, futásidejű célpontgenerálásra a felhőből. Ha többet szeretne megtudni a Vuforiáról, látogasson el a developer.vuforia.com.
oldalra.