animacija lica pomoću praćenja lica u video slici

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