Poate că ați auzit despre realitatea augmentată - este un subiect fierbinte în telefonul mobil chiar acum. Aflați despre ce este realitatea augmentată și cum puteți folosi această tehnică în aplicațiile dvs. Android în acest articol introductiv.
Înainte de a începe să discutăm cum să scriem aplicații de realitate augmentată, să facem un pas înapoi și să definim ceea ce este. Wikipedia definește realitatea augmentată ca atare:
"Realitatea augmentată (AR) este un termen pentru o vizualizare directă sau indirectă a unui mediu fizic real, a cărui elemente sunt amplificate de intrări senzoriale virtuale generate de calculator, cum ar fi sunetul sau grafica. Este legată de un concept mai general numită realitate mediată, în care o imagine a realității este modificată (probabil chiar diminuată, mai degrabă decât amplificată) de un calculator. Ca urmare, tehnologia funcționează prin îmbunătățirea percepției curente a realității.
Dezvoltatorii de telefonie mobilă recent au început să folosească tehnici de realitate augmentate prin preluarea informațiilor de la aparatul de fotografiat și suprapunerea imaginilor în timp real, în mod obișnuit conectate cu imaginea pentru a arăta unde este ceva real (cum ar fi o icoană pentru un restaurant) semn virtual sau obiect.
Acest lucru nu înseamnă că nu există alte definiții sau definiții mai slabe sau implementări ale AR în jurul valorii de astăzi. S-ar putea argumenta, de exemplu, că Google Sky Map este o realitate augmentată, chiar dacă nu atrage atenția asupra camerei, totuși nu face altceva decât să facă o aplicație de realitate augmentată (a se vedea figura de mai jos). Nu vă îngrijorați prea mult de definiție și pur și simplu gândiți-vă la oportunitățile pe care aplicațiile dvs. le-ar putea beneficia de "suprapunerea" meta-datelor asupra datelor reale live. De exemplu, eBay a anunțat recent că adaugă o caracteristică de realitate augmentată aplicației lor de modă. Această caracteristică permite utilizatorilor să se vadă cu diferite perechi de ochelari de soare.
În restul acestui tutorial vor fi discutate diferitele aspecte ale realității augmentate și modul în care acestea se aplică aplicației Android. Tutorialul nu se va scufunda în specificul implementării încă. Este puțin dincolo de scopul acestui tutorial introductiv, dar dacă cititorii manifestă interes, putem continua acest drum și putem oferi câteva tutoriale concrete pe această temă.
Vă simțiți deja copleșiți? Poate că aveți date pe care doriți ca alții să le poată explora într-un mediu de realitate augmentată, dar nu doriți să implementați pe deplin sprijinul AR în propriile aplicații. Dacă aspectul tragerii tuturor într-o implementare coerentă pare a fi o depășire a proiectului dvs., ce trebuie să faceți?
Încercați să utilizați un serviciu AR existent, cum ar fi Layar. Acestea oferă clienților platformele Android și iPhone. De exemplu, serviciul Layar permite oricui să adauge date care pot fi afișate pentru utilizatori și să gestioneze detaliile AR. Ca bonus, este, de asemenea, cross-platform, astfel încât datele dvs. vor fi puse la dispoziția clienților lor Android și iPhone.
Acum, că avem o definiție comună a realității augmentate, să discutăm despre modul în care se potrivesc toate împreună și despre fiecare dintre componentele Android care ar putea fi utilizate în aplicația tipică AR.
Implementarea dvs. AR tipică conține două părți principale: datele "live" pe care le amplificăm și datele "meta" folosite pentru augmentare. Pentru un exemplu de suprapunere în lumea reală, datele live pe care le îmbogățim vor fi, de obicei, o combinație de informații în vizor a camerei orientate spre spate, locația curentă și direcția cu care se confruntă dispozitivul. Aceste informații sunt apoi încrucișate cu o listă de date "meta".
De exemplu, dacă vrem să vedem locațiile benzinăriilor în căutarea de vizualizare, serviciul AR trebuie să aibă date de augmentare pentru fiecare stație de benzină, inclusiv latitudinea și longitudinea. Folosind aceste informații și direcția în care indică dispozitivul / camera, putem aproxima locația fiecărei stații de benzină ca o suprapunere pe fereastra de căutare și afișăm o mică pictogramă de combustibil pe sau peste poziția sa.
Sursa de date de augmentare (de exemplu, lista locațiilor benzinăriilor) poate fi orice, dar adesea este o bază de date preîncărcată sau un serviciu web care poate filtra în puncte de interes din apropiere.
Restul implementării AR constă în folosirea API-urilor aparatelor de cameră, API-urilor grafice și API-urilor pentru senzori pentru a suprapune datele de augmentare prin datele live și pentru a crea o experiență îmbogățită plăcută.
Se afișează feedul live din camera Android realitate în realitatea augmentată. Datele camerei sunt disponibile utilizând API-urile disponibile în pachetul android.hardware.Camera.
Dacă aplicația dvs. nu are nevoie să analizeze datele cadru, este adecvată lansarea unei previzualizări în mod normal prin utilizarea unui obiect SurfaceHolder cu metoda setPreviewDisplay (). Cu această metodă, veți putea afișa ceea ce camera înregistrează pe ecran pentru utilizare. Cu toate acestea, dacă aplicația dvs. are nevoie de datele cadru, este disponibilă prin apelarea metodei setPreviewCallback () cu un obiect Camera.PreviewCallback valid.
Doar alimentarea camerei pentru majoritatea aplicațiilor de realitate augmentată nu este suficientă. De asemenea, va trebui să determinați locația dispozitivului (și, prin urmare, utilizatorul acestuia). Pentru a face acest lucru, va trebui să accesați informații despre locația fină sau grosieră, accesate în mod obișnuit prin API-urile disponibile în pachetul android.location, cu clasa LocationManager. În acest fel, aplicația dvs. poate asculta evenimentele de locație și le poate utiliza pentru a determina locurile în care sunt localizate elemente de interes live în legătură cu dispozitivul.
Dacă construiți o aplicație de realitate augmentată, care va analiza fluxul camerei cu viziunea calculatorului (adică acolo unde computerul "vede" lucrurile prin extragerea tuturor informațiilor de care are nevoie din imaginile de intrare) pentru a determina unde să introducă date de augmentare, poate să nu trebuiască să cunoască locația dispozitivului. Utilizarea viziunii pe calculator este, în sine, un subiect profund aflat în prezent în cercetare. Cele mai multe soluții pe care le-am văzut folosesc bibliotecile OpenCV. Mai multe informații despre OpenCV pot fi găsite la wiki-ul OpenCV.
Atunci când datele de localizare nu sunt utilizate, se utilizează adesea un "marker" sau "tag". Acesta este un obiect ușor de recunoscut unde orientarea și scala unui obiect de tras peste el pot fi determinate rapid. De exemplu, AndAR folosește un marcator simplu pentru a desena un cub peste el, ca un test al abilităților AR.
Datele senzorilor sunt adesea importante pentru implementările AR. De exemplu, cunoașterea orientării telefonului este de obicei foarte utilă atunci când încercați să păstrați datele sincronizate cu alimentarea camerei.
Pentru a determina orientarea unui dispozitiv Android, va trebui să utilizați APIS-ul disponibil în pachetul android.hardware.SensorManager. Unele senzori pe care probabil veți atinge includ:
Utilizarea senzorilor pentru a permite utilizatorului să se deplaseze în jurul dispozitivului și să vadă schimbările de pe ecran în raport cu acesta atrage utilizatorul într-un mod imersiv. Atunci când se afișează alimentarea camerei, acest lucru este esențial, dar în alte aplicații, cum ar fi cele care explorează date despre imagini înregistrate (cum ar fi Google Sky Map sau Street View), această tehnică este încă foarte utilă și intuitivă pentru utilizatori.
Bineînțeles, întregul punct al realității augmentate este acela de a atrage ceva peste alimentarea camerei, bine, augmentare ceea ce utilizatorul vede live. Din punct de vedere conceptual, acest lucru este la fel de simplu ca și simpla tragere a ceva peste alimentarea camerei. Cum realizați acest lucru, totuși, depinde de dvs..
Puteți citi în fiecare cadru din feedul camerei, adăugați o suprapunere și trageți cadrul pe ecran (poate ca un Bitmap sau poate ca o textură pe o suprafață 3D). De exemplu, puteți utiliza clasa android.hardware.Camera.PreviewCallback, care permite aplicației dvs. să obțină imagini cadru în cadru.
Alternativ, puteți utiliza un standard SurfaceHolder cu obiectul android.hardware.Camera și trageți pur și simplu peste partea superioară a suprafeței, după cum este necesar.
În cele din urmă, ce și cum desenați depinde de cerințele dvs. individuale de aplicație - există atât API-uri grafice 2D sau 3D disponibile pe Android, mai ales API-urile din pachetele android.graphics și android.opengl.
Deci, de unde provin datele de augmentare? În general, fie veți obține aceste date din propria bază de date, care ar putea fi stocată local sau dintr-o bază de date online undeva printr-un serviciu web sau cloud. Dacă ați preîncărcat date de augmentare pe dispozitiv, probabil că doriți să utilizați o bază de date SQLite pentru căutări rapide și ușoare; veți găsi API-urile SQLite în pachetul and.dataabase.sqlite. Pentru datele de pe web, veți dori să vă conectați la un serviciu web utilizând metodele normale: HTTP și (de obicei) parsarea XML. Pentru aceasta, puteți pur și simplu utiliza clasa java.net.URL cu una dintre clasele de parsing XML, cum ar fi clasa XmlPullParser, pentru a analiza rezultatele.
Realitatea augmentată este un subiect larg care atinge multe aspecte ale dezvoltării Android și multe API-uri. În acest tutorial, ați învățat ce este realitatea augmentată și ce componente Android sunt implicate (cu API Android asociate). Acum puteți combina aceste noi cunoștințe cu ceea ce știți despre SDK-ul Android pentru a îmbunătăți aplicațiile existente sau pentru a crea noi aplicații de realitate augmentate.
Dezvoltatorii mobili Lauren Darcey și Shane Conder au coautorizat mai multe cărți despre dezvoltarea Android: o carte de programare în profunzime intitulată Dezvoltarea aplicațiilor fără fir Android și Sams TeachYourself Dezvoltarea de aplicații Android în 24 de ore. Când nu scriu, își petrec timpul dezvoltând software-ul mobil la compania lor și oferind servicii de consultanță. Acestea pot fi obținute prin e-mail la androidwirelessdev@[email protected], prin blogul lor la androidbook.blogspot.com și pe Twitter @ androidwireless.