Mérnöki tervezés beszámoló
Dolgozat címe:
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Konzulens neve: Takács György
Hallgató neve: Oroszi Balázs Leadás dátuma: 2007. december 14.
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
2
Tartalomjegyzék I.
Absztrakt.....................................................................................................................................3
II.
Előzmények.................................................................................................................................3
III.
Röviden az MPEG-4 pontokról...................................................................................................4
IV.
A korábbi munka eredményeinek összefoglalása.......................................................................5
V.
A mérnöki feladat megfogalmazása............................................................................................6
VI.
Létező megoldások vizsgálata....................................................................................................6 Lucia.......................................................................................................................................7 XFace......................................................................................................................................7 Johnnie Talker........................................................................................................................7
VII. Háromdimenziós megjelenítés – 3D motor................................................................................8 Tulajdonságok........................................................................................................................9 Szoftveres rajzoló alrendszer (SoftwareRenderDevice)...............................................9 OpenGL rajzoló alrendszer (OpenGLRenderDevice)................................................10 Hierarchikus modell-struktúra (Scene Graph)............................................................10 3D animáció.........................................................................................................................11 VIII. Háromdimenziós fejanimáció...................................................................................................12 A fejmodell...........................................................................................................................12 Az animáció alapjai..............................................................................................................14 A tartópontok és hatóköreik mozgatása FAP-okkal.............................................................17 FAP sorozat előállítása (kódolás)...............................................................................17 FAP sorozat alkalmazása (dekódolás)........................................................................17 Az elkészült fejanimációs rendszer......................................................................................18 IX.
Kapcsolat az „IPTV siketek számára” projekttel......................................................................19 A DirectShow keretrendszer................................................................................................19 Szűrő-gráfok készítése ill. tesztelése..........................................................................21 A projekt megvalósítása.......................................................................................................21
X.
Jövőbeni feladatok....................................................................................................................22
XI.
Összefoglalás............................................................................................................................23
XII. Köszönetnyilvánítás..................................................................................................................24
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
3
I. Absztrakt A virtuális fej- és testanimáció az utóbbi évtizedekben folyamatos fejlődésen ment keresztül. Elég csak az animációs filmekre, játékokra vagy Internetes virtuális lényekre gondolnunk. Ezek szerepköre elsősorban a szórakoztatás köré összpontosul. Az egyetem célkitűzése, a szórakoztatást háttérbe szorítva, egy olyan szabványos rendszer kidolgozása, mely alkalmas a hallássérültek beszédkommunikációjának fejlesztésére. Ezt egy olyan beszélőfej működtetésével kívánja megoldani, mely képes a beszéd-animáció konverzióra, vagyis közvetlenül a beszédjelből állítja elő a szájállásokat, hogy arról a siket illetve nagyothalló emberek a szájmozgást le tudják olvasni. Ennek megvalósítása már elkezdődött, a korábbi években készült fejanimációs rendszer keretében. Az én feladatom ezen rendszer tanulmányozása, javaslattétel a továbbfejlesztésére, az új tulajdonságok és képességek implementációja valamint, amennyiben lehetséges, integrációja a meglévő rendszerbe. Amennyiben ez nem lehetséges, úgy új rendszer kidolgozása. A továbbfejlesztés elsősorban a videófeldolgozás módját érinti, valamint egy három dimenziós megjelenítő kidolgozását jelenti.
II. Előzmények Az önálló laboratórium keretében megismerkedtem a karon folyó munkálatokkal, mely egy komplett, MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer előállítását tűzte ki célul. Egy korábbi beszámoló [1] alapján megtudhattuk, hogy mi a rendszer elsődleges célja. Röviden: „konkrét célkitűzésünk, hogy a mobiltelefon által vett hangot a hallássérültek számára is érthetővé tegyük”. A beszámoló szerint végzett felmérés alapján erre lenne igény. Ezt a feladatot a hang „megjelenítésével” lehet elérni oly módon, hogy egy kirajzolt fej segítségével visszaadjuk a beszélő szájmozgását, melyről a siket egyén képes leolvasni és megérteni a mondott szöveget. Időközben a mobiltelefonos alkalmazás fejlesztése lassabb ütemben haladt a vártnál, így nagyobb hangsúly került a PC-s alkalmazás fejlesztésére. Az önálló laboratóriumi munka keretében az előző rendszert, a videó feldolgozás területén fejlesztettem tovább. Mostani féléves tevékenységem más szakterületre, a háromdimenziós megjelenítés, valamint az animáció területére koncentrálódott.
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
4
III. Röviden az MPEG-4 pontokról [2]Az MPEG (Moving Picture Experts Group) szabványok fő célja a hang és videó jelek tömörítése. A tömörítés alapvető követelményei a hatékonyság és élethűség. Az MPEG-4 szabványt nem csak nagy videófolyamok tömörítésére alakították ki, hanem figyelembe vettek olyan multimédiás alkalmazásokat is, mint 3D-s jelenetek, animációk, szintetizált hangok, képek, szövegek, grafikák külön vagy akár együttes kezelése és élethű megjelenítése. Az MPEG-4 szabvány [3] egyik legösszetettebb része a fej és az emberi test megjelenítése és mozgatása (FBA - Face and Body Animation). Az FBA-ra vonatkozó szabványrész leírja az arc és a test alakjának és mozgásának kódolási alapelveit. Az FBA egyik legfontosabb tulajdonsága tehát, hogy nem adja meg pontosan a kódolási és a dekódolási eljárást, csak a küldött adat formáját és értelmezését. Az MPEG-4 szabvány az arc modelljét az arc normál állapotával írja le, megad több tartópontot (Feature Point - FP) és az arc mozgását leíró paramétereket (Facial Animation Parameter - FAP), mely lényegében a normál archoz képesti elmozdulást jellemzi. Az elmozdulások méretét és arányát a szabvány szerint mindig az emberi arcra jellemző alapvető méretek alapján fejezi ki. A szakirodalomban ennek elterjedt rövidítése FAPU (Face Animation Parameter Unit). A FAPU-kat az arc olyan jellegzetes távolságaiból kell számolni, mint például a szemgolyók távolsága vagy a száj szélessége. A szabványban 84 tartóponttal írják le az arcot (Kép 1).
Kép 1: MPEG-4 pontok
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
5
A tartópontok fő feladata, hogy referenciaként szolgáljanak a FAP-ok számára. A FAP-ok által leírt összetett mozgások mindig a normál tartópontok által leírt fejre vonatkoznak. A normál fej csukott szájat és semleges arckifejezést jelent. Vannak olyan FP-k is, melyekre egy FAP sincs közvetlen hatással (pl.: az orr szélei). Ezeket mindössze az arc alakjának meghatározására használják. A feladat szempontjából számunkra a teljes MPEG-4 pontkészlet csupán egy része szükséges. Az elkészített rendszer által detektált pontok az alábbi ábrán láthatók: Kép 2
Kép 2: Felhasznált MPEG-4 pontok
IV. A korábbi munka eredményeinek összefoglalása Az előző éves, önálló laboratóriumi feladatom: egy videokamerával felvett beszélő személy arcáról a fejmodell animálásához szükséges jellemző paraméterek detektálása további feldolgozás számára. A feladat sikeresen teljesült. Itt röviden összefoglalom az eljárást, valamint az eredményeket. A kifejlesztett módszer az ajak kontúrvonalának detektálásán alapszik. Felvételeket készítettünk jeltolmácsokkal. Mindegyik felvételen egy beszélő látható. A felvétel digitális kamerával készült, állított helyzetben 576 * 720-as felbontásban, 25 fps (képkocka/másodperc) képkockasebességgel. A kép a beszélő arcára van közelítve (Kép 3). A felvétel elkészítése előtt az ajkakat kipirosítottuk, valamint sárga festékkel 2 MPEG-4 pontot is felfestettünk (9.3, 2.1). Színkiemeléssel kinyertem az ajkak pozícióját, majd a korábbi beszámolómban ([4]) részletesen leírt detekciós módszerrel meghatároztam a számunkra szükséges MPEG-4 pontok helyzetét: Kép 4
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
6
A detektált pontokat összekötve és kitöltve, az elkészített megjelenítő modullal, visszarajzoltam az eredeti videóra. Az eredményt a Kép 5 mutatja.
Kép 3: A felvétel
Kép 4: Színkiemelés, detekció
Kép 5: Megjelenítés
A videófeldolgozás az Avisynth keretrendszer felhasználásával történt. A feldolgozó algoritmusokat a keretrendszerhez készített, C++ nyelven írt modulokként valósítottam meg. A kinyert pontok tárolására fájlformátumot definiáltam, melyhez író/olvasó modul készült. Ez által lehetséges a projekt más területein dolgozók számára is a detektált pontokhoz való gyors és egyszerű hozzáférés.
V. A mérnöki feladat megfogalmazása Az idei mérnöki tervezés feladatom elsősorban egy háromdimenziós fejanimációs program elkészítése. Mivel az előző két féléves munka eredményei kielégítőek voltak, és a létrejött adatbázis jól használhatónak bizonyult, így a videófeldolgozás további fejlesztésen nem ment keresztül. Az animációs program készítése közben, kapcsolódva az egyetemen folyó hangfeldolgozási projekttel, igény jelentkezett egy picture-in-picture módban működő, közvetlen speech-to-animation konverziót végző szoftver elkészítésére, siketek számára. Ehhez szükségessé vált egy hardveres gyorsítás nélküli megjelenítő írása. Ennek megvalósítását a továbbiakban ismertetem.
VI. Létező megoldások vizsgálata A fejanimációs program ill. a háromdimenziós megjelenítő elkészítése elengedhetetlen korábbi, mások által készített, lehetőleg MPEG-4 szabványos megvalósítások megtekintése, tanulmányozása nélkül. Három programot ill. forráskódjukat vizsgáltam meg tüzetesebben:
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
7
●
A Lucia, olasz fejlesztésű MPEG-4 szabványos fejanimációs programot
●
Az Xface nyílt forrású MPEG-4 szabványos fejanimációs ill. FDP szerkesztő programot
●
A Johnnie Talker, Srancsik Bálint PPKE hallgató által, az önálló laboratórium keretében
készített fejanimációs programot Az vizsgálat eredményét, valamint az animációs program elkészítésének módját alább ismertetem.
Lucia A Lucia [5] egy kizárólag OpenGL megjelenítéssel rendelkező általános MPEG-4 FAP lejátszó. Fejlesztése sokrétű, a hangfeldolgozástól az animációig minden területet lefed. Mivel azonban a modell túl szorosan kapcsolódik a megjelenítőhöz (a modell forráskódba integrált), így szétválasztani nem lehetséges. Csak OpenGL megjelenítésre képes, a fejmodell nehezen cserélhető, valamint forráskódja következetlenül van megírva, így nem használhattam fel a projektben.
XFace Az XFace [6] egy nyílt forrású, OpenGL megjelenítésű, MPEG-4 szabványos FAP lejátszó ill. FDP szerkesztő. Alkalmas különféle modellek betöltésére, valamint a modellen levő FDP-k szerkesztésére, az FDP-k arcmozgatáshoz szükséges hatóköreinek meghatározására. A forráskód jól strukturált, az OpenGL megjelenítőt viszonylag egyszerű lecserélni saját megjelenítőre. Sajnos azonban még így sem lehetséges különválasztani a megjelenítő ill. animációs részt a grafikus kezelőfelülettől.
Johnnie Talker Srancsik Bálint, a PPKE hallgatójának az önálló laboratórium tárgy keretében készített MPEG-4 FAP lejátszója. A program a céljának kiválóan megfelel, de nem általános jellegű. Szorosan integrált, mind a megjelenítő, a modell és a grafikus felület együttesen („kódba égetett”). Részekre választani nem lehetséges. Felmerült a program továbbfejlesztése, de a kód elemzése után úgy láttam, hogy több időt venne igénybe a kód átstrukturálása, mint egy teljesen új megjelenítő készítése.
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
8
VII. Háromdimenziós megjelenítés – 3D motor Mint említettem, szükségessé vált a fejlesztés közben, együttműködve a hangfeldolgozást végző kollégákkal, egy olyan megjelenítő elkészítése, mely képes beszélő fejet valós időben kirajzolni egy PC-n futó élő televíziós adásra (erről bővebben a beszámoló végén). Emiatt, és előreláthatóan a későbbi projektek miatt is előfordulhat, hogy nem vehetünk igénybe hardveres gyorsítást. Rövidebb megfontolás után arra a következtetésre jutottam, hogy nem támaszkodhatunk kizárólag a hardveres gyorsítás (OpenGL) nyújtotta kényelemre, szoftveres megjelenítés szükséges. Emellett fontosnak tartottam, hogy amennyiben mégis rendelkezésre áll 3D gyorsító hardver, úgy ott az OpenGL gyorsítást vegyük igénybe. Ennek következményeként született meg egy hibrid, mind OpenGL mind pedig szoftveres megjelenítésre is képes 3D motor. Alapvető fontosságúnak tartottam, hogy a megjelenítés módja teljesen független legyen attól, hogy éppen mit akarunk megjeleníteni. Természetesen bizonyos megkötéseket tennünk kell, de alapvetően ne legyen integrálva a fejanimációs kód a megjelenítő kóddal. A motor C++ nyelven íródott, objektum-orientált stílusban. Szoftveres ill. OpenGL rajzoló alrendszerrel rendelkezik, melyek az absztrakt RenderDevice osztályból származnak le. Ennek előnye, hogy a rajzoló alrendszer futásidőben választható. A motor kizárólag háromszög-listából álló modelleket képes rajzolni, pont (Kép 6), vonalháló (Kép 7) ill. kitöltött (Kép 8) módban egyszerű textúrázással.
Kép 6: Pont rajzolás
Kép 7: Vonalháló rajzolás
Ezen rajzolási módokat mindkét rajzoló alrendszer implementálja.
Kép 8: Kitöltött rajzolás (textúrázott)
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
9
Tulajdonságok A motor jellemzőbb általános tulajdonságai/képességei: ●
eszköz-független rajzolás (jelenleg: OpenGL, Software)
●
kamerakezelés
●
hierarchikus modell-struktúra (scene-graph)
●
pont, vonal, kitöltött (textúrázott) rajzolási mód
●
hátlapritkítás (back-face culling), mindkét rajzoló alrendszerben
●
nézetcsonk ritkítás burkoló térfogatokkal (view frustum culling with bounding volumes)
●
nézetcsonk vágás (view frustum clipping)
A lényegesebbeket alább bővebben is kifejtem. Szoftveres rajzoló alrendszer (SoftwareRenderDevice)
A szoftveres rajzoló saját rajzfelületet foglal a memóriában, erre végzi a háromszögek rajzolását, majd az SDL könyvtár segítségével jeleníti meg az eredményt a képernyőn. Mivel nem találtam használható valamint könnyen integrálható szoftveres 3D megjelenítő komponenst, így a háromszögkitöltő rutinokat magam írtam meg. A kellő sebesség elérése érdekében a háromszögek kitöltése integer, a textúrázás pedig lebegőpontos (float) aritmetikával történik, ezáltal teljes mértékben kihasználva a processzor integer valamint floating point egységeit, egyiket sem túlterhelve a másik kihasználása nélkül. A kitöltéshez a vonalrajzolásnál már jól ismert Bresenham-féle vonalrajzolási algoritmus módosított változatát használom. Ennek jelentősége, hogy kizárólag integer aritmetikával dolgozik, ezáltal nagyságrendekkel gyorsabb, mint a hagyományos, „naiv” vonalrajzolási algoritmus. A textúrázás nem perspektíva-korrekt. Hardveres gyorsítók automatikusan végeznek perspektíva-korrekciót a textúrázási fázisban, sajnos azonban ez a szoftveres alrendszerben nincs implementálva. Szerencsére azonban az ennek hiányában jelentkező rajzolási hiba (az ún. „textúraúszás”) csak nagyobb háromszögek rajzolásánál jelentkezik. Mi a megjelenítőt elsősorban fejmodellek rajzolására használjuk, ahol kellően kicsik a háromszögek ahhoz, hogy ez a probléma ne jelentkezzen.
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
10
OpenGL rajzoló alrendszer (OpenGLRenderDevice)
OpenGL esetében a rajzolandó háromszögeket egyszerűen az operációs rendszer OpenGL rendszerének továbbítjuk. Pontok rajzolásának módja: glBegin(GL_POINTS); ... glVertex3f(v->x, v->y, v->z); ... glEnd();
Vonalháló rajzolásának módja: glBegin(GL_LINES); ... glVertex3f(v1->x, v1->y, v1->z); glVertex3f(v2->x, v2->y, v2->z); ... glEnd();
Egy kitöltött, textúrázott háromszög kirajzolásának módja: glBegin(GL_TRIANGLES); ... glTexCoord2f(uv1[0], uv1[1]); glVertex3f(v1->x, v1->y, v1->z); glTexCoord2f(uv2[0], uv2[1]); glVertex3f(v2->x, v2->y, v2->z); glTexCoord2f(uv3[0], uv3[1]); glVertex3f(v3->x, v3->y, v3->z); ... glEnd();
Hierarchikus modell-struktúra (Scene Graph)
Ezt a jellemzőt azért tartottam lényegesnek megemlíteni, mivel ezáltal nyílik lehetőség egy modell részeinek egyszerű összekapcsolására, együttes mozgatására. A mi esetünkben különösen hasznos, hiszen egy fej általában több részből áll össze (arc, szemek, fogak, nyelv, garat, haj, stb.).
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
11
A struktúra lényege, hogy a modellrészeket fa-szerkezetbe rendezi. Minden csomóponthoz (SceneNode) tartozik transzformációs adat. Ezek: egy vektor az eltoláshoz (translate), egy mátrix a forgatáshoz (rotate) valamint szintén egy vektor a nyújtáshoz (scale). A csomópontok valójában almodellek. A mi esetünkben ez lehet a szemek, fogak, nyelv, garat, arc, haj, stb. Kinevezünk egyet gyökérelemnek, és a többi modellrészt alárendeljük. Az alárendelt modellrészek „öröklik” a szülő transzformációját. Tehát pl. ha a fej a gyökérelem, és minden más az alárendeltje, akkor a fej forgatásával együtt forogni fog az összes többi modellrész anélkül, hogy azokat külön forgatnunk kellene. Ezen felül az alárendelt elemek önmaguk is foroghatnak/mozoghatnak a saját koordinátarendszerükben. Pl. ha a szemet külön akarjuk forgatni (pl. jobbra nézzen), akkor a szem modellrésznek beállítunk egy elfordulást, és az a saját tengelye körül fog elfordulni. Emellett ha mondjuk a fejet is elfordítjuk, akkor a szem a fejhez képest a helyén marad (a szemüregben), de saját elfordulását megtartja (tehát pl. továbbra is jobbra néz). Ennek óriási előnye, hogy természetes működést produkál, vagyis azt „amit várunk”. Tehát ha azt mondjuk, hogy a fej forduljon balra, akkor a fej az összes „tartozékával” együtt (szem, fogak, nyelv, haj, stb.) balra fog fordulni, anélkül, hogy szétesne. Természetesen az itt leírt példa a fejjel csupán egy speciális eset, a rendszer, vagyis a hierarchikus modell-struktúra teljesen általános.
3D animáció Háromdimenziós animációknál általában kétféle animációról beszélünk: magas szintű ill. alacsony szintű animációról. A magas szintű animáció általában egy teljes modellre vagy a modell egy nagyobb részére vonatkozik. Ez lehet pl. egy ember-modell törzsének elfordítása, a fej elfordítása, a kar mozgatása, stb. Tehát mindig a modellrész egészén, vagy a modell csúcsainak (vertex-einek) nagyobb összefüggő halmazán értelmezett egységes művelet. Mátrixokkal vagy előre definiált csúcs pozíciókkal (kulcs-képkocka: key-frame) könnyen leírható. Az alacsony szintű animáció a csúcsok szintjén működik. Ez általában azt jelenti, hogy a modell meghatározott csúcsait elmozdítjuk, új pozíciót adunk meg nekik. Ez lehet pl. az arc finom mozgásainak animációja, a bőr egy adott ponton való nyújtása, stb. A motor lehetőséget ad mind magas, mind pedig alacsony szintű animáció végrehajtására, azáltal, hogy hozzáférést biztosít a modellek csúcsaihoz, valamint teljes hálószerkezetéhez.
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
12
VIII. Háromdimenziós fejanimáció A fejmodell A legtöbb modell, legyen az két- vagy háromdimenziós, hálókból áll. A háló (mesh) több egymáshoz illeszkedő nem feltétlenül egy síkban levő sokszöget tartalmazó felület. A hálóban a csúcspontok koordinátáin kívül a lapok, az élek és a csúcsok illeszkedési viszonyait is nyilván kell tartani. A modell felületi jellemzői, textúrája erre a rácsra van ráhúzva. Ahogy mozgatjuk a háló csúcspontjait, úgy mozog vele a textúra is. Ám az MPEG-4 szabványban csak az FP-k mozgatására van mód, az egyes hálókéra közvetlenül nincs. Egy modell tetszőleges számú és finomságú hálóból állhat, a szabvány erre nem terjed ki. Minden MPEG-4 kompatibilis fejmodell azonban azonos tartópont rendszerre épül. A hálók mozgatása a tartópontok mozgatásával történik. Egy MPEG-4 fejmodell alkalmas vizémák és érzelmi állapotok FAP paraméter alapú közvetlen megjelenítésére. Az MPEG-4 modell tömörítést kifejtő (decompress) része egy grafikus modell mozgatási feladat. A szabványosított eljárás során az alaphelyzetű fej teljes képének meghatározása és vevő oldalra történő átvitele valósul meg, és a továbbiakban csak az alaphelyzettől történő eltérések átvitelére van szükség a tömörített adatközlés során.
Kép 9: Az MPEG-4 rendszerű tömörítés koncepciója
Az MPEG-4 tömörítési folyamat (Kép 9) azon az elven működik, hogy a tömörítendő mosolygós fej lényeges paramétereinek valamint az alaphelyzetű fej paramétereinek különbségéből meghatározza a tömörített jellemzőket. Az MPEG-4 koncepció szerint ez a jellemzősor fej alakjától és környezetétől független adatokat tartalmaz.
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
13
Kép 10: Az MPEG-4 rendszerű visszaállítás koncepciója
A visszaállítási folyamat (Kép 10) során a tömörített jellemzőkhöz, amely jelenleg a mosolygás adatait tartalmazza, „hozzáadva” egy tetszőleges alaphelyzetű fej paramétereit egy mosolygós fej képét kapjuk. Az alaphelyzetű fej meghatározó adatai között kell elhelyezni a felületi jellemzőket valamint az esetleges további adatokat, mint például a modell haja, szeme stb. A visszaállítás során kell létrehozni a felületeket azok megvilágítástól függő színezésével együtt.
Az emberi arcra jellemző méretek: ●
ES0 – A szemgolyók távolsága
●
IRISD0
– Az írisz átmérő
●
ENS0
– Az orr hossza
●
MNS0
– Az orr és azáj távolsága
●
MW0
– A száj szélessége
Kép 11: Az emberi arcra jellemző méretek Az MPEG-4-ben a tömörítés során meghatározott és felhasznált távolság mértékrendszer (Kép 11) lehetőséget biztosít arra, hogy a tömörített információ felhasználásával tetszőleges más alaphelyzetű fejre lehessen alkalmazni a visszaállítást, és így lehessen változtatni a visszaállítás folyamatát. Az ES0; IRISD0; ENS0; MNS0; MW0; távolságok határozzák meg az adott arcberendezésen
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
14
alkalmazandó távolságegységek halmazát. A távolságmérésnek ez a módszere biztosítja azt a lehetőséget, hogy a visszaállítás során az eredetitől jelentősen eltérő felépítésű alaphelyzetben álló fejre is visszaállíthatók legyenek a tömörített információk. Az MPEG-4 szabványnak köszönhetően az arc mozgásához nem kell képkockáról képkockára megadni a videó minden egyes pixelét, mindössze a mozgatott FP-khez tartozó FAP-okat kell továbbítani. Ennek köszönhetően igen alacsony sávszélességen keresztül is elérhető a real-time arcanimáció. A szintetikusan létrehozott szájmozgás megjelenítésére felhasznált fejmodell egy szokásos 3D grafikus modell, amely animálható és így a céljaink megvalósítására alkalmas.
Kép 12: Az általam használt fejmodell a tartópontokkal
Az animáció alapjai A fej, elsősorban pedig az arc finom mozgásainak animációját részben az XFace, valamint más programoknál is alkalmazott módszer ihlette. A rendszer az MPEG-4 szabványon nyugszik. Durva közelítéssel mondhatjuk, hogy egy tartópont (FP) egy bizonyos nagyságú környezetre van hatással, vagyis a környező csontokra ill. bőrfelületre. Tehát ha a bőr megnyúlik vagy a csontok elmozdulnak, az ott lévő FP-k is elmozdulnak, másik oldalról nézve, ha egy adott FP-t elmozdítunk, akkor a környező bőrfelület a
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
15
ponttal együtt mozdul el. Az alapötlet az, hogy minden FP-hez hozzárendelünk egy listát, mely megmondja, hogy az adott FP mely hálópontokra van hatással. Ez lesz az adott FP hatóköre.
Kép 13: Példa egy FP hatókörére A hatókör megadása többféle módon történhet. Az XFace lehetőséget ad a kézi szerkesztésre. Ez meglehetősen nehézkes, mivel „kézzel” (egérrel) kell minden egyes FP-hez kiválogatni a kívánt hálópontokat. Kétség kívül a legpontosabb megadás ezzel volna lehetséges, azonban az ehhez szükséges idő aránytalanul sok. Egyszerűbb módszer a távolsággal meghatározott hatókör lista. Ez úgy történik, hogy megadunk egy távolságot, és ha az adott FP-hez egy hálópont ezen távolságon belül van, akkor bekerül az FP hatókörébe. Nagyon fontos azonban ez esetben, hogy ne „légvonalbeli” távolsággal számoljunk, hiszen akkor pl. az alsó ajak FP-i a felső ajak hálópontjait is bevennék a hatókörbe. Emiatt kizárólag a hálószerkezet összeköttetése alapján vehetünk egy adott pontot szomszédosnak. Ezáltal pl. az átnyúlás az alsó ajakról a felsőbe kiküszöbölődik. Tehát egy FP elmozdulása valamilyen hatással lesz a hatókörének pontjaira. Ez a hatás a hálópont FP-től való távolságától, az FP elmozdulásának mértékétől és irányától, az FP típusától valamint egyéb paraméterektől (választott súlyozás) függ. A fejmodellben a hatókör egy hálópontjának az FP-től való távolsága arányában egy bizonyos súlytényezőt számolunk. E nélkül a hatókör szélén elhelyezkedő pontok a szomszédoktól igen eltérő mozgást produkálnának, ami a modell szakadozott mozgásához vezethet. Továbbá a súlytényező nem lehet a távolság arányában egy lineáris függvény szerint számolt érték, hiszen az
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
16
hasonló szakadozott animációhoz vezetne. Éppen ezért az FP-k súlytényezői a következő képlet szerint alakulnak:
1−cos 1− w ij =
si ∗ rj
2
i=1...n ,
j=1...86
Ahol wij a j-edik FP által mozgatott, a hatókörben az i-edik vertex súlytényezője, si az FP és annak hatókörében az i-edik vertex távolsága, rj pedig a j-edik FP hatókörének sugara. Az si, vagyis az FP-től vett távolság háromdimenziós esetben a következőképpen alakul:
s i= x FDP − xi 2 y FDP − y i 2 z FDP −z i 2 Ez a megoldás nagyon egyszerű, de messze nem a legjobb. Az általunk használt FP-k modellezésére ellenben tökéletesen alkalmas. Ha a súlytényezőket eszerint állítjuk be, az azt eredményezi, hogy az FP mozgatásakor, a hatókörön belül elhelyezkedő pontokra egyre kevésbé hat az FP, a távolság arányában. Így a hatókör széle felé kis elmozdulást kapunk, míg az FP tőszomszédságában az elmozdulás közel azonos az FP elmozdulásával.
Kép 14: Egy FP hatása a hatókörére
Kép 15: FP-k elmozdulásának hatásai a hatókörükre
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
17
A tartópontok és hatóköreik mozgatása FAP-okkal Az MPEG-4 szabvány szerint a mozgatás nem közvetlenül átadott FDP koordináták alapján történik, hanem relatív módon, a FAP-ok segítségével. A korábbi félévben készített általános FP könyvtárat átdolgoztam, és kiegészítettem a FAP animációhoz szükséges rutinokkal. Ez két dolgot jelent: ●
FDP sorozatból adott FAPU-k segítségével FAP sorozat előállítását (FAP kódolás)
●
FAP sorozatból adott FAPU-k segítségével FDP elmozdulásvektorok előállítását (FAP
dekódolás) Az alacsony szintű FAP-ok lényegében egy adott FDP adott irányú elmozdulását kódolják. Például a 3-as FAP a 2.1-es FDP y irányú elmozdulását tartalmazza. Fontos megjegyezni, hogy a FAP mértékegysége a FAPU, tehát modellfüggetlen. FAP sorozat előállítása (kódolás)
FAP sorozatot a meglévő, videofelvételből kinyert FDP-adatbázis alapján készítettem, a következő módon. Először is megmérjük a FAPU-kat a felvételen szereplő beszélőn, pixelben. Aztán, minden képkocka FDP pontjainak koordinátáiból kivonjuk az előző képkocka FDP pontjainak koordinátáit. Ezzel kapunk egy delta képkockát, mely az FDP elmozdulásvektorokat tartalmazza, még pixelben. Ezután a szükséges FAP-okhoz, melyeket elő akarunk állítani, kiválasztjuk a megfelelő FDP megfelelő koordinátáját (amit a kívánt FAP fog kódolni), a pixelben lévő értéket az FDP-hez tartozó FAPU segítségével normalizáljuk (leosztjuk), majd az értéket eltároljuk. Ez lesz a kívánt FAP. Az így elkészült FAP sorozat szabványos, tehát bármely MPEG-4 szabványos FAP lejátszóval lejátszható. Ezt az XFace ill. Lucia lejátszókkal teszteltem, és az animáció az elvárásoknak megfelelően működött. FAP sorozat alkalmazása (dekódolás)
Bejövő FAP sorozatból FDP koordinátákat szeretnénk előállítani. Ehhez szükség van a célpont (pl. a 3D fej) FAPU értékeire. A mi modellünk esetében ez adott volt. A bejövő FAP sorozat értékeit először átkonvertáljuk az animálandó célpont mértékegységére. Ezt a FAPU-kal végezzük el, úgy, hogy az adott FAP-ot beszorozzuk a hozzá tartozó FAPU-val. Az így kapott értékkel beszorozzuk a FAP-hoz tartozó elmozdulás-irányvektort, majd a kapott vektort
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
18
hozzáadjuk a nyugalomban levő FDP halmaz megfelelő FDP pontjához. Ezt végrehajtva az összes FAP-ra, kapunk egy új FDP halmazt, mely az animált FDP-ket tartalmazza. Ezután következhet a tényleges 3D háló, vagyis a virtuális fejmodell animálása a hatókörökkel, ahogyan azt az előző fejezetben leírtam.
Az elkészült fejanimációs rendszer A 3D modell hálójának tényleges animálására C++ modult készítettem, a már korábban ismertetett 3D megjelenítő komponenseinek felhasználásával. A modul előnye, hogy könnyen beilleszthető bármilyen környezetbe. Ennek bemutatására készítettem egy Avisynth plugin-t (az Avisynth rendszerről ld. az előző féléves beszámolómat), melynek segítségével lehetséges a beszélő személyről készített felvétel lejátszásával szinkronban a 3D fej animálása (Kép 16).
Kép 16: Avisynth megjelenítő modul
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
19
IX. Kapcsolat az „IPTV siketek számára” projekttel Mint említettem, időközben lehetőség adódott együtt dolgozni a hangfeldolgozást végző kollégákkal. A projekt célkitűzése egy olyan speech-to-animation rendszer kidolgozása, mely közvetlenül a hangból származtatja a fejmodell animálásához szükséges paramétereket. A projekt különlegessége, hogy ezt egy élő TV adásba való integrációval, picture-in-picture formájában kívánja megvalósítani. Az én feladatom volt a projektben egy alkalmas keretrendszer felkutatása, kiértékelése, a hanghoz való hozzáférés biztosítása, valamint a megjelenítés elvégzése oly módon, hogy az élő TV adásból származó hang feldolgozása után az abból nyert paraméterekkel animált fejet az eredeti képre kellett visszahelyeznem. A rendszer demó jellegű, tehát PC-s környezetben kell megvalósítani. Rövidebb kutatás után a DirectShow keretrendszert találtam alkalmasnak arra, hogy bármilyen módon a PC-be érkező TV adást a fent leírt módon feldolgozni tudjuk. A prototípus elkészítése Microsoft Windows platformon történt. Fontos hangsúlyozni, hogy a rendszer belső működése valamint a megjelenítés egymástól függetlenül van megvalósítva, így bármely más platformra átültethető, amennyiben megfelelő megjelenítő modul készül az adott platformhoz. A megjelenítés alapvetően két részre bontható: ●
a 3 dimenziós fejmodell kirajzolása a kiszámított paraméterek alapján
●
a kirajzolt modell mozgóképbe ültetése (PIP: picture-in-picture)
A megjelenítés első fázisa (a 3D modell rajzolása) a szoftveres 3D rajzolóval történik, memóriába, mely így alapvetően platformfüggetlen. A kirajzolt modell mozgóképbe ültetése függ csupán az adott platformtól. A megjelenítés végső fázisa (a mozgóképbe ültetés) a Windows által támogatott DirectShow környezetben készült.
A DirectShow keretrendszer A DirectShow egy média feldolgozó architektúra a Windows platformhoz. Lehetővé teszi magas minőségű multimédiás tartalom felvételét ill. lejátszását. Formátumok széles skáláját támogatja, mint például az ASF, MPEG, AVI, MP3, WAV, stb. Támogat digitális ill. analóg
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
20
felvevőeszközöket. Multimédiás tartalom feldolgozása sok kihívást jelent: ●
Multimédiás folyamok nagy mennyiségű adatot tartalmazhatnak, melyet nagyon gyorsan kell feldolgozni
●
A hangot és képet szinkronizálni kell, hogy egy időben induljanak és álljanak meg, valamint egyforma sebességgel történjen a lejátszásuk
●
Az adat sok különböző forrásból származhat, mint például helyi fájlokból, hálózatról, televíziós sugárzásból, vagy videokameráról.
●
Az adat sok különböző formátumban érkezhet, mint pl. AVI, ASF, MPEG, DV, stb.
●
Egy multimédiás alkalmazás fejlesztője nem tudhatja előre, hogy milyen hardver áll rendelkezésre a célszámítógépen.
A DirectShow a fenti kihívásokra kínál megoldást. Hogy a sok különböző forrás, formátum ill. hardver különbözőségeket kezelni lehessen, a DirectShow egy moduláris architektúrát használ, melynek alapeleme a szűrő. Egy szűrő bemenetekkel és/vagy kimenetekkel rendelkező komponens, mely egy adott részfeladatot lát el. Alapvetően 3 típusú szűrő van: ●
Forrás szűrő (Source filter)
●
Transzformáló szűrő (Transform filter)
●
Megjelenítő szűrő (Rendering filter)
Kép 17: A DirectShow keretrendszer felépítése
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
21
Az architektúra alapkoncepciója a gráf-modell, melynek csomópontjai a szűrők. A DirectShow biztosít egy alap szűrőkészletet, de a rendszer igazi erőssége abban rejlik, hogy tetszőleges szűrőkkel bővíthető. Szemléltetésképpen itt van egy AVI fájl lejátszásának folyamata a Windows médialejátszójában: ●
Nyers adat olvasása a fájlból bájt-sorozatként (Fájl forrás szűrő)
●
Az AVI formátum feldolgozása, szétválasztás képkockákra ill. hangmintákra (AVI Splitter)
●
A képkockák dekódolása (különböző dekódoló szűrők lehetségesek, a képkocka tömörítésétől függően)
●
A képkockák megjelenítése (Megjelenítő szűrő)
●
A hangminták lejátszása a hangkártyán keresztül (Hanglejátszó szűrő)
Kép 18: AVI fájl lejátszásának folyamata a DirectShow keretrendszerben A szűrők egy halmaza valamint összeköttetésük módja alkotja a szűrő-gráfot. Szűrő-gráfok készítése ill. tesztelése
Szűrő-gráf automatikusan épül, ha a szűrő-gráf kezelőnek egy médiaforrás URL-t adunk, mint pl. egy fájlnevet a helyi meghajtón vagy egy hálózati címet. Ellenben lehetőség van szűrő-gráf manuális összeállítására is. Erre a GraphEdit program szolgál, mely a DirectShow SDK része, és amely szűrő gráfok összeállítását valamint tesztelését teszi lehetővé.
A projekt megvalósítása Az animált fejmodell megjelenítése valamint mozgóképbe helyezése szűrőként lett megvalósítva. Fontos megjegyeznem, hogy DirectShow szűrők készítése különösen nehéz feladat. Nem csupán a keretrendszerrel és annak működési elveivel kell tisztában lenni, hanem a Windows Component Object Model programozási módját is ismerni kell. A szűrő elkészítése ily módon a vártnál nagyságrendekkel nehezebbnek bizonyult. Az eredményt az alábbi ábra mutatja (Kép 19):
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
22
Kép 19: IPTV siketek számára
X. Jövőbeni feladatok A múlt félévben az egyetem beszerzett egy 200 képkocka/mp felvételi sebességgel működő kamerát. A félév vége felé alkalmam nyílt kipróbálni az új eszközt, és kezdeti méréseket is sikerült végeznem. A kamera ún. Bayer-mintás módban vesz fel, és feldolgozás nélkül továbbítja a képet a PC-re. A Bayer-szűrő egy színszűrő tömb (CFA – color filter array), mely RGB színszűrők elhelyezését határozza meg egy négyzet alapú fényérzékelő rácson (Kép 20). A szűrő 50% zöld, 25% piros ill. 25% kék szűrőt tartalmaz. E szűrő-elrendezés által készített szürkeárnyalatosnak tűnő nyers képet hívjuk Bayer-mintás képnek. Ahhoz, hogy színes képet kapjunk, az egyes színértékek interpolációjára van szükség.
Kép 20: Bayer elrendezés Kép 21: Bayer színszűrés
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
23
Első próbálkozásként készítettem egy primitív debayer Avisynth szűrőt, mely a Bayer-mintás képből színes képet állít elő (Kép 22).
Kép 22: Debayer - Bayer mintás kép kezdetleges interpolációja
Látható, hogy az interpoláció kezdetleges. Feltétlen szükséges fehér egyensúlyt állítani, valamint színkorrekciót végezni. Jövő féléves munkámban tervezem a korrekt interpolációt megvalósítani. A kamerával végzett kezdeti mérések biztatóak, a 200 képkocka/másodperc sebesség nagyságrendekkel megnöveli az MPEG-4 paraméterek detekciójának pontosságát, minden eddiginél finomabb animációt téve lehetővé.
XI. Összefoglalás Korábbi munkámban szóba került a fogak detektálása. Kiderült, hogy erre nincs szükség, hiszen az eddig detektált pontok impliciten tartalmazzák a fogak helyzetét, teljes pontossággal. Ennek oka az, hogy az orron ill. az állcsúcson is követtünk 2 FP-t, és ezek magukban hordozzák a fogak helyzetét is, hiszen az orr a felső fogsorral együtt mozog, a felső fogsor ugyanis (jó esetben) a felső koponyához rögzített, ahogyan az orr is. Az alsó fogsorral szintén ez a helyzet, az állcsúcs elmozdulása egyben az alsó fogsor elmozdulását is megadja. A detekciós eljárás továbbfejleszthető, erre konkrét elképzelések születtek, azonban erre előreláthatólag már egy másik hallgató lesz hivatott. A jelen beszámolóban bemutatott és elkészített 3D megjelenítő bevált, továbbfejlesztése előreláthatólag nem szükséges.
MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer továbbfejlesztése Mérnöki tervezés beszámoló – Oroszi Balázs
24
A vázolt animációs eljárás kielégítő, azonban nem tökéletes. Német egyetemeken kísérleteztek izom-alapú mozgatással, mely sokkal élethűbb animációt tesz lehetővé. Ennek kiértékelése szintén jövőbeli feladat lehet.
XII. Köszönetnyilvánítás Köszönettel tartozom Ujfalussy Rita, Tóth Orsolya, Lozsádi Dorottya, Laub Judit valamint Nádudvari Ilona számára, akik vállalták a hosszú és kacifántos szövegek kamera előtti felolvasását, és akik nélkül ez a projekt nem valósulhatott volna meg.
Irodalom [1] Srancsik Bálint, Beszédjelből szájmozgást rajzoló program (Modellezés és animálás), , 2004 [2] Takács György , Tihanyi Attila, Bárdi Tamás, Feldhoffer Gergely, Srancsik Bálint, MPEG-4 modell alkalmazása szájmozgás megjelenítésére, , 2006 [3] I. Pandzic and R. Forchheimer, MPEG-4 Facial Animation: The Standard, Implementation and Applications, 2002, Wiley [4] Oroszi Balázs, Videó folyamból MPEG-4 paraméterek származtatása - MPEG-4 paraméterekkel vezérelhető fej-animációs rendszer, , 2007 [5] Cosi P., Fusaro A., Tisato G., LUCIA a New Italian Talking-Head Based on a Modified CohenMassaro’s Labial Coarticulation Model, , Proceedings of Eurospeech 2003, Geneva, Switzerland, September 1–4, 2003, Vol. III, pp. 2269-2272. [6] Balci K., Xface: Open Source Toolkit for Creating 3D Faces of an Embodied Conversational Agent, , Smart Graphics, 2005, pp. 263-266.