Augmented Reality (AR) är en innovativ teknik som gör det möjligt att visa en förbättrad bild av den verkliga världen omkring dig. Ett bra exempel är att visa matchresultat inbäddade vid sidan av den levande fotbollsaktiviteten från planen. Inbäddningen sker via en applikation för förstärkt verklighet som renderar en levande kamerabild och förstärker ett virtuellt objekt ovanpå bilden från den verkliga världen och som visas på kamerans förhandsgranskningsskärm med hjälp av visionsbaserade igenkänningsalgoritmer.
I den här bloggen kommer vi att förklara utvecklingsprocessen för ett exempel på en AR-app med hjälp av Qualcomm Vuforia SDK, en av de bästa SDK:erna som finns tillgängliga för att bygga visionsbaserade AR-appar för mobila enheter och surfplattor. För närvarande finns det tillgängligt för Android, iOS och Unity. SDK:n tar hand om de lägsta nivåernas finesser, vilket gör att utvecklarna kan fokusera helt och hållet på applikationen.
Begreppsöversikt
Vi kommer att börja med en översikt över de viktigaste begreppen som används inom AR-området. Det är viktigt att förstå dessa innan man börjar utveckla en AR-app.
- Mål – De är verkliga objekt eller markörer (som streckkoder eller symboler). Målen skapas med hjälp av Vuforia Target Manager. När de har skapats kan de användas för att spåra ett objekt och visa innehåll över det. Målen kan vara bildmål, cylindriska mål, användardefinierade mål eller ordmål, 2D-bildramar (rammarkörer), virtuella knappar (som kan utlösa en händelse) eller molnmål.
- Innehåll – Med innehåll menas ett 2D/3D-objekt eller en video som vi vill lägga ovanpå ett mål. Till exempel visas en bild eller video ovanpå målet.
- Texturer – En textur är ett OpenGL-objekt som bildas av en eller två bilder med samma bildformat. Vuforia AR-systemet omvandlar innehållet till textur och AR-systemet render texturen för att visa den på kamerans förhandsgranskningsskärm.
- Java Native Interface – I Vuforia Android-exemplar hanteras livscykelhändelserna i Java, men spårningshändelser och rendering är skrivna i C++. JNI kan användas för att kommunicera mellan Java och C++ eftersom det möjliggör anrop av inhemska metoder från Java.
- Ocklusion – Det innebär att spåra ett virtuellt objekt som döljs av ett verkligt objekt. Hantering av ocklusionshantering innebär att man upprättar ett förhållande mellan virtuella och verkliga objekt med hjälp av transparenta shaders och därmed visar grafik som om den befann sig inuti ett verkligt objekt.
- OpenGL ES – Vuforia använder OpenGL ES internt för rendering av 2D- och 3D-grafik med hjälp av en grafisk processorenhet. OpenGL ES är särskilt utformat för smartphones och inbyggda enheter.
Vuforia-komponenter
Ovanstående diagram visar kärnkomponenterna i Vuforia AR-tillämpningen.
- Kamera – Fångar förhandsgranskningsramen och skickar den vidare till Image Tracker.
- Bildomvandlare – Pixelformatomvandlaren omvandlar kamerans standardformat till ett format som lämpar sig för OpenGL ES-rendering och spårning.
- Spårare – Spåraren upptäcker och spårar verkliga objekt i kamerans förhandsgranskningsram med hjälp av algoritmer för bildigenkänning. Resultaten lagras i ett tillståndsobjekt som skickas till videobakgrundsrenderaren.
- Videobakgrundsrenderare – Renderaren render kamerabilden som lagras i tillståndsobjektet och ökar den på kameraskärmen.
- Enhetsdatabaser – Enhetsdatabasen eller datamängden innehåller mål som skapats med hjälp av Target Manager. Den innehåller en XML-konfigurationsfil och en binär .dat-fil.
- Molndatabaser – Kan skapas med hjälp av målhanteraren och kan innehålla en databas med upp till 1 miljon mål, som kan frågas ut vid körning.
Begynnande av utveckling
TargetManager – Det första steget är att skapa mål med hjälp av Vuforia Target Manager för att använda som enhetsdatabas. För detta måste du först göra en gratis registrering på Vuforias utvecklarportal. Detta konto kan användas för att ladda ner resurser från Vuforia och för att ställa frågor på Vuforias forum. Efter inloggning,
- Öppna TargetManager på Vuforias webbplats som visas ovan och öppna fliken Enhetsdatabaser.
- Klicka på Skapa databas, Lägg till mål. En ny måldialog öppnas.
- Välj den bild du vill visa som mål från ditt lokala system. Endast JPG- eller PNG-bilder (endast RGB eller gråskala) som är mindre än 2 MB stora stöds. En idealisk målbild bör vara detaljrik och ha god kontrast och inga repetitiva mönster.
- Välj måltyp som en enda bild. Ange ett godtyckligt värde som bredd och klicka på skapa mål. Efter en kort behandlingstid skapas det valda målet.
- Om målvärdet är mer än tre kan målet användas för spårning. Ett högre betyg indikerar att bilden lätt kan spåras av AR-systemet.
- Lägg till fler mål på samma sätt. Välj de mål du vill ladda ner och klicka på ladda ner valda mål.
- Den nedladdade filen kommer att innehålla en <databas_namn>.xml och <databas_namn>.dat-fil. .xml-filen innehåller databasen med målbilder medan .dat-filen är en binär fil som innehåller information om spårbar databas.
Installation och nedladdning av exempelkod
- Antagen att du redan är inloggad på ditt Vuforia-konto, gå vidare och ladda ner Vuforia SDK för Android och Samples för Android
- Extrahera Vuforia SDK-mappen och lägg den i samma mapp där du har haft din Android-SDK-mapp. Kopiera samples i den tomma sample-katalogen i Vuforia SDK-mappen och importera VideoPlayBack sample.
- I Eclipse, gå till Window-Preferences (fönsterinställningar) och navigera till Java-Build Path (Java-byggsökväg) – Class Variables (klassvariabler) och skapa en ny variabel.
- Lägg till QCAR_SDK_ROOT i fältet Name och välj din Vuforia SDK-mapp genom att klicka på mappalternativet.
- Kontrollera att vuforia.jar exporteras under fliken Order and Exports i ditt projekt Java Build Path.
- Öppna copyVuforiaFiles.xml och ange sökvägen för armeabi-v7a under <fileset>. Du kan kontrollera sökvägen i byggkatalogen i din Vuforia-SDK-mapp. I mitt fall i Linux är sökvägen : ”/home/vineet/vineet/vuforia-sdk-android-2-8-8-8/build/lib/armeabi-v7a”
- Det föregående steget kommer att generera libVuforia.so-filen i projektets libs-katalog när du bygger och kör appen.
- Demo-appen innehåller redan 2 markörer och videofiler som du kan använda för att testa. Du kan skriva ut markörerna från PDF-filer i mediamappen i din app.
- När du kör appen öppnas kameravyns skärm. När du riktar kameran mot markören visas en video på skärmen överlagrad på markören.
Arbetsflöde för utvecklare
När användaren startar provexemplar-appen börjar den skapa och läsa in texturer genom att kalla loadTextures(). Här omvandlas bitmaps från mappen med tillgångar till texturer som krävs av Vuforia SDK-motorn för rendering av 3D-objekt i AR-vyn.
Samtidigt startar appen processen för att konfigurera motorn genom att anropa initAR(). Här kommer appen att asynkront initiera Vuforia SDK-motorn. Efter en lyckad initialisering börjar appen ladda spårningsdata asynkront. Den kommer att ladda och aktivera dataset från mål-XML-filen som skapats med hjälp av TargetManager.
Efter motorkonfigurationen anropar appen initApplicationAR() där den skapar och initialiserar OpenGLES-vyn och kopplar en renderer till den, vilket krävs för att visa video ovanpå kameraskärmen om imagetarget hittas. Den renderare som är kopplad till OpenGL ES-vyn begär inladdning av videor via VideoPlaybackHelper och anropar OpenGL DrawFrame()-metoden för att spåra kamerans bildrutor. Under denna process skapas också OpenGL-texturer från texturobjekt som laddades i början och texturer för videodata.
Appen anropar sedan startAR() för att starta kameran. Så snart kameran startar börjar renderaren spåra ramar. När imageTarget hittas visar appen videon. Videon kan konfigureras så att den spelas upp automatiskt eller startas vid tryckning.
Alla resurser lossas av appen genom att kalla onDestroy() när användaren stänger appen.
Slutsats
Med den här bloggen har vi nu sett hur vi kan använda Vuforia för att spåra ImageTargets och visa video ovanpå den. Vuforia kan användas för många ändamål som textupptäckt, ocklusionshantering, körtidsgenerering av mål från molnet. Om du vill veta mer om Vuforia kan du besöka developer.vuforia.com.
.