Differences

This shows you the differences between two versions of the page.

Link to this comparison view

irva:laboratoarear:04 [2025/09/27 20:08]
maria_anca.balutoiu [Capabilități Tehnice]
irva:laboratoarear:04 [2025/09/29 23:17] (current)
maria_anca.balutoiu [Tasks]
Line 1: Line 1:
-===== Laborator AR 04. Augmented Images =====+===== 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. 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.
  
 {{ :​irva:​laboratoare:​augmented-images-demo.gif?​600 |}} {{ :​irva:​laboratoare:​augmented-images-demo.gif?​600 |}}
  
-==== Capabilități Tehnice ​====+=== Capabilități Tehnice ===
   * ARCore poate urmări simultan până la 20 de imagini. Cu toate acestea, ARCore nu va detecta sau urmări instanțe multiple ale aceleași imagini.   * ARCore poate urmări simultan până la 20 de imagini. Cu toate acestea, ARCore nu va detecta sau urmări instanțe multiple ale aceleași imagini.
   * Fiecare bază de date de imagini augmentate poate reține maxim 1000 de imagini de referință. Nu există nicio limită pentru numărul de baze de date folosite de o aplicație, dar la un anumit moment de timp o singură bază de date poate fi activă. O bază de date poate fi îmbogățită cu imagini la runtime cu condiția ca baza de date să nu depășească 1000 de imagini.   * Fiecare bază de date de imagini augmentate poate reține maxim 1000 de imagini de referință. Nu există nicio limită pentru numărul de baze de date folosite de o aplicație, dar la un anumit moment de timp o singură bază de date poate fi activă. O bază de date poate fi îmbogățită cu imagini la runtime cu condiția ca baza de date să nu depășească 1000 de imagini.
Line 13: Line 14:
   * Toată procesarea are loc pe dispozitiv. Nu este necesară o conexiune la internet pentru a detecta și a urmări imagini. Baza de date de imagini este, la rândul său, locală.   * Toată procesarea are loc pe dispozitiv. Nu este necesară o conexiune la internet pentru a detecta și a urmări imagini. Baza de date de imagini este, la rândul său, locală.
  
-==== Cerințe de Funcționare ​====+=== Cerințe de Funcționare ===
 Pentru a fi detectate, imaginile trebuie: Pentru a fi detectate, imaginile trebuie:
   * Să fie plate (un ambalaj de pe o sticlă nu este garantat că va fi detectat).   * Să fie plate (un ambalaj de pe o sticlă nu este garantat că va fi detectat).
Line 20: Line 21:
  
  
-==== Selectarea Imaginilor de referință ​====+=== 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: 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:
   * Rezoluția unei poze ar trebui să fie de **cel puțin 300 x 300 pixeli**. Imagini cu rezoluții foarte mari nu îmbunătățesc performanța detecției.   * Rezoluția unei poze ar trebui să fie de **cel puțin 300 x 300 pixeli**. Imagini cu rezoluții foarte mari nu îmbunătățesc performanța detecției.
Line 31: Line 32:
 {{ :​irva:​laboratoare:​augmentedimages.png?​750 |}} {{ :​irva:​laboratoare:​augmentedimages.png?​750 |}}
  
-==== Crearea Bazei de Date de Imagini ​====+=== Crearea Bazei de Date de Imagini ===
   * Baza de date salvează o reprezentare comprimată a caracteristicilor extrase din imaginea grayscale a imaginii de referință. Fiecare imagine ocupă aproximativ 6kB.   * Baza de date salvează o reprezentare comprimată a caracteristicilor extrase din imaginea grayscale a imaginii de referință. Fiecare imagine ocupă aproximativ 6kB.
   * Adăugarea unei imagini la runtime într-o bază de date durează aproximativ 30ms.   * Adăugarea unei imagini la runtime într-o bază de date durează aproximativ 30ms.
Line 38: Line 39:
   * Evitați să aveți în baza de date foarte multe imagini nefolosite.   * Evitați să aveți în baza de date foarte multe imagini nefolosite.
  
-==== Crearea Bazei de Date de Imagini ​====+=== Crearea Bazei de Date de Imagini ===
   - Click dreapta în **Project -> Create -> XR -> Reference Image Library**.   - Click dreapta în **Project -> Create -> XR -> Reference Image Library**.
   - Click pe obiectul creat -> **Add Image** din Inspector.   - Click pe obiectul creat -> **Add Image** din Inspector.
Line 50: Line 51:
 {{ :​irva:​laboratoare:​tracked_image.png?​600 |}} {{ :​irva:​laboratoare:​tracked_image.png?​600 |}}
  
-==== Crearea Bazei de Date de Imagini la Runtime ​====+=== 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:  ​ 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:  ​
   - Ștergem vechea bază de date de imagini (în caz că există); deci ștergem componenta **ARTrackedImageManager** dacă există.   - Ștergem vechea bază de date de imagini (în caz că există); deci ștergem componenta **ARTrackedImageManager** dacă există.
