SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 1351 ANIMACIJA LICA POMOĆU PRAĆENJA LICA U VIDEO SLICI Jasmina Libovac Zagreb, lipanj 2010. Sadržaj Uvod....................................................................................................................................... 1 1. Face Tracker ...................................................................................................................... 2 1.1. Opis rada programa ..................................................................................................... 2 1.2. Željena funkcionalnost budućeg sustava .................................................................... 5 1.3. Prijedlog i razrada rješenja ......................................................................................... 7 2. Programska izvedba ........................................................................................................... 9 2.1. Korišteni programski alati .......................................................................................... 9 2.1.1. FaceGen 3.4 ......................................................................................................... 9 2.1.2. 3D Studio Max 2010 .......................................................................................... 10 2.1.3. Microsoft Visual Studio 2005 ............................................................................ 12 2.1.4 Visage|SDK......................................................................................................... 12 2.2. Korištene programske klase ...................................................................................... 14 2.2.1. CvisionExampleDoc .......................................................................................... 14 2.2.2. AFM ................................................................................................................... 15 2.2.3. VRMLModel ..................................................................................................... 16 2.3. Rješenje ..................................................................................................................... 17 3. Rezultati ........................................................................................................................... 19 4. Zaključak ......................................................................................................................... 20 5. Literatura .......................................................................................................................... 21 6. Sažetak ............................................................................................................................. 22 Uvod U ovome radu bavit ćemo se jednim od brojnih načina 3D animacije lica i to one pomoću analize video slike. Cilj je iz slike dobiti 3D pozicije glave i karakteristične točke lica. Taj postupak se naziva praćenje karakterističnih točaka lica (eng. Facial Feature Tracking) tj. skraćeno praćenje lica (eng. Face Tracking). Animaciju lika ćemo prikazati na virtualnom liku koji je grafička simulacija čovjeka na računalu koristeći 3D grafiku. Proučit ćemo postojeće metode za praćenje lica i animaciju virtualnih likova te implementirati u sveukupan sustav poboljšanja koja će omogućiti bolje povezivanje dvaju sustava: sustava praćenja lica i sustava animacije. To ćemo postići prvotno iznova modeliranjem našeg virtualnog lika na temelju novih parametara koje smo sami izabrali te njihovu implemantaciju u sami kod. U nastavku ćemo reći nešto više o trenutačnom radu našeg sustava praćenja lica, kako on funkcionira, koje trenutačne parametre pri radu sadrži te s kojim parametrima ih želimo zamjeniti i zašto. Nakon neformalnog opisa osvrnut ćemo se na samu programsku izvedbu našeg zadatka; kako smo implementirali našu početnu ideju, koje smo alate pritom koristili, kojim smo se klasama služili te konačno, do kojega smo rješenja došli. Prikazat ćemo naše rezultate i u konačnici ustvrditi da li smo našim promjenama poboljšali rad samog sustava i došli do željenog rješenja. 1 1. Face Tracker 1.1. Opis rada programa Prije nego što ćemo se upustiti u izradu našeg zadatka, potrebno nam je proučiti kako funkcionira naš trenutačni sustav praćenja lica. Za početak, prvo što nam je potrebno je video koji sadrži osobu čije će se lice animirati našim virtualnim 3D modelom. Video mora biti DivX kriptirana AVI datoteka (eng. AVI file). Preporučena rezolucija je 320x240 ili 640x480. Prvi okvir (eng. frame) videa treba sadržavati lice osobe u neutralnoj poziciji (glava okrenuta prema naprijed, otvorene oči, zatvorena usta, neutralan izraz lica). Pri pokretanju sustava, na prvi okvir videa će se „zalijepiti“ maska koju tracker automatski prilagođava našem licu. No kako bi dobili preciznije rezultate, poželjno je još par minuta se pozabaviti s ručnim prilagođavanjem maske pomoću uređivača oblika (eng. Shape Editor) prikazanog na Slici 1.1. Ovo je nužno kako bi tracker što bolje prikupio karakteristične točke lica kao što su kutevi obrva, kutevi usana, pozicija očiju i sl. Tracker će tada pratiti te točke iz okvira u okvir [1]. Sl 1.1 Shape Editor s početnom maskom Kako ne bi morali svaki puta za istu osobu iznova postavljati masku, bilo u istom ili različitom videu, naš profil lica će biti spremljen za ponovno korištenje i možemo ga pozvati pri ponovnom pokretanju videa u kojem se ta osoba nalazi. Praćenje je također omogućeno i za videa dobivena putem slike uživo iz video kamere. Što se tiče 2 funkcionalnosti takvog trackera princip je isti stoga nećemo ulaziti u detalje oko samih postavki. Osim videa, potreban nam je i 3D virtualni lik na kojem ćemo prikazati animacije pokretane rezultatima face trackera. Na izbor nam stoji učitavanje pretpostavljenog (eng. default) modela ili jedan od drugih koji su nam ponuđeni u sklopu našeg paketa (izgled aplikacije i njenih izbornika prikazan je na slikama Sl. 1.2 i Sl. 1.3). Moramo paziti da model bude učitan prije početka praćenja. Sam model ćemo pronaći u donjem desnom uglu aplikacijskog prozora. Po potrebi možemo ga rotirati, pomicati, zumirati i sl. Sl 1.2 Učitavanje virtualnog modela u face tracker Sl 1.3 Učitani defaultni model lica Učitavanjem i pokretanjem videa, započet će i animacija modela koja bi se trebala u većoj ili manjoj mjeri podudarati s mimikom i pokretima lica našeg subjekta. Pokretanje i primjeri animacije prikazani su na slikama Sl. 1.4 i Sl. 1.5. 3 Sl 1.4 Pokretanje trackinga iz videa Sl. 1.5 Primjeri face trackinga 4 1.2. Željena funkcionalnost budućeg sustava U prethodnom poglavlju opisali smo općeniti rad našeg sustava za praćenje lica. No kako bismo poboljšali njegovu funkcionalnost, trebamo napraviti detaljniji osvrt. Započnimo s našim 3D modelom. Rekli smo da ga je potrebno učitati prije pokretanja trackinga. Stoga on treba biti pohranjen u nekakvu datoteku određenog formata. AFM (eng. Animatable Face and Body Model) format je format za 3D modele virtualnih likova zajedno s njihovim animacijama koje su bazirane na deformiranim verzijama originalnog lika (eng. morph targets). On se sastoji od geometrije virtualnog modela prikazane u standardnom VRML97 formatu i opisa kako će se model ponašati tj. deformirati kao rezultat utjecaja svakog animacijskog parametra. Trenutačni animacijski parametri na kojima se AFM bazira su standardno međunarodno korišteni MPEG-4 FBA (eng. Face and Body Animation) parametri [2]. Upoznajmo se s njima detaljnije. MPEG-4 FBA parametre možemo razložiti na dvije osnovne grupe, a to su: • FAPs (eng. Face Animation Parametars) i • BAPs (eng. Body Animation Parametars). Kao što nam i samo ime kaže, FAPs će se odnositi na parametre animacije lica dok će BAPs animirati tijelo. Pošto u našem face trackeru pratimo samo animacije lica, odmah možemo zaključiti da nam BAPs neće biti potrebni za konstrukciju našeg novog sustava. Za naše lice, MPEG-4 standardi definiraju 66 niskorazinska FAPs-a i 2 visokorazinska FAPs-a. Niskorazinski parametri su bazirani na proučavanju najmanjih mogućih facijalnih pokreta i blisko su povezani s radom mišića. Oni predstavljaju kompletan set osnovnih pokreta lica i dovoljni su za prezentaciju gotovo svih prirodnih izraza lica i govora. Pri visokim vrijednostima tih parametara čak je moguće postići izraze i radnje koje nisu karakteristične za ljude, odnosno koje su preekstremne i uglavnom se pripisuju izrazima lica kojima bi animirali primjerice neki lik iz crtića. Svi niskorazinski FAPs-i su izraženi u sklopu FAPUs-a (eng. Face Animation Parameter Units) prikazanih na slici Sl. 1.6. Ove jedinice su definirane kako bi omogućile jednoliku i konstantnu interpretaciju FAPs-a na bilo kojem virtualnom modelu. Sam rad FAPs-a se bazira na određivanju udaljenosti između 5 ključnih točaka lica koje su definirane unutar MPEG-4 standarda kao FPs (eng. Feature Points). Za svaki FAP je definirano nad kojim FP djeluje, u kojem se smjeru kreće i koji FAPU je korišten kao jedinica za njegovo pokretanje. Sl. 1.6 Face Animation Parametar Units Dva visokorazinksa FAPs-a su izrazi (eng. expressions) i vizemi (eng. viseme). Dva od ukupno 7 definiranih osnovnih izraza mogu biti spojena u jedan podešavanjem intenziteta vrijednosti parametara. Slično kao i kod izraza i vizemi mogu sadržavati dva iz liste od prethodno definiranih 15 vizema koje međusobno spajamo podešavanjem faktora [3]. Sveukupno došli smo do broja od 88 korištenih FAPs-a. Uočavamo da je to jedna nemala brojka korištenih parametara. Stoga instiktivno možemo zaključiti da bi poboljšanje koje smo tražili za naš sustav mogli pronaći upravo u ovom segmentu. Ono što bismo željeli postići je smanjiti broj jedinica koje bismo morali koristiti kako bismo animirali naš model pri trackingu i time bismo pojednostavili naše izvođenje i strukturu. Time naš AFM ne bi bio sastavljen od standardnih MPEG-4 parametara već od nekakvih drugih jedinki koje bismo sami odredili. 6 1.3. Prijedlog i razrada rješenja Uočili smo dio izvođenja našeg programa kojeg bismo mogli poboljšati. Odlučili smo se zamjeniti naše standardne parametre s nekim novima. Sada se trebamo odlučiti koji će to smisleni parametri biti. Otvorit ćemo candide3.wfm datoteku koju sadrži naša Face tracker aplikacija i koja sama po sebi sadrži popise koordinata točaka, imena parametara kojima su one pridružene i po kojima se izvodi animacija te pozicije točaka pri samom obliku lica. Osim već prije navedenih FAPs-a koji su ovdje zastupljeni, uočavamo i neke druge parametre koji bi nam mogli biti korisni, a to su animacijske jedinice (eng. animation units). Ima ih ukupno 14 i prikazani su u Tablici 1.1. Tablica 1.1 Popis animation unita Br. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Opis animation unita Podizanje gornje usne Razvlačenje usana Pomicanje nosa (gore, lijevo, desno) Pomicanje čeljusti po z-osi Pomicanje čeljusti po x-osi Zatvaranje očiju Sužavanje kapaka Spuštanje čeljusti pri otvaranju usta Stiskanje usana Podizanje gornjih kapaka Podizanje vanjskog dijela obrva Podizanje unutarnjeg dijela obrva Spuštanje obrva Spuštanje kuteva usana Vidimo da ovih 14 parametara praktički sadrži sve animacije lica koje su nam potrebne pri animiranju našeg virtualnog modela. Stoga ćemo pokušati implementirati njih umjesto dosadašnjih parametara. Prije same implementacije unutar koda, trebamo pripremiti sve ostale potrebne elemente. Prvi od njih bi bio novi virtualni model koji će podržavati i izvoditi naše nove parametre. Neutralni model glave ćemo izmodelirati koristeći se programom FaceGen (opisan u nastavku), dok ćemo morph targete koji će u ovom slučaju odgovarati našim animacijskim jedinicama ručno izmodelirati u 3D Studio Max-u (također detaljnije opisanom u slijedećem poglavlju) te pripojiti našem modelu. Kada smo gotovi s 7 modeliranjem, spremit ćemo zasebno naše neutralno lice i zasebno svaki morph target na disk u VRML97 formatu. Prisjetimo se, taj format je ključan dio AFM-a potrebnog za rad face trackera. No naš AFM još uvijek ne postoji. Njegovim stvaranjem iz dobivenih VRML-a ćemo se pozabaviti u samom kodu face trackera. Uvid u samu implementaciju ćemo naćiniti kasnije, zasada ćemo se zadržati na neformalnom opisu. Trenutačno stvaranje AFM-a se odvija prema postupku koji sadrži uobičajene parametre. Kako smo mi te parametre zamjenili s novima, očito je da ćemo se morati riješiti starih i na neko mjesto postaviti nove. Znamo da za naše nove parametre postoji 86 mjesta na koje bismo ih mogli inicijalizirati. Odlučili smo preskočiti mjesta visokorazinskih parametra (izraze i vizeme) te naše animacijske jedinice mapirati umjesto prvih 14 niskorazinskih FAP-ova. Sve ostale FAP-ove, bili oni visokorazinski ili niskorazinski, nećemo koristiti. Ovako stvoreni AFM ćemo spremiti na disk i učitati za izvođenje u našem face trackeru. 8 2. Programska izvedba 2.1. Korišteni programski alati 2.1.1. FaceGen 3.4 FaceGen je program za generiranje 3D modela lica napravljen od strane Singular Inversionsa. Koristi se kada je potrebno brzo i jednostavno dobiti model na kojem će se obavljati neki daljnji rad ili jednostavno kad nam je potreban velik broj modela u kratkom vremenu. Moguće je odabrati lica slučajnim odabirom, a proporcionalno s količinom uloženog vremena, možemo dobiti do detalja izmodelirano lice koje sami želimo. Bazira se na setu fiksnih parametara postavljenih u obliku kliznika između minimalnih i maksimalnih vrijednosti kojima određujemo detalje lica, rasu, životnu dob, spol itd. Također imamo odvojene postavke pomoću kojih odmah možemo vidjeti i po potrebi postaviti različite facijalne exspresije osjećaja kao što su ljutnja, sreća, tuga i sl. te izgled izgovora određenih vizema (fonema). FaceGen također podržava opciju generiranja lika iz fotografija [3]. Sl. 2.1 Modeliranje glave u FaceGen-u 9 U našem radu FaceGen smo koristili kako bi izmodelirali izgled našeg neutralnog lica kako je prikazano na slici Sl. 2.1. Model smo pohranili na disk u .3ds formatu kako bismo ga mogli iskoristiti za daljnji rad u 3D Studio Max-u. FaceGen će nam ponuditi da uz neutralno lice sačuvamo i animacije koje dolaze uz model u obliku morph targeta no pošto ćemo ih kasnije sami modelirati, one nam nisu potrebne. Uz sami oblik lica, sačuvani će biti i materijali koji će davati našem licu teksturu (koža, oči, usna šupljina itd.) koje ćemo morati ručno postaviti na naš model u 3D Studio Max-u. 2.1.2. 3D Studio Max 2010 3D Studio Max je programski paket koji se najvećim dijelom koristi za modeliranje, animaciju i prikazivanje (eng. rendering) objekata razvijen od strane Autodesk Media and Entertainment-a. Ima opširne mogućnosti modeliranja, fleksibilnu arhitekturu za dodatke (eng. plug-ins) i namjenjen je samo za korištenje na Microsoft Windows platformi [3]. Modeliranje se u samoj suštini bazira na manipulaciji točaka (vrhova) poligona (eng. vertexs) od kojih su objekti sastavljeni. Naravno, za pomoć pri modeliranju 3D Studio Max nudi mnoštvo različitih opcija od kojih ćemo mi pri izradi našeg rada koristiti samo nekoliko. Započinjemo modeliranje učitavanjem naše neutralne glave dobivene iz FaceGena u 3DS Max. Po potrebi ju uniformno skaliramo, translatiramo i rotiramo kako bi ju bolje smjestili unutar radnog prostora. Vidimo da model tenutačno ne sadrži teksture. Kako bi ih dodali trebamo otići u urednik materijala (eng. Material Editor) i svaki materijal posebno dodati na naš objekt. Trebamo paziti da nam je uključena opcija Show Standard Map in Viewport kako bi materijali koje smo dodali odmah bili i vidljivi. Dobivamo model prikazan na slici Sl. 2.2. Zatim kloniramo naš cijeli model. Na kopiji modela ćemo ustvari raditi modeliranje animation unita tj. zadanog pomaka točaka na licu. Mi ne znamo točne krajnje koordinate točaka koje pomičemo stoga ih modeliramo odokativno prateći njihov izgled u face trackeru. Konačno, ako smo zadovoljni izgledom našeg novog modela, na početni model iz kojeg smo napravili kopiju „zaljepimo“ naš animation unit. Ovime stvaramo naš morph target. To ćemo učiniti za svaki animation unit slijedeći niz koraka: 1. Označimo mišem neutralno lice, 2. U izborniku Modify izabrat ćemo opciju Morpher, 10 3. U novootvorenom izborniku ćemo izabrati Pick Object from Scene te kliknuti na naš izmodelirani animation unit. Sl. 2.2 Model lica u 3DS Maxu u neutralnoj poziciji Kako bi testirali valjanost i izgled morph targeta pomicat ćemo kliznik koji mu je pridružen po vrijednostima od 0 do 100. Ako smo zadovoljni, obrišemo izmodelirani klon tako da nam ostane samo originalni objekt sa pridruženim morph targetom i spremimo naš rad na disk u VRML97 formatu. Za svaki animation unit posebno ćemo ponavljati gore opisani postupak. Par izmodeliranih animation unita u njihovoj maksimalnoj ili približno maksimalnoj vrijednosti prikazano je na slici Sl. 2.3. Sl. 2.3 Prikaz animation unita (s lijeva na desno) 13, 2 i 7 (vidi tablicu Tablica 1.1) 11 2.1.3. Microsoft Visual Studio 2005 Microsoft Visual Studio 2005 razvojno okruženje sadrži sve alate potrebne za pisanje, uređivanje (eng. editing), prevođenje (eng. compiling), povezivanje (eng. linking) i ispravljanje (eng. debugging) programa. Razvijeno je od strane Microsofta. Može biti korišteno za razvijanje konzolaških i grafičkih korisničkih aplikacija, internet stranica, internet aplikacija i dr. Sastoji se od izbornika, alatnih traka (eng. toolbar), statusne linije (eng. status line), prozora projekta, prozora za uređivanje teksta i prozora s porukama. Preko alatnih traka možete, klikom na lijevu tipku miša iznad određene ikone, obaviti neke često korištene operacije. Na statusnoj liniji pojavljuju se poruke o statusu razvojnog okruženja. U prozoru projekta možete vidjeti otvorene projekte i datoteke. Prozor za uređivanje teksta služi kao tekst procesor za pisanje izvornog koda programa. U prozoru poruka (eng. output) pojavljuju se poruke vezane uz operacije koje razvojno okruženje obavlja (prevođenje, pretraživanje datoteka i sl.). Na ekranu može biti otvoren samo jedan prozor poruka i jedan prozor projekta, dok prozora za uređivanje teksta može biti više. Pomoću izbornika moguć je osnovni pristup svim funkcijama razvojnog okruženja [4]. Mi ćemo MS Visual Studio 2005 koristiti kako bi izmjenili trenutačni kod face trackera da odgovara našoj novoj funkcionalnosti. Pomoću njega ćemo proučiti već napisani kod, odrediti koje su izmjene potrebne, napisati ih, prevesti novi program, po potrebi ispraviti greške te pokrenuti alikaciju. 2.1.4 Visage|SDK Visage|SDK (engl. Software Development Kit) je skup programskih alata švedske tvrtke Visage Technologies. Služi za razvoj aplikacija u jeziku C++ i na Windows platformi koje koriste animacije lica i tijela u realnom vremenu. Temeljen je na međunarodnom MPEG-4 FBA standardu. Sastoji se od skupa biblioteka koje omogućavaju sve potrebno za izvođenje animacija lica i tijela. Pruža već gotova rješenja i smanjuje vrijeme i trud potreban za izradu aplikacija u kojima se pojavljuju virtualni likovi [5]. Kompatibilan je s drugim 3D alatima kao što je 3DS Max. Neke od važnijih mogućnosti Visage SDK-a su: • Sinkronizacija usana virtualnog lika u relanom vremenu, • Animacija virtualnih likova u realnom vremenu pomoću sinteze govora, • Stvaranje AFM-ova, 12 • Animiranje likova koristeći MPEG-4 FBA parametre, • Mogućnost implementacije vlastitih interaktivnih animacija itd. U sklopu Visage|SDK-a se nalazi naša Face Tracker aplikacija sa svim pripadnim kodom, virtualnim modelima, videima po kojima će se animacija vršiti, potrebnim knjižnicama te svom dokumentacijom za pomoć pri radu. 13 2.2. Korištene programske klase U nastavku ćemo detaljno opisati tri programske klase te njihove metode koje su bile korištene kako bismo izvršili naš zadatak. Te tri klase su: • CvisionExampleDoc klasa sadržana u VisionExampleDoc.cpp i pripadajućoj .h (eng. header) datoteci, • AFM klasa, • VRMLModel klasa. 2.2.1. CvisionExampleDoc CvisionExampleDoc klasa je glavna klasa koja implementira samu okosnicu i rad face trackera. Navest ćemo koje metode sadrži te njihov kratak opis. Unutar nje su uključene (eng. include) i druge klase odnosno njihove .h datoteke potrebne za njen rad u čije detalje nećemo ulaziti. • void CVisionExampleDoc::OnPlayVideo() Ovo je glavna funkcija za stvaranje animacije iz videa koji sadrži korisnikovo lice okrenuto prema naprijed. Sama animacija koju izvodi virtualni lik je k tome i ukodirana u .fba formatu. Funkcija se poziva kada se iz izbornika Tracking izabere Track From Avi Video (Sl. 1.4). • void CVisionExampleDoc::OnPlayCam() Glavna funkcija za stvaranje animacije iz video izvora koji dolazi iz video kamere koja je spojena na računalo. Poziva se kada iz izbornika Tracking odaberemo Track From Cam (Sl. 1.4). • void CVisionExampleDoc::loadFaceModel(char *faceModelName) Funkcija koja će učitati model lica koji odaberemo te ga poslati na iscrtavanje (eng. rendering). Kao parametar prima ime našeg modela, a poziva se kada iz izbornika Animation izaberemo Load Face Model (Sl. 1.2). Unutar nje ćemo stvoriti AFM potreban za tracking te ga spremiti u varijablu faceModel ( AFM* facemodel; ). • void CVisionExampleDoc::OnAnimationLoaddefaultfacemodel() 14 Funkcija koja pri pozivu iz izbornika Animation->Load Default Face Model (Sl. 1.2) učitava pretpostavljeni model lica koji se koristi za animaciju, točnije FGMed.afm. • void CVisionExampleDoc::Notify(void *vt, FBAPs* fbaps, FDP* fdps, CodingParameters *cp, long pts) Klasa VisageTracker2 zove ovu funkciju jedanput za svaki video frame i predaje joj rezultate trackinga. Funkcija koristi te podatke da ažurira animacijske parametre na modelu lica, a zatim da iscrta model. • void CVisionExampleDoc::OnTrackingStop() Funkcija koja zaustavlja rad trackera. Poziva se odabirom iz izbornika Tracking->Stop. 2.2.2. AFM AFM klasu, kao što joj i samo ime kaže, koristimo za stvaranje .afm datoteke, njeno učitavanje i spremanje, omogućava pristup geometriji modela te u konačnici omogućava i animiranje samog modela. Ona sadrži mnoštvo različitih metoda i tu ćemo navesti samo par najbitnijih kako bi razumjeli njen osnovni rad. • AFM(char *fname); Stvara AFM čitanjem virtualnog modela lika iz datoteke. Provjerava se extenzija datoteke da se utvrdi da li je format datoteke podržan. Po početnim postavkama samo .afm datoteke su podržane. Ostali formati mogu biti podržani daljnjom implementacijom. Parametar fname sadrži ime datoteke koja sadrži AFM koji se teba učitati. • AFM::AFM(VRMLModel *m0,VRMLModel **m,int *fv,float _coordSensitivity); Stvara AFM model iz modela neutralnog lica i seta morph targeta u VRML formatu. Morph targeti moraju imati jednaku topologiju kao neutralni model, samo pozicije vertexa mogu biti izmjenjene. Parametar m0 će sadržavati naš neutralni model, parametar m morph targete, parametar fv FAP vrijednosti za svaki morph target (za vizeme i izraze on se ne koristi) te parametar _coordSensitivity će označavati osjetljivost koordinata pri procesiranju morph targeta, odnosno koliko udaljen mora biti određeni vertex u morph targetu od tog istog vertexa u neutralnom modelu kako bi tracker zabilježio promjenu. 15 • bool read(char *fname); Čita AFM iz datoteke. Vraća true ako je model uspješno učitan ili false ako nije. Parametar fname sadrži ime datoteke. • void AFM::write(char *fname); Upisuje AFM u datoteku. Parametar fname sadrži ime datoteke. 2.2.3. VRMLModel VRMLModel klasa je bazirana na strukturi podataka koja je inspirirana VRML97 formatom, no dodatnom implementacijom može podržavati i neke druge formate. Struktura podataka je u obliku grafa koji sadrži poligone od kojih se sastoji naš virtualni lik zajedno sa teksturama i materijalima. Hijerarhija samog grafa je u obliku stabla čvorova koji pristupaju poljima podataka omogućavajući pristup poligonima i transformacijskim podacima. Sadrži sučelja za čitanje i pisanje datoteka te prikazivanje i animaciju 3D modela. Prikazat ćemo samo metode za stvaranje VRML modela. • VRMLModel::VRMLModel(); Stvara prazan VRML model. • VRMLModel::VRMLModel(VRMLModel *m); Stvara novi VRML model kopirajući m. Parametar m predstavlja model koji želimo kopirati. • VRMLModel::VRMLModel(char *fn); Stvara novi VRML model čitajući ga iz datoteke. Trenutačno je podržan samo pretpostavljeni VRML97 format. Parametar fn je ime datoteke koji želimo pročitati. 16 2.3. Rješenje Napravili smo teorijski opis buduće funkcionalnosti našeg sustava, naveli smo alate kojima ćemo ostvariti implementaciju te smo proučili klase i metode s kojima ćemo baratati unutar samog koda. Pa pogledajmo sada kakvo smo rješenje dobili. Naš dodatak kodu ćemo očito smjestiti u CvisionExample klasu pošto se od tamo pokreće cijela face tracker aplikacija, a kako bismo izveli i naš dio koda trebamo ga odnekud pokrenuti. Smjestit ćemo ga unutar loadFaceModel(char *faceModelName) funkcije. Umjesto uobičajenog stvaranja AFM-a: faceModel = new AFM(faceModelName); mi ćemo naš model stvarati pomoću prije navedene metode AFM::AFM(VRMLModel *m0, VRMLModel **m, int *fv ,float _coordSensitivity);. Kako bismo na taj način stvorili AFM moramo imati za nju potrebne parametre. Stoga ćemo inicijalizirati potrebne varijable NeutralFace za neutralni model i MorphTarget za polje morph targeta oblika VRMLModel , polje cjelobrojnih vrijednosti fv i konstantu coo za osjetljivost koordinata koju ćemo postaviti na realnu vrijednost 0.1. VRMLModel *NeutralFace; VRMLModel *MorphTarget[91]; int fv[91]; float coo = 0.1f; Neutralno lice ćemo učitati sa diska pri stvaranju novog VRMLModela kojeg ćemo pridružiti varijabli NeutralFace. Sljedeće moramo popuniti naše polje morph targeta. Kao što smo prethodno odlučili, animation unite ćemo mapirati na prvih 14 niskorazinskih FAP-ova. Stoga ćemo u jednoj for petlji prvih 22 (15 vizema +7 izraza) postaviti na nulu te njihov fv faktor na -1. 17 for (i=0; i<22; i++){ MorphTarget[i] = 0; fv[i] = -1; } Jednakim principom u sljedećoj petlji ćemo učitati naše VRML morph targete u polje i postaviti njihovu fv vrijednost na 1. Ostatak nekorištenih FAPova ćemo također postaviti na nulu i njihove fv na -1. Sada imamo sve potrebne parametre stoga možemo pozvati našu metodu da stvori novi AFM. faceModel = new AFM(NeutralFace, MorphTarget, fv, coo); Nakon što je stvoren pozovemo metodu AFM::write(char *fname) koja će nam fizički stvoriti datoteku na dijelu diska kojeg odredimo. Model se tada prosljeđuje na iscrtavanje na ekran. Time je programska modifikacija aplikacije završena. 18 3. Rezultati Da bismo bili sigurni da su naše izmjene uspješno izvršene trebamo izvršiti testiranje nad samom aplikacijom. Kada smo završili sa izmjenama na kodu i uspješno prošli fazu prevođenja i ispravljanja pokrenut ćemo face tracker aplikaciju. Iz izbornika Animation ćemo izabrati opciju Load Face Model pošto se naš dio koda nalazi unutar metode koja implementira učitavanje virtualnog modela u face tracker. Otvorit će se preglednik koji će nas uputiti na učitavanje željenog .afm-a. Preglednik će početno biti postavljen u pretpostavljeni direktorij u kojem se već nalaze neki primjeri AFM-ova. Pošto naša metoda kao argument zahtjeva da joj se preda ime neke AFM datoteke, izaberemo bilo koji od već postojećih .afm-ova. Ne moramo se brinuti da će doći do učitavanja pogrešnog modela jer unutar same metode smo zamjenili sami način stvaranja AFM objekta, odnosno, on se ne stvara uz pomoć imena datoteke već od novih parametara zadanih unutar same funkcije. Učitavanje modela pri ovoj implementaciji se izvršava nešto dulje od originalne metode jer ona sada sadrži veći i kompliciraniji kod. Nakon nekog vremena virtualni model će se kao što je i pretpostavljeno pojaviti u donjem desnom uglu Prvo što primjećujemo je da naš model ne sadrži teksture koje smo mu nadodali u 3D Studio Maxu. Problem se može odnositi na loše spremanje našeg modela u VRML97 format ili neku pogrešku u samom kodu pri stvaranju modela koju nam naš ispravljač nije dojavio. Od banalnijih stvari razlog bi mogao biti i lokacija naših materijala unutar određenih direktorija. Probavši ispraviti ovaj problem, trenutačno nismo došli do konkretnog rješenja. No krenimo dalje provjeriti sami rad trackinga. Iz izbornika Tracking izaberemo Track from Avi Video. Ponovno će nam se pojaviti preglednik koji će nam pokazivati na pretpostavljeni direktorij s videima. Izaberemo bilo koji od njih i pokrenemo ga. Pošto smo već prije za svaki od tih videa podesili masku na početni okvir lica i spremili postavke, neće nam se pojaviti Shape Editor već će se video odmah pokrenuti. Prvo što primjećujemo je da nam se maska lica zarotira po osima i „odleti“ u gornji desni ugao gdje i ostane do kraja trackinga. Virtualni lik u uglu nestaje i pojavljuje se, dolazi do mnoštvo trzanja i gubitaka slike i animacija se u takvim uvjetima ne odvija. Radilo se na uklanjanju tih pogrešaka dodavanjem još nekih metoda, mijenjanjem postojećih, redefiniranjem potrebnih varijabli, no trenutačno je projekt još uvijek u fazi izgradnje i poboljšanja te će se na njemu i dalje raditi. 19 4. Zaključak Kada smo započeli s radom na face trackeru bili smo suočeni s programom koji je koristio AFM format s 88 različitih parametara kako bi funkcionirao. Na samom izvornom kodu, za čiji je rad bilo potrebno detaljnije proučiti klase AFM, VRMLModel te CvisonExample, manjim izmjenama smo trebali postići da se stvori novi AFM koji će zanemariti princip rada na dosadašnjim MPEG-4 parametrima i umjesto njih upogoniti tracker sa samo 14 novih animacijskih jedinica. U skopu tih izmjena, uz pomoć alata za modeliranje (FaceGen, 3D Studio Max) kreirali smo novi virtualni model u njegovom neutralnom obliku i zasebno model svakog animation unita kao morph targeta. Kao rezultat smo trebali dobiti korisniku identičan rad aplikacije, no koji koristi pojednostavljeni ili bar izmjenjeni način rada face trackera. 20 5. Literatura [1] Visage Technologies, FaceTracker2 Function Tutorial, 13.1.2010. [2] Visage Technologies, AFM File Format Reference [3] Visage Technologies, MPEG-4 FBA Overview [4] Wikipedia, lipanj 2010. http://en.wikipedia.org [5] Tehničko veleučilište u Zagrebu, Vježbe iz kolegija Osnove programiranja 2009./2010. Upute za uporabu MS Visual Studio [6] Visage|SDK documentation 21 6. Sažetak U ovom radu osvrnuli smo se na postupak čiji je cilj iz slike dobiti 3D pozicije glave i karakteristične točke lica. Taj postupak se naziva praćenje karakterističnih točaka lica tj. skraćeno praćenje lica. Aplikacija učitava datoteku AFM (eng. Animatable Face and Body Model) formata u kojoj su sadržani svi potrebni podaci o virtualnom liku koji će simulirati facijalne pokrete iz našeg videa. Parametri po kojima se animacija odvija su standardni MPEG-4 parametri. Mi smo naš sustav modelirali tako da se umjesto njih naš model animira uz pomoć animation unita, njih 14. Mapirali smo ih umjesto 14 niskorazinskih FAP - ova (eng. Face Animation Parametars), a sve ostale parametre smo postavili na nulu. Izmodelirali smo i novi virtualni model lica sastavljen od 14 morph targeta koji predstavljaju naše animation unite. Njih smo pohranili u VRML97 formatu. Konačno, iz njih i našeg neutralnog lica stvorili smo novi AFM za rad u face trackeru. Pri izradi rada smo se koristili određenim programskim alatima kao što su FaceGen za modeliranje lica, 3D Studio Max za izradu morph targeta, Microsoft Visual Studio za izmjenu programskog koda te smo sve resurse potrebne dobivali iz Visage|SDK programskih alata. In this paper we took a closer look at the procedure required to get a 3D head position and the characteristic facial points from a video picture. This procedure is called Facial Feature Tracking or short Face Tracking. The application loads an AFM (Animatable Face and Body Model) which contains all of the necessary data for a virtual character who will simulate facial movements from our video. The parametars that are used for animation are standard MPEG-4 parametars. We modeled our system to use, instead of standard parametars, animation units, 14 of them, to animate our model. They were placed (maped) instead of the 14 low-level FAPs (Face Animation Parametars) and the rest of the parametars weren't used. We also modeled a new virtual face model made out of 14 morph targets that represent our animation units. They were saved in a VRML97 format. Finally, from them and our neutral face model we created a new AFM for our face tracker. In the process of making adjustments to the tracker we used certain tools like FaceGen for face modeling, 3D Studio Max for making morph targets, Microsoft Visual Studio for editing programe code and Visage|SDK for all the resources needed. 22
© Copyright 2024 Paperzz