Table of Contents

Laborator AR 04. Augmented Images. Augmented Faces

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 altor engine-uri de realitate augmentată (precum 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

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ă.

Augmented Faces

API-ul Augmented Faces permite randare de asset-uri peste fețele umane (similar Snapchat). Acesta furnizează puncte de referință care permit aplicației să identifice automat diferite regiuni ale unei fețe detectate. Aplicația poate apoi să folosească aceste regiuni pentru a suprapune asset-uri într-un mod care se potrivește corect conturului feței fiecărei persoane.

Părțile unei Fețe Augmentate

Detectarea Fețelor

Fețele sunt reprezentate de obiecte ARFace, care sunt create, actualizate și eliminate de ARFaceManager. O dată pe cadru, ARFaceManager declanșează un eveniment facesChanged care conține trei liste: fețe adăugate, fețe actualizate și fețe eliminate. Când ARFaceManager detectează o față în scenă, va instanția un prefab, care conține ARFace atașat pentru a urmări fața. Pentru a vizualiza mesh-ul feței, prefabul feței trebuie să conțină ARFaceMeshVisualizer. ARFaceMeshVisualizer generează un mesh corespunzător feței detectate.

Pași pentru augmentarea fețelor:

Camera Frontală

În plus, cel mai adesea când dorim să augmentăm fețe, dorim să folosim camera frontală a telefonului. Astfel:

Tasks

Vom folosi scena L4_AugmentedImages din scheletul de laborator pentru primele 3 task-uri și scena L4_AugmentedFaces pentru ultimul task. Acesta poate fi descărcat de aici. Scriptul necesar pentru rezolvarea laboratorului se află în Assets→Scripts: RuntimeImageLibrary.cs.

Importați ultima versiune a pachetului IRVA_L4_AR care se găsește în folder-ul UnityPackages din folderul root al proiectului.

  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. Detectați și augmentați o față.
  5. Bonus: Adăugați posibilitatea de a cicla printre 3 “măști” diferite pentru augmentarea feței. Utilizatorul poate selecta masca dintr-un meniu de pe ecran.