Rzeczywistość rozszerzona (AR) to innowacyjna technologia, która pozwala na przedstawienie rozszerzonego widoku rzeczywistego świata wokół ciebie. Dobrym przykładem może być wyświetlanie wyników meczów osadzonych obok akcji piłkarskiej na żywo z ziemi. Osadzanie odbywa się za pomocą aplikacji rozszerzonej rzeczywistości, która renderuje obraz z kamery na żywo i augmentuje wirtualny obiekt na wierzchu obrazu rzeczywistego świata i wyświetla na ekranie podglądu kamery za pomocą algorytmów rozpoznawania opartych na wizji.
W tym blogu wyjaśnimy proces rozwoju przykładowej aplikacji AR przy użyciu Qualcomm Vuforia SDK, jednego z najlepszych dostępnych SDK do tworzenia aplikacji AR opartych na wizji dla urządzeń mobilnych i tabletów. Obecnie jest on dostępny dla systemów Android, iOS oraz Unity. SDK zajmuje się zawiłościami najniższego poziomu, dzięki czemu programiści mogą całkowicie skupić się na aplikacji.
Przegląd pojęć
Zaczniemy od przeglądu kluczowych pojęć używanych w przestrzeni AR. Ważne jest, aby je zrozumieć przed rozpoczęciem tworzenia aplikacji AR.
- Cele – Są to obiekty świata rzeczywistego lub znaczniki (takie jak kody kreskowe lub symbole). Cele są tworzone za pomocą Vuforia Target Manager. Po utworzeniu mogą być użyte do śledzenia obiektu i wyświetlania nad nim zawartości. Cele mogą być obrazami, cylindrycznymi celami, celami zdefiniowanymi przez użytkownika lub celami słownymi, ramkami obrazu 2D (znaczniki ramek), wirtualnymi przyciskami (które mogą wyzwalać zdarzenia) lub celami w chmurze.
- Treść – Przez treść rozumiemy obiekt 2D/3D lub wideo, które chcemy rozszerzyć na górze celu. Na przykład wyświetlanie obrazu lub wideo na górze celu.
- Tekstury – Tekstura jest obiektem OpenGL utworzonym z jednego lub dwóch obrazów mających ten sam format obrazu. System Vuforia AR konwertuje treść na teksturę, a system AR renderuje teksturę, aby wyświetlić ją na ekranie podglądu kamery.
- Java Native Interface – W próbkach Vuforia Android, zdarzenia cyklu życia są obsługiwane w Javie, ale zdarzenia śledzenia i renderowanie są napisane w natywnym C++. JNI może być używany do komunikacji pomiędzy Javą i C++, ponieważ umożliwia natywne wywołania metod z Javy.
- Okluzja – Oznacza śledzenie obiektu wirtualnego ukrytego przez obiekt rzeczywisty. Obsługa zarządzania okluzją polega na ustanowieniu relacji pomiędzy obiektami wirtualnymi i rzeczywistymi poprzez użycie przezroczystych shaderów, a tym samym wyświetlanie grafiki tak, jakby znajdowała się wewnątrz obiektu świata rzeczywistego.
- OpenGL ES – Vuforia używa wewnętrznie OpenGL ES do renderowania grafiki 2D i 3D przy użyciu jednostki procesora graficznego. OpenGL ES został zaprojektowany specjalnie dla smartfonów i urządzeń wbudowanych.
Komponenty Vuforii
Powyższy diagram przedstawia podstawowe komponenty aplikacji Vuforia AR.
- Kamera – przechwytuje klatkę podglądu i przekazuje ją do Image Trackera.
- Konwerter obrazu – Konwerter formatu pikseli konwertuje domyślny format kamery do formatu odpowiedniego dla renderingu i śledzenia OpenGL ES.
- Tracker – Tracker wykrywa i śledzi obiekty świata rzeczywistego w ramce podglądu kamery przy użyciu algorytmów rozpoznawania obrazu. Wyniki są przechowywane w obiekcie stanu, który jest przekazywany do renderera tła wideo.
- Renderer tła wideo – Renderer renderuje obraz z kamery przechowywany w obiekcie stanu i powiększa go na ekranie kamery.
- Bazy danych urządzeń – Baza danych urządzeń lub zbiór danych zawiera cele utworzone za pomocą Menedżera celów. Zawiera plik konfiguracyjny XML i binarny plik .dat.
- Bazy danych w chmurze – Mogą być tworzone za pomocą menedżera celów i mogą zawierać bazę danych do 1 miliona celów, które mogą być odpytywane w czasie pracy.
Rozpoczęcie rozwoju
TargetManager – Pierwszym krokiem jest utworzenie celów za pomocą Vuforia Target Manager, aby użyć ich jako bazy danych urządzeń. W tym celu należy najpierw dokonać bezpłatnej rejestracji na portalu deweloperskim Vuforia. To konto może być używane do pobierania zasobów z Vuforii i publikowania problemów na forum Vuforii. Po zalogowaniu się,
- Otwórz TargetManager na stronie Vuforia, jak pokazano powyżej i otwórz zakładkę Device Databases.
- Kliknij Create Database, Add Target. Otworzy się okno dialogowe nowego celu.
- Wybierz z lokalnego systemu obraz, który chcesz pokazać jako cel. Obsługiwane są tylko obrazy JPG lub PNG (tylko RGB lub skala szarości) o rozmiarze mniejszym niż 2MB. Idealny obraz docelowy powinien być bogaty w szczegóły i musi mieć dobry kontrast i brak powtarzających się wzorów.
- Wybierz typ celu jako pojedynczy obraz. Wprowadź dowolną wartość jako szerokość i kliknij utwórz cel. Po krótkim czasie przetwarzania, wybrany cel zostanie utworzony.
- Jeśli ocena celu jest większa niż trzy, wtedy cel może być użyty do śledzenia. Wyższa ocena wskazuje, że obraz jest łatwo śledzony przez system AR.
- Dodaj więcej celów w ten sam sposób. Wybierz cele, które chcesz pobrać, i kliknij przycisk Pobierz wybrane cele.
- Pobieranie będzie zawierać plik <database_name>.xml i <database_name>.dat. Plik .xml zawiera bazę danych obrazów docelowych, podczas gdy plik .dat jest plikiem binarnym zawierającym informacje o śledzonej bazie danych.
Instalacja i pobieranie przykładowego kodu
- Zakładając, że jesteś już zalogowany na swoje konto Vuforia, przejdź dalej i pobierz Vuforia SDK dla Androida i Próbki dla Androida
- Wyodrębnij folder Vuforia SDK i umieść go w tym samym folderze, w którym trzymasz swój Android-SDK-folder. Skopiuj próbki do pustego katalogu próbek w folderze Vuforia SDK i zaimportuj próbkę VideoPlayBack.
- W Eclipse, przejdź do Window-Preferences i przejdź do Java-Build Path – Class Variables i utwórz nową zmienną.
- Dodaj QCAR_SDK_ROOT w polu Name i wybierz folder Vuforia SDK klikając opcję folder.
- Sprawdź w swoim projekcie Java Build Path, vuforia.jar jest wyeksportowany w zakładce Order and Exports.
- Otwórz copyVuforiaFiles.xml i w <fileset> podaj ścieżkę dla armeabi-v7a. Możesz sprawdzić ścieżkę w katalogu build w folderze Vuforia-SDK. W moim przypadku w Linuksie ścieżka to : „/home/vineet/vuforia-sdk-android-2-8-8/build/lib/armeabi-v7a”
- Poprzedni krok wygeneruje plik libVuforia.so w katalogu libs twojego projektu, gdy zbudujesz i uruchomisz aplikację.
- Aplikacja demo zawiera już 2 markery i pliki wideo, których możesz użyć do testów. Możesz wydrukować markery z plików PDF w folderze media swojej app.
- Po uruchomieniu aplikacji, ekran widoku kamery zostanie otwarty. Po skierowaniu kamery na marker, na ekranie pojawi się wideo nałożone na marker.
Przebieg pracy dewelopera
Kiedy użytkownik uruchamia przykładową aplikację, zaczyna ona tworzyć i ładować tekstury poprzez wywołanie funkcji loadTextures(). Tutaj bitmapy z folderu assets są konwertowane na tekstury wymagane przez silnik Vuforia SDK do renderowania obiektów 3D na widoku AR.
W tym samym czasie aplikacja rozpocznie proces konfiguracji silnika poprzez wywołanie initAR(). Tutaj aplikacja będzie asynchronicznie inicjalizować silnik Vuforia SDK. Po udanej inicjalizacji, aplikacja zacznie asynchronicznie ładować dane trackerów. Będzie ona ładować i aktywować zestawy danych z docelowego pliku XML utworzonego przy użyciu TargetManager.
Po konfiguracji silnika, aplikacja wywołuje initApplicationAR(), gdzie tworzy i inicjalizuje widok OpenGLES i dołącza do niego renderer, który jest wymagany do wyświetlania wideo na górze ekranu kamery, jeśli imagetarget zostanie znaleziony. Renderer dołączony do widoku OpenGL ES żąda załadowania wideo poprzez VideoPlaybackHelper i wywołuje metodę OpenGL DrawFrame() w celu śledzenia klatek kamery. Podczas tego procesu tworzone są również tekstury OpenGL z obiektów tekstur załadowanych na początku oraz tekstury dla danych wideo.
Aplikacja wywołuje następnie metodę startAR() aby uruchomić kamerę. Jak tylko kamera się uruchomi, renderer rozpocznie śledzenie klatek. Kiedy imageTarget zostanie znaleziony, aplikacja wyświetla wideo. Wideo może być skonfigurowane do automatycznego odtwarzania lub może być uruchamiane po dotknięciu.
Wszystkie zasoby są rozładowywane przez aplikację poprzez wywołanie onDestroy() kiedy użytkownik zamknie aplikację.
Wniosek
W tym blogu, teraz widzieliśmy jak możemy używać Vuforii do śledzenia ImageTargets i wyświetlania wideo na wierzchu. Vuforia może być używana do wielu celów, takich jak wykrywanie tekstu, zarządzanie okluzją, generowanie celów w czasie rzeczywistym z chmury. Aby dowiedzieć się więcej o Vuforii sprawdź developer.vuforia.com.
.