Augmented Reality (AR) er en innovativ teknologi, der giver dig mulighed for at præsentere en forbedret visning af den virkelige verden omkring dig. Et godt eksempel kunne være at vise kampresultater indlejret sammen med live-fodboldkampen fra banen. Indlejringen sker via en augmented reality-applikation, som renderer et live kamerabillede og øger et virtuelt objekt oven på billedet fra den virkelige verden og viser det på din kameravisningsskærm ved hjælp af vision-baserede genkendelsesalgoritmer.
I denne blog vil vi forklare udviklingsprocessen for en prøve-AR-app ved hjælp af Qualcomm Vuforia SDK, et af de bedste SDK’er, der er tilgængelige til at bygge vision-baserede AR-apps til mobile enheder og tablets. I øjeblikket er det tilgængeligt til Android, iOS og Unity. SDK’et tager sig af de laveste komplikationer på det laveste niveau, hvilket gør det muligt for udviklerne at fokusere fuldt ud på applikationen.
Konceptuel oversigt
Vi vil begynde med en oversigt over de vigtigste koncepter, der anvendes inden for AR-området. Det er vigtigt at forstå disse, før man går i gang med udviklingen af en AR-app.
- Mål – De er objekter eller markører fra den virkelige verden (som stregkoder eller symboler). Målene oprettes ved hjælp af Vuforia Target Manager. Når de er oprettet, kan de bruges til at spore et objekt og vise indhold over det. Målene kan være billedmål, cylindriske mål, brugerdefinerede mål eller ordmål, 2D-billedrammer (rammemarkeringer), virtuelle knapper (der kan udløse en begivenhed) eller cloud-mål.
- Indhold – Med indhold menes et 2D/3D-objekt eller en video, som vi ønsker at forstærke oven på et mål. F.eks. visning af et billede eller en video oven på målet.
- Teksturer – En tekstur er et OpenGL-objekt, der er dannet af et eller to billeder med samme billedformat. Vuforia AR-systemet konverterer indhold til tekstur, og AR-systemet renderer teksturerne for at vise dem på kameraets preview-skærm.
- Java Native Interface – I Vuforia Android-eksempler håndteres livscyklusbegivenhederne i Java, men sporingsbegivenheder og rendering er skrevet i native C++. JNI kan bruges til at kommunikere mellem Java og C++, da det muliggør native metodekald fra Java.
- Occlusion – Det betyder sporing af et virtuelt objekt, der er skjult af et virkeligt objekt. Håndtering af okklusionsstyring indebærer, at der etableres et forhold mellem virtuelle og reelle objekter ved hjælp af gennemsigtige shaders og dermed vises grafik, som om de befinder sig inden i et objekt i den virkelige verden.
- OpenGL ES – Vuforia bruger OpenGL ES internt til rendering af 2D- og 3D-grafik ved hjælp af en grafisk procesorenhed. OpenGL ES er specielt designet til smartphones og indlejrede enheder.
Vuforia-komponenter
Overstående diagram viser kernekomponenterne i Vuforia AR-applikationen.
- Kamera – Optager preview-rammen og sender den videre til Image Tracker.
- Billedkonverter – Pixelformatkonverteren konverterer kameraets standardformat til et format, der er egnet til OpenGL ES-rendering og sporing.
- Tracker – Trackeren registrerer og sporer objekter fra den virkelige verden i kameraets previewramme ved hjælp af algoritmer til billedgenkendelse. Resultaterne gemmes i state object, som sendes til video baggrundsrendereren.
- Video Background Renderer – Rendereren renderer det kamerabillede, der er gemt i state object, og øger det på kameraskærmen.
- Enhedsdatabaser – Enhedsdatabasen eller datasættet indeholder mål, der er oprettet ved hjælp af Target Manager. Den indeholder en XML-konfigurationsfil og en binær .dat-fil.
- Clouddatabaser – Kan oprettes ved hjælp af Target Manager og kan indeholde en database med op til 1 million mål, som kan forespørges på køretid.
Begyndende udvikling
TargetManager – Det første skridt er at oprette mål ved hjælp af Vuforia Target Manager til brug som enhedsdatabase. Til dette skal du først foretage en gratis registrering på Vuforia-udviklerportalen. Denne konto kan bruges til at downloade ressourcer fra Vuforia og til at skrive problemer på Vuforia-fora. Efter login,
- Åbn TargetManager på Vuforia-webstedet som vist ovenfor, og åbn fanen Enhedsdatabaser.
- Klik på Opret database, Tilføj mål. En ny måldialog åbnes.
- Vælg det billede, du ønsker at vise som mål fra dit lokale system. Kun JPG- eller PNG-billeder (kun RGB- eller gråtoner) med en størrelse på under 2 MB understøttes. Et ideelt billedmål skal være rig på detaljer og skal have god kontrast og ingen gentagende mønstre.
- Vælg måltype som enkeltbillede. Indtast en vilkårlig værdi som bredde, og klik på create target (Opret mål). Efter kort behandlingstid oprettes det valgte mål.
- Hvis målvurderingen er mere end tre, kan målet bruges til sporing. En højere rating angiver, at billedet let kan spores af AR-systemet.
- Føj flere mål på samme måde. Vælg de mål, du vil downloade, og klik på download valgte mål.
- Downloadet vil indeholde en <database_name>.xml og <database_name>.dat-fil. .xml-filen indeholder databasen over målbilleder, mens .dat-filen er en binær fil, der indeholder oplysninger om sporbar database.
Installation og download af prøvekode
- Såfremt du allerede er logget ind på din Vuforia-konto, skal du gå videre og downloade Vuforia SDK til Android og Samples for Android
- Udpak Vuforia SDK-mappen, og læg den i samme mappe, hvor du har opbevaret din Android-SDK-mappe. Kopier samples ind i den tomme sample-mappe i Vuforia SDK-mappen, og importer VideoPlayBack sample.
- I Eclipse skal du gå til Window-Preferences og navigere til Java-Build Path – Class Variables og oprette en ny variabel.
- Føj QCAR_SDK_ROOT til i feltet Navn, og vælg din Vuforia SDK-mappe ved at klikke på mappeindstillingen.
- Kontroller i dit projekt Java Build Path, vuforia.jar er eksporteret under fanen Bestilling og eksport.
- Åbn copyVuforiaFiles.xml, og under <fileset> angiv stien til armeabi-v7a. Du kan kontrollere stien i build-mappen i din Vuforia-SDK-mappe. I mit tilfælde i Linux er stien : “/home/vineet/vineet/vuforia-sdk-android-2-8-8-8/build/lib/armeabi-v7a”
- Det foregående trin vil generere libVuforia.so-filen i dit projekts libs-mappe, når du bygger og kører appen.
- Demo-appen indeholder allerede 2 markører og videofiler, som du kan bruge til at teste. Du kan udskrive markørerne fra PDF-filer i mediemappen i din app.
- Når du har kørt appen, åbnes skærmen med kameravisning. Når du peger kameraet på markøren, vises en video på skærmen overlejret på markøren.
Arbejdsgang for udviklere
Når en bruger starter prøveappen, begynder den at oprette og indlæse teksturer ved at kalde loadTextures(). Her konverteres bitmaps fra mappen med aktiver til teksturer, der kræves af Vuforia SDK-motoren til gengivelse af 3D-objekter på AR-visningen.
Simultan starter appen processen til konfiguration af motoren ved at kalde initAR(). Her vil appen asynkront initialisere Vuforia SDK-motoren. Efter en vellykket initialisering begynder appen at indlæse trackerdata asynkront. Den indlæser og aktiverer datasættene fra XML-målfilen, der er oprettet ved hjælp af TargetManager.
Efter motorkonfigurationen kalder appen initApplicationAR(), hvor den opretter og initialiserer OpenGLES-visning og knytter en renderer til den, hvilket er nødvendigt for at vise video oven på kameraskærmen, hvis imagetarget findes. Den renderer, der er knyttet til OpenGL ES-visningen, anmoder om indlæsning af videoer via VideoPlaybackHelper og kalder OpenGL DrawFrame()-metoden for at spore kameraets rammer. I løbet af denne proces oprettes OpenGL-teksturer fra teksturobjekter, der blev indlæst i begyndelsen, og teksturer til videodata også.
App’en kalder derefter startAR() for at starte kameraet. Så snart kameraet starter, begynder rendereren at spore billeder. Når imageTarget er fundet, viser appen videoen. Videoen kan konfigureres til at blive afspillet automatisk eller kan startes ved tryk.
Alle ressourcer aflæsses af appen ved at kalde onDestroy(), når brugeren lukker appen.
Konklusion
Med denne blog har vi nu set, hvordan vi kan bruge Vuforia til at spore ImageTargets og vise video oven på det. Vuforia kan bruges til mange formål som tekstdetektion, okklusionsstyring, run time targetgenerering fra skyen. Hvis du vil vide mere om Vuforia, skal du tjekke developer.vuforia.com.