Table of Contents

Laboratorul 04. Augmented Images

API-ul Augmented Images din ARCore ne permite să creăm aplicații care pot detecta și augmenta imagini 2D din mediul înconjurător al utilizatorului (cum ar fi postere, tablouri, ambalaje). API-ul se bazează pe setarea unui set de imagini de referință. ARCore utilizează pe urmă un algoritm computer vision pentru a extrage caracteristici din informația grayscale a fiecărei imagini și salvează o reprezentare a acestor caracteristici într-o bază de date de imagini augmentate. La runtime, ARCore caută aceste caracteristici pe suprafețele plane din mediul înconjurător al utilizatorului. Asta permite ARCore să detecteze aceste imagini în lumea reală și să estimeze poziția, orientarea și dimensiunea lor.

Capabilități Tehnice

Cerințe de Funcționare

Pentru a fi detectate, imaginile trebuie:

Selectarea Imaginilor de referință

Similar Vuforia, nici ARCore nu poate detecta orice imagine. Astfel, imaginile folosite trebuie să îndeplinească o serie de criterii:

Crearea Bazei de Date de Imagini

Crearea Bazei de Date de Imagini

  1. Click dreapta în Project → Create → XR → Reference Image Library
  2. Click pe obiectul creat → Add Image din Inspector
  3. Populați baza de date cu imagini
  4. Atașați scriptul AR Tracked Image Manager pe un GameObject din scenă
  5. Serialized Library va fi baza de date creată anterior
  6. Tracked Image prefab va fi obiectul care se va instanția când o imagine din baza de date este detectată

Crearea Bazei de Date de Imagini la Runtime

Putem observa că în pașii prezentați anterior baza de date de imagini este creată înainte de compilare. Deci trebuie să cunoaștem toate imaginile pe care le dorim în proiect înainte de a crea .apk-ul. Acest aspect nu este însă practic. De multe ori poate vom dori să folosim imagini aleatoare. Drept urmare, o bază de date configurată anterior nu este fezabilă. Deci, vom avea nevoie să creăm o bază de date proprie la runtime:

  1. Ștergem vechea bază de date de imagini (în caz că există); deci ștergem componenta ARTrackedImageManager dacă există
  2. Adăugăm o nouă componentă ARTrackedImageManager obiectului
  3. Creăm baza de date la runtime
  4. Adăugăm imagini în baza de date
  5. Setăm baza de date nou creată și numărul maxim de imagini mișcătoare.
  6. Activăm noua baza de date
  7. Setăm funcția de gestiune a schimbării stării de tracking a imaginilor
/* Destroy the previous ARTrackedImageManager component */
DestroyImmediate(gameObject.GetComponent<ARTrackedImageManager>());
 
/* Add a new ARTrackedImageManager component */
ARTrackedImageManager trackImageManager = gameObject.AddComponent<ARTrackedImageManager>();
 
/* Create a new database */
var library = trackImageManager.CreateRuntimeLibrary();
 
/* Add images to the database */
if (library  is MutableRuntimeReferenceImageLibrary mutableLibrary)
{
        mutableLibrary.ScheduleAddImageWithValidationJob(imageToAdd, "Image Name", 0.5f /* 50 cm */);
}
 
/* Set max number of moving images */
trackImageManager.requestedMaxNumberOfMovingImages = 3;
 
/* Set the reference library */
trackImageManager.referenceLibrary = library;
 
/* Enable current ARTrackedImageManager */
trackImageManager.enabled = true;
 
/* Attach the function for handling the tracking state of the images */
trackImageManager.trackedImagesChanged += OnTrackedImagesChanged; 
void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
    foreach (ARTrackedImage trackedImage in eventArgs.added)
    {
 
    }
 
    foreach (ARTrackedImage trackedImage in eventArgs.updated)
    {
 
    }
 
    foreach (ARTrackedImage trackedImage in eventArgs.removed)
    {
 
    }
}

Optimizarea Image Tracking

Tasks

Vom folosi scena Augmented Images din scheletul de laborator. Acesta poate fi descărcat de aici. Scriptul necesar pentru rezolvarea laboratorului se află în Assets→Scripts: RuntimeImageLibrary.cs.

  1. Creați o bază de date înainte de compilare cu minim 3 imagini.
  2. Augmentați imaginile din baza de date creată.
  3. Creați o bază de date la runtime cu minim o imagine și augmentați imaginea.
  4. Bonus: Adăugați un buton pe ecran cu care veți face switch între cele două baze de date.

Putem avea o singură bază de date de imagini activă la un moment dat. Deci, când adăugăm o nouă bază de date de imagini, trebuie să ștergem ultima bază de date existentă.