Line 109: Line 110:
 </​code>​ </​code>​
  
-==== Optimizarea Image Tracking ​====+=== Optimizarea Image Tracking ===
   * Dacă imaginea nu își va schimba niciodată poziția (de exemplu, un tablou), puteți atașa o ancoră imaginii pentru a crește stabilitatea detectării imaginii.   * Dacă imaginea nu își va schimba niciodată poziția (de exemplu, un tablou), puteți atașa o ancoră imaginii pentru a crește stabilitatea detectării imaginii.
   * Imaginea fizică trebuie să ocupe cel puțin 25% din imaginea produsă de cameră pentru a putea detecta inițial imaginea.   * Imaginea fizică trebuie să ocupe cel puțin 25% din imaginea produsă de cameră pentru a putea detecta inițial imaginea.
-  * Nu utilizați poziția, orientarea și dimensiunea imaginii atâta timp cât **tracking state** NU este **Tracked**. Când o imagine este inițial detectată de ARCore și dimensiunea acesteia nu a fost specificată,​ starea sa va fi **Paused**. Asta înseamnă ca ARCore a recunoscut imaginea, dar nu are încă suficiente informații pentru a putea estima poziția și orientarea sa. +  * Nu utilizați poziția, orientarea și dimensiunea imaginii atâta timp cât **tracking state** NU este **Tracked**. Când o imagine este inițial detectată de ARCore și dimensiunea acesteia nu a fost specificată,​ starea sa va fi **Paused**. Asta înseamnă ca ARCore a recunoscut imaginea, dar nu are încă suficiente informații pentru a putea estima poziția și orientarea sa.
  
 +<note warning>​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ă.</​note>​
 +
 +==== 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 ===
 +  * **O poziție centrală a feței:** Situată în spatele nasului, poziția centrală marchează mijlocul capului utilizatorului;​ folosită pentru a randa asset-uri deasupra capului.
 +{{ :​irva:​laboratoarear:​augmented_faces_center.jpg?​300 |}}
 +  * **Trei poziții de regiune:** Situate în partea stângă a frunții, în partea dreaptă a frunții și în vârful nasului, pozițiile de regiune marchează părți importante ale feței utilizatorului;​ folosite pentru a randa asset-uri pe nas sau în jurul urechilor.
 +  * **Un mesh 3D al feței:** Alcătuită din 468 de vertecși, permite aplicarea de texturi detaliate și adaptabile care urmează cu precizie conturul feței.
 +{{ :​irva:​laboratoarear:​augmented_faces_mesh.png?​300 |}}
 +
 +=== 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:
 +  * Adăugați un obiect **ARFaceManager** în **Hierarchy**.
 +  * **Hierarchy -> click dreapta -> XR -> AR Default Face**.
 +  * Creați un prefab și ștergeți **AR Default Face** din **Hierarchy**.
 +  * Setați prefabul creat ca **Face Prefab** al **ARFaceManager**.
 +
 +=== Camera Frontală ===
 +În plus, cel mai adesea când dorim să augmentăm fețe, dorim să folosim camera frontală a telefonului. Astfel:
 +  * Setați **AR Session -> AR Session -> Tracking mode** la valoarea **Rotation only**.
 +  * Setați **XR Origin -> Camera Offset -> Main Camera -> AR Camera Manager -> Facing Direction** la valoarea **User**. Valoarea **World** reprezintă camera principală a telefonului.
 ==== Tasks ==== ==== Tasks ====
 <note tip> ​ <note tip> ​
-Vom folosi scena **Augmented Images** din scheletul de laborator. Acesta poate fi descărcat de [[https://​github.com/​UPB-Graphics/​IRVA|aici]]. Scriptul necesar pentru rezolvarea laboratorului se află în **Assets->​Scripts**:​ **RuntimeImageLibrary.cs**.+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 [[https://​github.com/​UPB-Graphics/​IRVA|aici]]. Scriptul necesar pentru rezolvarea laboratorului se află în **Assets->​Scripts**:​ **RuntimeImageLibrary.cs**.
 </​note>​ </​note>​
  
Line 124: Line 150:
   - Augmentați imaginile din baza de date creată.   - Augmentați imaginile din baza de date creată.
   - Creați o bază de date la runtime cu minim o imagine și augmentați imaginea.   - Creați o bază de date la runtime cu minim o imagine și augmentați imaginea.
-  - **Bonus:** Adăugați ​un buton pe ecran cu care veți face switch între cele două baze de date. +  ​- Detectați și augmentați o față. 
- +  ​- **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.
- +
-<note warning>​Putem avea o singură bază de date de imagini activă la un moment dat. Deci, când adăugăo nouă bază de date de imagini, trebuie să ștergem ultima bază de date existentă.</​note>​+
irva/laboratoarear/04.1758992907.txt.gz · Last modified: 2025/09/27 20:08 by maria_anca.balutoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0