Facultat d'Informàtica de Barcelona (FIB)
Universitat Politècnica de Catalunya (UPC)
28 Setembre, 2015
Face Animation
with Kinect Face Tracking
Especialitat de Computació
Grau en Enginyeria Informàtica
Autor: Oriol Forns Gutiérrez
Director: Toni Susin Sanchez
2
Resum (Català)
Actualment hi ha molta feina feta en el camp de l'animació de
models 3D, concretament l'animació d'avatars humans mitjançant
dades obtingudes de persones reals utilitzant dispositius externs,
aquestes animacions ens les podem trobar tant a pel·lícules com a
videojocs.
Analitzarem si és factible utilitzar com a dispositiu extern un
Kinect en comptes de les càmeres que s'utilitzen actualment per a
obtenir les dades, concretament ens centrarem en la part facial de
l'animació.
Per a realitzar aquest projecte s'ha dividit el treball en dos grups,
analitzar les dades del Kinect i realitzar una animació facial el més real
possible.
Per analitzar les dades del dispositiu Kinect primer hem utilitzat
el SDK del Kinect per a recollir les dades captades pel sensor Kinect,
posteriorment se li han passat aquestes dades al SDK FaceTracking
de Kinect per a que intentes fer el Tracking de la cara, finalment en
cas que aquest plugin ens detectes una cara obtindríem dades facials.
En el nostre cas al realitzar l'animació facial hem utilitzat un
avatar 3D que s'ha animat utilitzant dades obtingudes per el SDK
FaceTracking.
Per tal de analitzar si l'animació era correcte i suficientment
bona, s'han utilitzat dos pantalles separades per a representar en
temps real per un costat l'animació del avatar 3D, i per l'altre la imatge
captada per el Kinect adjuntant una mascara de les dades facials del
Tracking.
3
Resum (Angles)
Currently there are a lot of work done in the field of 3D models
animation, specifically human avatars animation using data from
external devices that get it from real people, these animations will be
found for both, movies and video games.
We will discuss if it is workable to use Kinect as an external
device rather than cameras that are currently using to obtain data, we
will focus specifically on facial animation.
This project has been divided into two working groups, one to
analyze Kinect data and other to make a facial animation as real as
possible.
To analyze the data from the device Kinect, we have used the
SDK Kinect to collect the data captured by the Kinect sensor, then we
have passed this information to the SDK FaceTracking to try to do the
tracking of the face, finally if this plugin could detect a face data, we
will get our facial data.
In our case we make the facial animation using a 3D avatar that
has been animated using data obtained from the SDK FaceTracking.
In order to analyze if the animation was correct and good
enough, two separate screens have been used to represent at
real-time 3D avatar animation on one side, and on the other the image
captured by the Kinect attaching a mask of facial tracking data.
4
Índex
1. Introducció ... 7
1.1. Formulació del problema ... 7
1.2. Contextualització ... 7
1.3. Actors implicats ... 8
1.3.1. Programador, dissenyador i tester ... 8
1.3.2. Director del projecte ... 8
1.3.3. Desenvolupadors d'Animacions 3D ... 8 1.3.4. Usuaris ... 8 1.4. Estat de l'art ... 8 1.4.1. Captura facial ... 9 1.4.2. Visor 3D... 10 2. Definició de l'Abast ... 11 2.1. Abast ... 11
2.1.1. Limitacions del Kinect ... 12
2.1.2. Limitacions de l'Avatar ... 12 2.1.3. Limitacions de Calendari... 12 2.2. Metodologia i rigor ... 13 2.2.1. Mètodes de treball ... 13 2.2.2. Eines de seguiment ... 13 2.2.3. Mètode de validació ... 13 3. Planificació temporal ... 14 3.1. Pla de projecte ... 14
3.1.1. Planificació del projecte ... 14
3.1.2. Implementació i tests ... 14
3.1.3. Tancament del projecte ... 16
3.1.4. Valoració d'alternatives ... 16
3.1.5. Diagrama de Gantt ... 17
3.1.6. Modificacions de la planificació ... 18
5
4. Gestió econòmica ... 20
4.1. Pressupost recursos humans ... 20
4.2. Pressupost hardware ... 21
4.3. Pressupost software ... 21
4.4. Despeses indirectes ... 22
4.5. Pressupost total ... 23
4.6. Control de desviacions ... 23
5. Sostenibilitat i Compromís Social ... 24
5.1. Àrea social ... 24
5.2. Àrea ambiental ... 25
5.3. Puntuació sostenibilitat ... 25
6. Interfície i recollida de dades del Kinect ... 26
6.1. Introducció al problema ... 26 6.2. Metodologia ... 26 6.2.1. Interfície ... 26 6.2.2. Imatges Kinect ... 27 6.2.3. FaceTracking ... 28 7. Representació de l'avatar ... 30 7.1. Introducció al problema ... 30 7.2. Metodologia ... 30 7.2.1. Modificació de l'avatar ... 30 7.2.2. Representació de l'avatar ... 33
8. Interacció bàsica Kinect i avatar ... 35
8.1. Introducció al problema ... 35
8.2. Metodologia ... 35
8.2.1. Pitch ... 36
8.2.2. Yaw ... 36
8.2.1. Roll ... 37
9. Interacció final Kinect i avatar ... 39
9.1. Introducció al problema ... 39
6 9.1.2. AU1 ... 39 9.1.3. AU2 ... 39 9.1.4. AU3 ... 39 9.1.5. AU4 ... 39 9.1.6. AU5 ... 40 9.2. Metodologia ... 40
9.2.1. Animació del model ... 40
9.2.2. Animació del contorn del model ... 40
10. Conclusions ... 42
10.1. Interfície i recollida de dades Kinect ... 42
10.2. Representació de l'avatar ... 42
10.3. Interacció bàsica Kinect i avatar ... 43
10.4. Interacció final Kinect i avatar ... 43
11. Referències ... 45
A. Avatar 3D original ... 46
B. Face Tracking Outputs ... 47
B.1. 2D Mesh and Points ... 47
B.2. 3D Head Pose ... 48
B.3. Animation Units ... 49
B.4. Shape Units ... 51
7
1.
Introducció
1.1.
Formulació del problema
L’animació d’un avatar humà en 3D ha evolucionat molt amb les noves tecnologies, tot i això, encara ens podem trobar amb dos grans obstacles.
Un dels problemes a l'hora d'animar aquest avatar humà és realitzar una animació facial el més realista possible, de manera que les seves expressions siguin el més semblants a les d'una persona real.
L'altre principal obstacle és la dificultat per a representar en un avatar les expressions, obtingudes per una càmera, de la cara d’una persona en temps real, de manera que imiti tots els seus moviments.
Per a tractar aquests problemes actualment s'utilitzen eines molt costoses a les que no tothom te accés, això limita molt als petits productors i desenvolupadors d'animacions 3D humanes que no disposen de un pressupost tant ampli.
Així doncs, en aquest projecte ens centrarem en abaratir el cost de implementar l'animació facial d’un avatar. Per abaratir els costos, realitzarem l'animació facial utilitzant les dades proporcionades per el sistema Face Tracking de Kinect, d'aquesta manera comprovarem si es possible implementar una bona animació facial amb el Kinect.
1.2.
Contextualització
En aquest projecte es tractarà l'animació facial 3D basada en dades reals obtingudes per dispositius externs, càmeres, sensors de profunditat, sensors infrarojos...
Hi han diferents solucions per aquest problema creades per diferents empreses, des de empreses de videojocs com pot ser Activision, o productores
8 cinematogràfiques per a crear pel·lícules com Avatar. Aquestes aplicacions s'ajuden de diferents hardware i algoritmes per a trobar la millor representació possible de les expressions facials humanes.
1.3.
Actors implicats
A continuació especificarem tots els actors i els seus rols dins del projecte que desenvoluparem.
1.3.1. Programador, dissenyador i tester
Degut a que soc l'única persona encarregada d'aquest projecte, realitzaré les tres tasques, programador, dissenyador i tester.
1.3.2. Director del projecte
El tutor d’aquest projecte és Toni Susin Sanchez, com a tal, el seu paper consistirà en supervisar, mitjançant reunions de seguiment, que s'està complint amb la planificació prèvia del projecte.
Aquestes reunions de seguiment serviran per arribar a complir amb el calendari proposat així com també amb els objectius. A mes a mes, també ajudarà i guiar en el desenvolupament de les tasques per tal de complir les fites i finalitzar el projecte final.
1.3.3. Desenvolupadors d'Animacions 3D
Les persones o empreses que desenvolupen aplicacions relacionades amb l'animació facial poden estar interessades en les conclusions extretes en aquest projecte, ja que s'estudiaran les limitacions a l'hora de realitzar animacions facials realistes utilitzant el Kinect per a obtenir les dades amb les que es realitzarà l'animació.
1.3.4. Usuaris
Seran els principals beneficiaris del sistema. Disposaran d'un sistema que els permetrà dissenyar les seves pròpies animacions facials, a un cost molt mes reduït, i sense perdre molta qualitat respecte al sistema amb el hardware mes costos.
1.4.
Estat de l'art
L'objectiu d'aquesta part del document es informar sobre l'estat de l'art de les diferents parts que componen el projecte. A continuació, és llisten les dues parts de les que esta format, captura facial i visor 3D.
9 1.4.1. Captura facial
L'animació facial és un tema molt important per les empreses que es dediquen a l'animació, sobretot quan es fan primers plans. Actualment, en les grans produccions que utilitzen la captura de moviments de forma massiva (Avatar, Rise of the Tomb Rider, etc) s'utilitzen equipaments exclusius i molt costosos per a realitzar la captura facial.
Figura 1.1: Equipament utilitzat a la pel·lícula Avatar per obtenir les dades facials.
El dispositiu Kinect pot significar un salt important en aquest camp, ja que podria permetre abaratir molt el cost de producció.
El Kinect, conegut per la majoria de les persones per ser la càmera de la consola XBOX és molt més que no només això, ja que poca gent coneix el fet que es pugui utilitzar com a dispositiu al PC. Aquesta característica ens permet desenvolupar aplicacions que ens permetin interactuar amb l'ordinador [1][2][3].
Figura 1.2: Descripció de les parts del Kinect.
Microsoft proporciona un SDK per a que els desenvolupadors puguin treballar amb el Kinect. Dins de les diferents eines proporcionades per aquest SDK, hi ha una que consisteix en identificar una cara real, dins de les dades de captura del
10 Kinect, i seguir els seus moviments, tant del cap com de les expressions de la cara, aquesta eina s'anomena Kinect Face Tracking [4][5].
Els resultats podran no ser tant precisos com els obtinguts amb tècniques utilitzant dispositius mes costosos, però comprovarem si són el suficientment bons com per a utilitzar-ho com a eina de producció eficaç.
1.4.2. Visor 3D
Un visor 3D és un programa capaç de carregar models 3D, de manera que es puguin mostrar a un usuari el qual pugui arribar o no a interactuar, depenent de la utilitat del programa.
En concret, tot programa amb una finestra 3D inclou un visor 3D, tot programa utilitzat en modelització 3D i tot joc basat en animació 3D, són exemples d'utilització d'aquests visors. Degut a aquesta gran quantitat d'aplicacions que es poden fer a partir de visors 3D existeixen una gran quantitat d'investigacions al respecte.
En el nostre cas, utilitzarem un visor basat en OpenGL mitjançant llibreries de Windows. Aquestes llibreries ens permetran treballar amb un FrameBuffer Object, cosa que ens facilitarà l'animació del avatar que representarà el cap a animar.
11
2.
Definició de l'Abast
2.1.
Abast
Volem representar una cara real en un avatar 3D que segueixi els moviments realitzats per aquesta persona.
Per a realitzar aquesta animació primerament és necessita un avatar 3D d’un cap de persona, per augmentar la precisió de l'animació lo òptim seria utilitzar un escaneig del cap de la persona que s'utilitzés com a model, però degut al cost de les eines per aquest sistema, així com tenir un model diferent per a cada persona que s'utilitzi com a model a l'animar l'avatar, s'ha optat per buscar un avatar a Internet. Aquest cap ha de ser el mes semblant a un real per una representació optima, de la mateixa manera, també ha de permetre tots aquells moviments que es pugin realitzar mitjançant expressions de la cara.
Figura 2.1: Model 3D utilitzat com avatar al nostre projecte.
Seguidament, és necessari una font d’informació que ens informi del moviment de la cara de la persona en que es basarà la representació de l'avatar. En aquest punt és en el que el nostre sistema diferirà més dels utilitzats per les grans empreses que utilitzen eines molt costoses.
12 En el nostre cas hem escollit utilitzar el Kinect, una càmera que ens permet obtenir informació tant de profunditat com de imatge amb Kinect for Windows SDK, concretament la funcionalitat Face Tracking. Aquesta eina ens permet preguntar al Kinect quin és l'estat que esta enregistrant en aquell moment, de manera que ens informarà dels moviments i la gesticulació actual de la cara per així poder extreure la informació necessària per a poder animar el nostre model 3D.
Un cop definit el sistema i tenint en compte les eines utilitzades, així com el temps emprat per poder realitzar el sistema, ens podem trobar amb tres grans limitacions.
2.1.1. Limitacions del Kinect
El problema principal del Kinect 360, es que te una velocitat de captura de fins un Màxim de 30fps, depenent de la resolució. Això ens pot afectar a l'hora d'animar l'avatar, ja que al gesticular o moure ràpid el cap es pot perdre el moviment i per tant portar-nos a resultats no desitjats perdent informació. Una possible solució a aquest problema seria utilitzar el Kinect V2, ja que te una major velocitat de captura i per tant ens permet captar moviments mes ràpids fins a una millora de pràcticament el doble de la capacitat del Kinect 360.
2.1.2. Limitacions de l'Avatar
La limitació amb l’avatar poder és la major limitació amb la que ens trobarem, principalment per dos motius.
Primerament ens trobem amb el problema d’imitar un cap real amb les gesticulacions de la cara, per tant l’avatar s’ha de moure d’una manera el mes “humana” possible, això es una gran limitació ja que al estar l'avatar format per plans units per vèrtex ens limita els moviments que pot realitzar segons el nombre de plans del que és disposi.
Per altre banda, l’avatar ha d’imitar els nostres moviments en el menor temps possible, això requerirà un tractament de les dades molt eficient.
2.1.3. Limitacions de Calendari
Un problema amb el que ens trobarem és el curt termini per a la realització del projecte, 4 mesos, ens forçarà a planificar un calendari molt ajustat, realitzant reunions setmanals amb el director per tal de encaminar-ho de la millor manera possible.
13
2.2.
Metodologia i rigor
Per tal que el projecte és desenvolupi seguint el calendari marcat, és realitzaran reunions setmanals per a solucionar possibles dubtes i encaminar el projecte de la manera desitjada.
D’aquesta manera, primer és representarà només el moviment del cap i poc a poc s’incrementarà la qualitat de l’animació afegint mes detall al sistema.
2.2.1. Mètodes de treball
Per a desenvolupar el sistema s’utilitzaran diferents eines de treball, totes implementades en c++.
Es farà us de la llibreria SDK de Kinect, proporcionada per Windows, que ens permet llegir les dades que Kinect esta captant en qualsevol moment per un posterior tractament d’aquestes.
Per altre banda, s’utilitzaran les llibreries de Windows implementades sobre un projecte de Visual Studio per realitzar la interfície gràfica, on es visualitzarà la finestra que contindrà tant l’avatar com la imatge que s'està enregistrant amb el Kinect, i on és tractaran les dades de Kinect. Aquesta finestra que ens mostrarà les imatges és realitzarà amb OpenGL.
Tot aquest procés el portarem a terme utilitzant una metodologia de treball amb cicles curts d'una setmana, d'aquesta manera és garanteix una visió més real del estat en que ens trobem i si es troba o no dins del calendari marcat al inici del projecte.
2.2.2. Eines de seguiment
Mitjançant Git podrem guardar setmanalment les modificacions realitzades, de manera que es pugui portar un control de l’evolució del projecte durant cada reunió setmanal.
2.2.3. Mètode de validació
Per tant de validar l’evolució del sistema és realitzaran proves amb persones i expressions facials diferents. Tant les persones com les expressions facials seran escollides curosament, de manera que es validi si el sistema funciona correctament, sense dependre de quina combinació d'expressions utilitzis, així com de que no depengui de la fisonomia de la persona que s'utilitzi com a model.
14
3.
Planificació temporal
En aquesta secció parlarem sobre la distribució temporal, descrivint la duració de cada part del projecte.
La duració aproximada del projecte es de 8 mesos, del 16 de Febrer al 21 de Juny. Com ja s'ha comentat a la definició del abast, durant la duració del treball poden sorgir diferents complicacions que afectin a la planificació inicial.
3.1.
Pla de projecte
3.1.1. Planificació del projecte
Aquesta part del projecte és la fase inicial que esta delimitada per GEP, en aquesta part es defineix com es distribuirà tot el treball a realitzar, consta de 7 parts:
i. Abast del projecte ii. Planificació temporal
iii. Gestió econòmica i sostenibilitat iv. Presentació preliminar
v. Contextualització i bibliografia vi. Revisió de les competències vii. Presentació oral i document final 3.1.2. Implementació i tests
La fase d'implementació i tests inclou tot el disseny, implementació i validació del sistema.
Cada part d'aquesta fase s'explica en els següents apartats, tenint en compte que per a iniciar un s'ha d'haver finalitzat prèviament tots els anteriors i que prèviament s'ha configurat tot el entorn de treball.
15
I. Interfície i recollida de dades
Primer de tot ens centrarem en la configuració i la recollida de dades amb el Kinect, per això primerament s'implementarà la interfície on es veuran representades les dades recollides amb el Kinect juntament amb una mascara ortogonal de la cara que s'estigui analitzant a sobre d'aquesta, en cas d'haver-hi alguna.
Un cop amb la interfície estigui finalitzada ja podrem implementar la recollida de dades amb el Kinect i la seva representació en aquesta interfície.
Finalment amb les dades i la pantalla creades podem passar a analitzar aquestes dades amb el FaceTracking per a buscar alguna cara en la imatge obtinguda per el Kinect, un cop analitzades podrem representar aquest anàlisis amb la mascara ortogonal.
II. Representació de l'avatar
Per a la representació de l'avatar necessitarem la interfície anteriorment implementada com un avatar 3D.
Aquest model 3D prèviament s'analitzarà i es modificarà mitjançat el software 3D Max de manera que ens sigui el mes fàcil possible tant la representació com l'animació d'aquest.
Un cop modificat l'avatar es procedirà a ampliar la interfície de manera que aparegui el nostre avatar, de moment immòbil a falta de la interacció amb el Kinect.
III. Interacció bàsica Kinect i avatar
Un cop acabat el tractament de dades del Kinect i la representació de l'avatar s’iniciarà la implementació del codi per a poder utilitzar aquestes dades amb l'avatar.
En aquesta interacció bàsica, l’avatar només representarà els moviments del cap, així com la inclinació Pitch, Roll i Yaw.
16 Figura 3.1: Dibuix explicatiu de les rotacions 3D.
Per a realitzar aquesta representació s'utilitzaran les dades adquirides que el Kinect estarà registrant en temps real sobre la persona que esta fent de model i tractades per el FaceTracking.
IV. Interacció final Kinect i avatar
Un cop acabada aquesta interacció bàsica de la implementació, procedirem a afegir mes precisió en la interpretació de les expressions capturades per el Kinect.
Es procedirà a afegir expressions com el obrir la boca, moure les celles... Tot aquelles expressions que pot arribar a realitzar qualsevol persona real. Per a poder representar totes aquestes expressions noves s'hauran de consultar diferents dades proporcionades per el FaceTracking, no només les de inclinació del cap anteriorment representades, de manera que el tractament de dades haurà de ser molt mes acurat que en la implementació bàsica per a poder realitzar una animació en temps real.
3.1.3. Tancament del projecte
En aquesta fase és finalitzarà la memòria del projecte comprovant que tot estigui correcte, així com també, és prepararà la presentació del treball.
3.1.4. Valoració d'alternatives
És important considerar que la planificació es pot veure afectada per problemes durant el transcurs del projecte, ja sigui problemes amb el Hardware, cosa que hauríem d'aconseguir un nou Kinect, o trobar-nos amb problemes per a
17 implementar una part del codi, on hauríem de realitzar una cerca més exhaustiva d'informació per tal d'agilitzar el procés.
El fet de trobar-nos amb aquests problemes ens forçarà a trobar solucions àgils i potents per tal de no afectar en gran mesura el seguiment de la planificació i així assegurar la finalització d'aquest dins del temps establert.
18 3.1.6. Modificacions de la planificació
Durant la fase d'implementació de l'Avatar en 3D ens varem trobar amb un obstacle important utilitzant les llibreries de Qt, ja que només aconseguíem representar-ho en 2D i per tant no ens permetria mostrar els moviments obtinguts del Kinect correctament.
Aquest obstacle que ens varem trobar ens va obligar a modificar la planificació detallada anteriorment en la fita inicial.
Durant els mesos compresos entre Març i Abril és varen realitzar diferents implementacions i tests de la interfície per a mostrar un avatar en 3D mitjançant Qt, a principis de Juny és va decidir buscar alternatives per a la representació de l'Avatar.
Durant els mesos de Maig i Juny és varen buscar alternatives, al mateix temps és va començar a realitzar la part del processament de dades amb el Kinect, concretament la configuració i el disseny del codi a implementar posteriorment per aquesta recollida de dades. Concretament es va decidir posposar la representació del avatar ja que varem considerar centrar-nos en l'obtenció de dades i poder-les representar correctament.
Finalment, la part de la interfície i la interacció amb el Kinect es va finalitzar a mitjans de Juny cosa que va donar pas a la representació i tractament de l'avatar durada del qual va ser fins a finals de juny.
Un cop finalitzada la part de la interfície i la representació tant de les dades del Kinect com de l'avatar, varem prosseguir amb la implementació de la interacció
19 bàsica entre Kinect i Avatar fins principis de setembre. Deixant així un mes i mig per a realitzar la interacció final i la memòria.
La problemàtica anteriorment explicada ens ha suposat un endarreriment important en quant a la planificació prèviament plantejada el que ens ha obligat a allargar el projecte més del que havíem plantejat inicialment.
3.2.
Recursos i requeriments
Lloc de treball: o Casa o Universitat Hardware: o PC o Kinect XBOX 360 Software: o Windows 8.1o Kinect for Windows SDK v1.8 o Microsoft Visual Studio 2012 o 3D Max 2016
20
4.
Gestió econòmica
En aquest apartat és proporciona l’estimació del cost del projecte tenint en compte recursos humans, hardware, software així com també els costos indirectes.
Els terminis marcats es poden veure afectats segons avança el projecte, per això és molt important portar un seguiment i tenir les dades actualitzades per tal de que no afecti al termini marcat per a la finalització d’aquest.
4.1.
Pressupost recursos humans
Degut que aquest projecte nomes serà portat a terme per una persona, haure d’assumir els 4 rols presents al projecte: cap de projecte, dissenyador, programador i tester. A continuació es detallarà el nombre d’hores que caldrà per dur a terme les tasques de cada rol i el valor econòmic de les hores dedicades.
Rol Hores estimades Hores reals Preu/h Preu total estimat Preu total real Cap de projecte 125h 125h 50€/h 6.250€ 6.250€ Dissenyador 50h 160h 35€/h 1.750€ 5.600€ Programador 315h 630h 35€/h 11.025€ 22.050€
21
Tester 50h 165h 30€/h 1.500€ 4.950€
Total 540h 1080h -- 20.525€ 38.850€
Taula 4.1: Càlcul del cost en recursos humans
Com es pot veure a la taula, el cost en recursos humans gairebé s'ha doblat, això és degut a que el temps de la part d'implementació s'ha augmentat en 4 mesos, es a dir, s'ha dedicat el doble de temps del previst prèviament, en canvi per la part de planificació, la part que avarca l'assignatura de GEP, no s'ha invertit més temps en realitzar-ho, per tant el cost és manté com el estimat.
4.2.
Pressupost hardware
Per a poder realitzar la implementació del projecte, són necessaris certs elements hardware per tal de realitzar la implementació i proves del sistema.
Taula 4.2: Càlcul del cost en hardware
En aquest cas l'amortització s'ha doblat degut a que el temps de realització del projecte s'ha incrementat en 4 mesos, cosa que duplica el temps total invertit en la realització del nostre software.
4.3.
Pressupost software
De igual manera que necessitarem el hardware per a poder realitzar la implementació i proves, també es requerirà de software específic, de manera que puguem utilitzar el hardware especificat anteriorment i portar a terme totes les fases del projecte.
Producte Preu Unitat s
Vida útil Amortització estimada
Amortització real
Producte Preu Unitats Vida útil Amortització estimada Amortització real
PC 1000€ 1 4 Anys 184,93€ 369,86€ Kinect 100€ 1 4 Anys 18,49€ 36,98€
22 Windows 8.1 Professional 200€ 1 3 anys 27,74€ 55,48€ 3D Max 1600€ 1 1 any -- 147,94€ Qt 0.00€ 1 -- 0.00€ -- Microsoft Office 140€ 1 3 anys 19,41€ 38,82€
Kinect SDK 0,00€ 1 -- 0,00€ 0,00€ Microsoft Visual
Studio
647€ 1 3 anys 89,74€ 179,48€
Total 2587€ -- -- 136,89€ 421,72€
Taula 4.3: Càlcul del cost en software
Aquesta part del càlcul de costos és la que ha augmentat mes significativament degut a que en la planificació inicial no es va considerar el fet que s'hagués de modificar el avatar 3D, i per tant, no es va incloure dins de la planificació ni dels costos el 3D Max.
El fet que la vida útil d'aquest software sigui de 1 any es degut a que les llicencies del programa caduquen cada X temps i en nostre cas hem fet els càlculs amb una llicencia de 1 any.
A part de la incorporació del 3D Max, també es duplica el costos de la resta dels softwares ja que el temps de realització del projecte és el doble.
4.4.
Despeses indirectes
A part de les despeses en software i hardware ens apareixen unes altres despeses com poden ser el us de paper o l’electricitat.
Producte Preu Unitats Cost aproximat
estimat
Cost aproximat real
Electricitat 0,15€/kWh 156,6kWh 23,49€ 46,98€
Paper 4,00€/pack 1 pack 4,00€ 8,00€
Total -- -- 27,49€ 54,98€
23 En aquest cas degut a que s'ha doblat el temps de realització del projecte el cost s'ha incrementat proporcionalment, per tant, s'han incrementat fins arribar al doble de l'estimat en la planificació inicial.
4.5.
Pressupost total
Finalment, si ajuntem tots els pressuposts amb les despeses podrem calcular el cost total del projecte i comparar-ho amb l'estimat.
Concepte Cost estimat Cost real
Recursos humans 20.525€ 38.850€
Hardware 203,42€ 406,84€
Software 136,89€ 421,72€
Costos indirectes 27,49€ 54,98€
Total 20.888,8€ 39.733,54€
Taula 4.5: Càlcul del cost total.
Com podem comprovar a la taula i s'ha comentat en cada un dels càlculs dels costos, el pressupost necessari per assolir el projecte gairebé s'ha doblat, no arriba a ser exactament el doble ja que la part que te mes cost és la de recursos humans i en aquest cas el rol de cap de projecte no assoleix més carrega de treball per lo que no s'incrementa la seva part de cost així com si ho fan els altres rols.
4.6.
Control de desviacions
Un dels principals problemes que haurem de controlar, ja que pot afectar al pressupost final, és la desviació temporal respecte a la planificació prèviament realitzada, ja que ens incrementaria el cost de recursos humans així com el de despeses indirectes.
Un altre problema que ens podem trobar es el mal funcionament del hardware, en aquest cas hauríem d'afegir els costos de les reparacions i en cas extrems, adquirir nou hardware.
Es considera que degut a l’especificació que s’ha fet de les tasques, no es donarà un escenari en què la desviació temporal sorgeixi en tasques consecutives i, per tant és podrà acabar a temps el projecte.
24
5.
Sostenibilitat i Compromís Social
5.1.
Àrea social
Aquest projecte es troba dins del món de l’animació 3D, concretament a la animació realista d’una part del cos, en el nostre cas, el cap.
El mercat de l’animació 3D realista te molta importància tot i no estar al abast de tothom degut al gran cost de la tecnologia requerida per a realitzar-la. Així doncs, aquest projecte intenta fer més accessible aquesta tecnologia a petits programadors.
Aquest sistema te clarament un impacte positiu en la societat, ja que aproxima una tecnologia molt costosa a persones que no tenen tant poder adquisitiu, fomentant així el creixement del sector i el desenvolupament de les tècniques emprades per a l’animació.
En cap moment te un impacte negatiu ja que fomenta la competitivitat entre petites empreses així com d’utilització d’aquestes tècniques per a realitzar animacions anteriorment inaccessibles.
Tenint en compte els resultats comentats a continuació, el nostre projecte servirà com a base per a desenvolupar software relacionats amb l'animació facial, facilitant així la seva aplicació per els usuaris.
25
5.2.
Àrea ambiental
Degut a la poca repercussió dels projectes de software en el medi ambient, aquest projecte no te una gran impacte en l’àrea ambiental.
Tot i així, també afecta al medi ambient degut a la necessitat d’energia elèctrica i de paper, dos factors que afecten en el seu procés d’obtenció.
5.3.
Puntuació sostenibilitat
Tenint en compte el estat econòmic, social i ambiental anteriorment especificat, així com el fet que aquest projecte no és afectat per cap llei degut a que és un projecte de investigació per a saber si l'animació facial utilitzant les dades del Kinect és el suficientment bona.
¿Sostenible? Econòmica Social Ambiental
Planificació 9 8 9
Resultats 1 8 9
Riscos -5 0 0
Valoració total 39 -- --
26
6.
Interfície i recollida de dades del Kinect
6.1.
Introducció al problema
Per a poder iniciar a fer proves i veure si funciona el nostre sistema prèviament requeríem una interfície, unes dades obtingudes del sensor Kinect, a més a més, interpretar aquestes dades i analitzar-les per a trackejar una cara obtenint les seves dades, en el cas que hi hagi alguna en la imatge.
Per arribar a obtenir les dades del FaceTracking prèviament havíem d'obtenir la imatge obtinguda per el sensor Kinect correctament, per a poder comprovar que aquestes imatges s'obtenien correctament necessitàvem una pantalla on mostrar-les i veure si la nostre implementació era errònia, de igual forma, necessitàvem la interfície per a mostrar la mascara ortogonal obtinguda amb el FaceTracking i així comprovar el seu funcionament.
6.2.
Metodologia
En vista de les dependencies que hi havien en cada una de les parts de la que esta formada aquesta primera etapa ens varem centrar primerament en realitzar la interfície, un cop finalitzada aquesta en obtenir les dades del Kinect i finalment analitzar aquestes dades per realitzar el FaceTracking.
6.2.1. Interfície
Per a realitzar la interfície ens varem decidir en utilitzar una finestra creada amb les llibreries, l'avantatge d'utilitzar aquestes llibreries és la facilitat en pintar i configurar-ho.
27 Per crear la finestra prèviament generàvem el text de la capçalera de la
finestra, un cop guardada aquesta informació es crea una classe que consistirà en la nostra finestra i juntament amb dades com el icona que voldrem utilitzar, el ratolí... Un cop finalitzat aquest enregistrament procedirem a crear la finestra utilitzant la capçalera i la classe creades prèviament.
Figura 6.1: Captura de la Interfície. 6.2.2. Imatges Kinect
Un cop creada la interfície podrem començar a implementar la recollida de dades del Kinect.
Per a captar les imatges del sensor varem crear els nostres ImageBuffer i DepthBuffer on ens guardarem la imatge i la profunditat d'aquesta, també inicialitzarem un vector que ens representarà un esquelet.
Posteriorment inicialitzem tres Events, un per el ImageBuffer, un altre per el DepthBuffer i un per el SkeletonTracker, que ens serviran per a saber quan llegir les dades del Sensor i guardar-nos els valors als nostres Buffers.
Desprès de la creació dels Events, configurarem dos Streams, un amb la configuració d'imatge i un altre amb la configuració de profunditat, assignant-li a cada un el seu Event i un StreamHandlers per a cada un dels dos Buffers on en cas d'obtenir dades, es guardaran abans de que ens les copiem en els nostres Buffers, de la mateixa manera activarem el Event del SkeletonTracker.
Un cop definida la configuració del Sensor, nomes ens quedarà configurar la funció Event on ens guardarem les dades que estigui captant en aquell moment el Kinect per a una posterior utilització.
Finalment, per a pintar els resultats obtinguts per el Sensor des de la interfície obtenim els Buffer de color, posteriorment calculem la superfície on es pintarà la imatge en cada cas per evitar que ens surti deformada i per últim pintem el Buffer que ens hem copiat.
28 Figura 6.2: Captura de la representació de les dades del Kinect.
6.2.3. FaceTracking
Un cop obtingudes les dades del sensor Kinect, podem procedir a realitzar el FaceTracking.
Per a realitzar el tracking de la cara apareguda al sensor hem de configurar el Face Tracker i tots els seus components, desprès de realitzar la configuració s'hauran de passar les dades al Face Tracker per a que aquest les analitzi i ens les guardi en un FTResult de on es podran obtenir totes les dades obtingudes per el FaceTracking
Primerament ens copiem la configuració d'imatge i de profunditat del Kinect, un cop amb aquestes dades provem de inicialitzar el Face Tracker, en cas que s'hagi creat correctament procedim a inicialitzar-ho amb la configuració de vídeo i profunditat obtingudes prèviament, un cop inicialitzat l'utilitzem per a crear el nostre FTResult, finalment inicialitzem el que serà la nostre imatge de trackeig tant per la imatge RGB com per la imatge de profunditat.
Desprès de configurar tot el necessari es crearà un SensorData amb la imatge RGB, la profunditat el zoom i el offset de la vista des de la coordenades d'origen del sensor Kinect, tant el zoom com l'offset han de ser els que te configurats el Kinect.
Posteriorment li demanem a les nostres dades del sensor Kinect que ens proporcioni el punt mes proper on hi un cap dins dels esquelets que ha trackejat, en cas que previament s'hagi trobat un esquelet es busca el cap mes proper a aquest últim punt.
29 Finalment cridem a continuar el Tracking en cas que en el últim intent s'hagués trackejat amb èxit, o iniciem un de nou, en tots dos casos se li passa el sensor, el punt on esta situat el suposat cap i el IFTResult on es guardaran les dades obtingudes.
Per a pintar la mascara primerament consultem el nombre de vèrtex que te el model 3D creat per el Face Tracker (IFTModel), seguidament del IFTResult ens guardem totes les Actions Units (AU) així com la posició 3D del cap[6].
Un cop obtingudes totes les dades captades per el Face Tracker així com també les dades de configuració del sensor Kinect li passem al nostre IFTModel totes les dades per a que ens retorni el model transformat respecte a les dades que li hem passat, aquest model ens ho retornarà omplint el vector que hem creat prèviament amb el nombre de vèrtex que ens hem guardat anteriorment. A continuació ens crearem un vector de POINTS amb la mateixa mida que el nombre de vèrtex te el model al que li assignarem totes les components X i Y del vector de vèrtex que havíem omplert amb les dades de IFTModel.
Finalment pintem tots els triangles de color groc i agafarem el rectangle que engloba la cara per posteriorment pintar-ho de color magenta i així finalitzar la representació ortogonal de les dades obtingudes per el Face Tracker.
30
7.
Representació de l'avatar
7.1.
Introducció al problema
En aquesta part del projecte ja s'ha finalitzat tota la part de la interfície que consisteix en la finestra creada per el nostre sistema amb una divisió que la separa en dos meitats, la de la dreta, on ja s'utilitza per a representar les dades obtingudes per el Kinect, així com la representació de la mascara ortogonal realitzada amb les dades del FaceTracking, i la de l'esquerra fins el moment sense utilitzar.
En aquesta etapa del projecte ens varem centrar en preparar un avatar amb el que posteriorment treballaríem en posteriors implementacions, per a poder realitzar aquesta tasca prèviament havíem de tractar l'avatar que ens varem descarregar d'Internet, per a facilitar-nos un tractament mes còmode i simple.
Un cop teníem l'avatar com nosaltres volíem només ens faltava utilitzar-ho i representar-ho de la millor manera possible en la meitat esquerra de la finestra prèviament creada.
7.2.
Metodologia
Per a realitzar la tasca anteriorment com ja s'ha comentat és va separar en dos procediments, primer modificar l'avatar i posteriorment representar-ho.
7.2.1. Modificació de l'avatar
Per a realitzar aquesta part es necessari un programa de edició de models 3D, ja que el nostre avatar original, adjunt en el Annex A, venia en format ".max" el software que varem utilitzar és 3DS-Max ja que és un programa molt complert, a més a més de que el format ".max" es el que te 3DS-Max per defecte[7]. El nostre avatar originalment estava format per tres parts:
Dues pupiles.
Dents juntament amb la geniva.
El cap en si.
D'aquestes tres parts per a realitzar el nostre projecte només ens interessarà el cap en si, ja que ni les pupiles ni els dents els arribaríem a animar per separat i només ens alentiria el sistema sense aportar res més.
31 Un cop eliminades les parts innecessàries de l'avatar varem procedir a trossejar el cap en un total de 12 parts, aquest trossejament era necessari per a posteriorment poder animar individualment cada una de les parts, també era necessari que cada una de les parts fos estrictament formada per polígons de 4 costats, anomenats quads.
Primer varem separar els ulls en dos objectes independents així com també el seu contorn, d'aquesta manera podríem animar individualment cada un dels ulls, el contorn ens ajudaria a suavitzar el moviment dels ulls sense que hi haguessin separacions brusques entre la part animada i la part sense animar.
Figura 7.1: Model 3D del ull dret.
Figura 7.2: Model 3D del ull esquerra.
Figura 7.3: Model 3D del contorn de l'ull dret.
Figura 7.4: Model 3D del contorn de l'ull esquerra.
Un cop finalitzada la separació dels ulls, varem procedir a separar les celles, en aquest cas també es va separar en 4 objectes, les celles per un costat i el contorn de les celles per un altre, com el moviment de les celles és més ampli que el dels ulls el contorn seleccionat per les celles és més ampli.
32 Figura 7.6: Model 3D de la cella esquerra.
Figura 7.7: Model 3D del contorn de la cella dreta.
Figura 7.8: Model 3D del contorn de la cella esquerra.
Per últim varem separar els llavis per a permetre al sistema obrir i tancar la boca, una acció bàsica en qualsevol animació, en aquest cas a diferencia dels ulls i les celles es va dividir els llavis en tres parts, la part superior, la part inferior i el contorn del conjunt de les dues parts.
El motiu per el qual es va dividir d'aquesta manera va ser que hi havien uns vèrtex del llavi superior que estaven posicionats mes a baix que uns altres del llavi inferior, aquesta situació ens provocaria problemes a l'hora d'animar el moviment de la boca ja que no sabríem si aquests vèrtex pertanyen al llavi superior o inferior.
Figura 7.9: Model 3D del llavi superior.
33 Figura 7.11: Model 3D del contorn dels llavis.
Per acabar la modificació del avatar i un cop finalitzat el trossejament de les parts del cap ens varem quedar amb el cap resultant com un altre objecte, en tots els casos no s'ha modificat les coordenades a l'origen (0,0) per així mantenir la forma original en cas de tornar a ajuntar-ho tot.
Figura 7.12: Model 3D resultant de extreure els altres models.
7.2.2. Representació de l'avatar
Un cop finalitzada la modificació del avatar ens varem centrar en utilitzar-ho per a poder representar el cap en la interfície prèviament creada.
Primer de tot carregàvem cada un dels fitxers on estaven guardats cada model, en el nostre cas guardats en format ".obj" ja que te un format senzill d'utilitzar i entendre, i ens guardàvem les seves dades individualment cridant a un algorisme[8].
34 Aquest algorisme consisteix en recórrer el fitxer que se li especifica i depenent de si és vèrtex, o cara, ens ho guardàvem en un vector de 3 components en cas de ser un vèrtex o en un vector de segments en cas de ser una cara, en aquest últim cas ens guardaríem cada un dels 4 segments ja que totes les cares eren quads.
Un cop guardades aquestes dades procedíem a pintar-ho, per a pintar-ho escalàvem cada un dels objectes a la mida actual de la finestra i movíem al centre de la meitat on representarem l'avatar les coordenades d'origen dels models.
Finalment per a cada un dels models guardats cridem a la funció DrawModel per a guardar-ho al nostre FrameBuffer Object que posteriorment pintarem a la pantalla.
35
8.
Interacció bàsica Kinect i avatar
8.1.
Introducció al problema
En aquesta secció del projecte ens centrarem en començar a implementar tota la interacció entre el Kinect i el avatar, concretament la inclinació del cap, ja sigui pitch, yaw o roll.
Un primer pas per a realitzar la interacció entre les dades obtingudes amb el FaceTracking és implementar el moviment de la cara com un sol bloc, sense entrar en especificar les expressions, es a dir com es te posicionat el cap.
En concret en el nostre cas varem implementar tots tres girs possibles, el pitch, el yaw i el roll.
Figura 7.13: Representació de les rotacions disponibles.
8.2.
Metodologia
Per a realitzar aquesta implementació varem dividir en tres la implementació, cada part per a una rotació per a tractar-les individualment i al final ajuntar-ho tot. Un punt important a tenir en compte es que abans de rotar els models hem de tenir la precaució de treballar amb una copia dels vèrtex, no amb els originals carregats d'inici, això es degut a que en el cas en que la posició del cap estigui en cert angle "x" si no fem la copia dels vèrtex, la transformació del angle s'anirà aplicant cada cop que pintem, ens estiguem movent o no ja que el FaceTracking ens indica en quin angle tenim posicionat el cap respecte la posició neutre sense rotacions.
36 A més a més també és molt important tenir en compte el fet que el FaceTracking ens informarà dels angles en graus i, per tant, abans de fer cap càlcul amb ells els haurem de convertir en radiants.
Un cop creada una copia dels vèrtex ja podem començar a treballar amb els angles, es important realitzar les tres rotacions abans de realitzar la transformació i escalat per a rotar el model sobre el origen de coordenades ja que o sinó la rotació no seria la esperada.
8.2.1. Pitch
Com ja s'ha explicat anteriorment mitjançant una imatge la rotació coneguda com a Pitch es aquella que es realitza sobre el eix de les X.
Per tant, per a realitzar la rotació se li aplica a cada vèrtex de tots els models que prèviament hem copiat, és a dir el conjunt del cap, la rotació captada per el FaceTracking.
La formula que varem utilitzar per al càlcul de la rotació Pitch és: cos = cosinus(PitchRadian)
sin = sinus(PitchRadian) z' = cos*z - sin*y; y' = sin*z + cos*y;
Figura 8.1: Representació de una rotació Pitch. 8.2.2. Yaw
En aquest cas la rotació s'aplicarà sobre el eix de les Y, modificant així només les components X i Z.
Per tant, per a realitzar la rotació se li aplica a cada vèrtex de tots els models que prèviament hem copiat, és a dir el conjunt del cap, la rotació captada per el FaceTracking.
37 La formula que varem utilitzar per al càlcul de la rotació Yaw és:
cos = cosinus(YawRadian) sin = sinus(YawRadian)
x' = cos*x - sin*z; z' = sin*x + cos*z;
Figura 8.2: Representació de una rotació Yaw.
8.2.1. Roll
En aquest cas la rotació s'aplicarà sobre el eix de les Z, modificant així només les components X i Y.
Per tant, per a realitzar la rotació se li aplica a cada vèrtex de tots els models que prèviament hem copiat, és a dir el conjunt del cap, la rotació captada per el FaceTracking.
La formula que varem utilitzar per al càlcul de la rotació Roll és: cos = cosinus(RollRadian)
sin = sinus(RollRadian) x' = cos*x - sin*y; y' = sin*x + cos*y;
38 Figura 8.3: Representació de una rotació Roll.
Un cop comprat que tots tres per separat complien amb la seva funció i representaven les rotacions com tocava en cada cas varem ajuntar les tres implementacions per a que primer fes el Pitch, seguidament el Yaw i per últim el Roll.
39
9.
Interacció final Kinect i avatar
9.1.
Introducció al problema
Finalment un cop implementat la part de la interfície, l'obtenció de dades, la representació de l'avatar i la part d'interacció corresponent als angles de inclinació del cap, ens centrarem a implementar les animacions facials obtingudes per el FaceTracking.
Per a fer això ens centrarem en analitzar els AU proporcionats per el nostre IFTResult, la descripció del qual esta en el annex B, aquests AU vindran separats en 6 de diferents:
9.1.1. AU0
Ens indicarà com d'elevat esta el llavi superior, el rang de valors anirà de 1 fins a -1 on un valor de 1 voldrà dir que s'ensenyen els dents totalment i un valor de -1 que el llavi superior esta el mes a baix possible.
9.1.2. AU1
Aquest Action Unit ens indicarà com d'oberta esta la boca, el rang de valors anirà de 1 fins a -1, on 1 es la boca totalment oberta i de 0 fins a -1 ens indicarà que la boca esta totalment tancada.
9.1.3. AU2
En aquest cas l'Action Unit ens indicarà com estan situats els llavis, el rang anirà de 1 fins a -1, on 1 és un somriure el màxim de marcat, -0.5 son els llavis rodons i finalment si ens retorna un -1 indicarà que te els llavis totalment rodons. 9.1.4. AU3
El AU3 ens notificarà a quina altitud esta situada la part central de les celles, el rang anirà de 1 fins a -1, on -1 en indicarà que estan aixecades al màxim i un valor de 1 voldrà dir que les celles estan el mes a baix possible.
9.1.5. AU4
Aquest Action Unit servirà per a dir-nos quin arc estan formen els llavis, el rang anirà de 1 fins a -1, on -1 ens indicarà que la forma del llavi es de un somriure molt feliç en canvi es donarà un valor de 1 en el cas que tinguin una forma molt trista.
40 9.1.6. AU5
Finalment el últim Action Unit representarà com d'aixecades estan les celles, el rang oscil·larà entre 1 i -1, on -1 ens indicarà que les te el màxim de baixes representant una cara trista, i un valor de 1 voldrà dir que estan aixecades com en una expressió de sorpresa total.
Un cop analitzats aquests Action Units ens varem dedicar a utilitzar-ho per a donar-li expressivitat a l'avatar amb l'objectiu que imites les expressions readonar-litzades i analitzades a traves del Kinect de la millor manera possible.
9.2.
Metodologia
Primer de tot per a poder implementar aquesta ultima part del projecte varem interpretar els AU de manera que no nomes els varem tractar de manera individual si no que també realitzàvem accions derivat de dos AU per a poder animar els ulls, ja que no hi ha un AU específic per aquesta animació.
Un cop interpretats els AU provinents del FaceTracking ens guardarem tota la informació util que ens aporten, en el nostre cas tota la informació que varem poder extreure sobre les celles, ulls i boca.
Per a realitzar aquesta implementació hem separat les accions a realitzar per a models, de manera que se'ns generaven un total de 3 casos possibles, animar els ulls, animar les celles i animar la boca, aquestes implementacions es situaran just abans de realitzar les rotacions i com totes les modificacions al model carregat del fitxer s'aplicaran sobre la copia dels vèrtex.
En tots tres casos s'utilitza un algoritme per animar el model en si, es a dir la cella, el ull, el llavi... i un altre per animar el contorn.
9.2.1. Animació del model
Per a realitzar l'animació del model en si, per exemple el de la cella dreta, actualitzarem tots els seus vèrtex amb un increment que vindrà determinat per l'anàlisi que hem realitzat anteriorment sobre els AU.
9.2.2. Animació del contorn del model
L'animació del contorn consisteix en realitzar la mateixa operació que per el model en si, amb la diferencia que el increment es normalitza en relació a la distancia del vèrtex respecte a la frontera, d'aquesta manera el moviment del model es va degradant conforme s'allunya del model que estem animant.
41 Figura 8.1: Representació de una animació de les celles.
42
10.
Conclusions
Per a realitzar les conclusions prèviament analitzarem per a cada apartat implementat els resultats obtinguts juntament amb possibles treballs futurs de cara a millorar aquella part del projecte, per a finalitzar amb una conclusió final que es basarà en els resultats prèviament comentats.
10.1.
Interfície i recollida de dades Kinect
Com a conclusions podem extreure que la imatge obtinguda per el Kinect no acaba de ser del tot nítida cosa que ens pot arribar a afectar en la precisió del Tracking, per la part del FaceTracking podem concloure que per les dades representades a partir del IFTModel ens donen una bona impressió general tot i que hi han seccions de la cara que no arriba a tractar amb molta precisió.
També hem de tenir en compte les limitacions al hora de Trackejar la cara, les quals son:
No permetre Roll de mes de 90º.
A partir de 45º de Pitch sol perdre el Trackeig.
El marge en el que et pot captar la càmera es de més de mig metre però no més de 5 metres.
No permet moviments molt ràpids degut a que capta imatges a 30 fps. Com a possible ampliació en el àmbit del software es podria afegir la opció de fer el Tracking a més d'una cara, d'aquesta manera es podria Trackejar a un conjunt de persones, també es podria afegir menús en la interfície per a poder activar i desactivar funcionalitats en temps d'execució i no dependre de compilar i reiniciar el programa.
També es podria realitzar el estudi amb el nou Kinect el qual te gairebé el doble de resolució i fps cosa que hauria de millorar notablement els resultats del Tracking.
10.2.
Representació de l'avatar
Un cop realitzada la implementació especificada anteriorment observem com la representació del avatar que ens apareix per pantalla es la correcte, a part com la mida del avatar dins de la pantalla depèn d'aquesta sempre estarà en la mateixa zona de la pantalla sigui de la mida que sigui cosa que facilita el fet de gestionar la finestra en cas que es vulgui treballar en paral·lel amb un altre aplicació.
43 Com a treball futur per aquesta part del treball és podria millorar la representació 3D del avatar evitant així una representació en Wire-frame i realitzar una Shaded, d'aquesta manera incrementaria el nivell de realisme del avatar al afegir la superfície entre els vèrtex dels polígons amb els que esta format[9][10].
10.3.
Interacció bàsica Kinect i avatar
Un cop finalitzada la implementació de totes tres rotacions podem comprovar que ja el fet de només afegir rotació al avatar li donava un punt de realisme que al estar estàtic permanentment no ho aparentava.
També podem comprovar com en alguns casos tot i realitzar una rotació el FaceTracking ho detecta com si no s'hagués rotat com per exemple la figura . Degut a les limitacions del Kinect ens hem adonat que efectivament en alguns casos el FaceTracking perd de vista la cara provocant que l'avatar es quedi congelat en una posició en concret fins que s'actualitzi els angles amb els de la nova cara. Una possible millora en el sistema inclouria el fet de realitzar el FaceTracking amb diverses Kinect per així tenir un rang mes ampli de rotació disponible, de igual manera també seria interessant de comprovar si amb el Kinect v2 reconeix millor els angles en el límit del seu rang, i si aquest es mes ampli que en la que nosaltres hem emprat.
10.4.
Interacció final Kinect i avatar
Un cop finalitzada aquesta part podem con cloure que l'animació esta bastant limitada per nomes 6 AU, aquest es un problema si nomes ens centrem a animar el model utilitzant els AU, degut a això el nombre de moviments disponibles que pot realitzar el avatar son bastant reduïts.
Una possible millora seria implementar un sistema que a més a més d'utilitzar els AU també s'utilitzés els Shape Units (SU) que ens proporcionen informació sobre zones en concret de la cara així com també seria interessant utilitzar el 2D Mesh que consta de 87 punts 2D que formen el contorn de la cara, nomes la part d'orella a orella passant per la barbeta, el contorn dels llavis, el nas, les celles i els ulls.
Basant-nos en els resultats estudiats anteriorment el principal problema del Kinect és la baixa resolució que te la càmera, això provoca que segons quins moviments els confongui i es pensi que son uns altres, com s'ha explicat en els resultats de la
44 interacció bàsica Kinect i avatar, que en el cas en que realitzis un pitch amb un grau elevat el Kinect es pensava que el cap estava amb molta menys inclinació, aquest fet provoca pèrdues d'informació que ens pot ser perjudicial en segons quines aplicacions es vulgui emprar.
Finalment també és un inconvenient que el FaceTracking només relacioni les expressions amb 6 AU, ja que o be t'has de configurar tu les altres AU de candide-3 cosa que complica el desenvolupament del software, o be l'animació no serà tant realista com un desitjaria[11].
Tot i aquests inconvenients, podem dir que el Kinect, juntament amb el seu SDK FaceTracking, és un bon dispositiu per realitzar animacions facials en 3D en cas de no tenir el suficient pressupost com per a permetre's uns dispositius més costos però al mateix temps bastant més fiables.
45
11.
Referències
[1] K. Aitpayev and J. Gaber, “Creation of 3D Human Avatar using Kinect,” Asian
Trans. Fundam. …, vol. 01, no. 05, pp. 3–5, 2005.
[2] “Kinect - Windows app development.” [Online]. Available:
https://dev.windows.com/en-us/kinect. [Accessed: 21-Oct-2015].
[3] C. Cao, Y. Weng, S. Lin, and K. Zhou, “3D Shape Regression for Real-time Facial Animation,” ACM Trans. Graph., vol. 32, no. 4, pp. 41:1–41:10, 2013.
[4] M. C. de F. Macedo, A. L. Apolinario, and A. C. dos S. Souza, “A Robust Real-Time Face Tracking Using Head Pose Estimation for a Markerless AR System,” in 2013
XV Symposium on Virtual and Augmented Reality, 2013, pp. 224–227.
[5] “Face Tracking.” [Online]. Available: https://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF. [Accessed: 21-Oct-2015].
[6] Y.-L. T. Y.-L. Tian, T. Kanade, and J. F. Cohn, “Recognizing upper face action units for facial expression analysis,” Proc. IEEE Conf. Comput. Vis. Pattern Recognition.
CVPR 2000 (Cat. No.PR00662), vol. 1, no. 2, pp. 1–19, 2000.
[7] “3d Modeling & Rendering Software | 3ds Max 2016 | Autodesk.” [Online]. Available: http://www.autodesk.com/products/3ds-max/overview. [Accessed: 20-Oct-2015].
[8] Wikipedia, “Wavefront .obj file.”
[9] Wikipedia, “Wire-frame model.” [Online]. Available: https://en.wikipedia.org/wiki/Wire-frame_model. [10] Wikipedia, “Shading.” [Online]. Available:
https://en.wikipedia.org/wiki/Shading.
[11] J. Ahlberg, “Candide - Parameterized face.” [Online]. Available: http://www.icg.isy.liu.se/candide/.
46
A. Avatar 3D original
Aquesta és la representació del model en 3D que varem modificar, s'ha inclòs en l'annex de la memòria per a poder tenir una referència de com estava el model abans de modificar-ho al nostre model 3D.
47
B. Face Tracking Outputs
Aquest annex és una extracció de la web del SDK Face Tracking on explica
exactament quines són les dades que ens retorna el FaceTracker un cop esta fent tracking d'una cara, s'ha afegit per ajudar a solucionar dubtes sobre l'estructura de la sortida i com esta composa, d'aquesta manera ajuda a que el document sigui mes autocontingut.
This section provides details on the output of the Face Tracking engine. Each time you call StartTracking or ContinueTracking, FTResult will be updated, which contains the following information about a tracked user:
Tracking status
2D points
3D head pose
AUs
B.1. 2D
Mesh
and
Points
The Face Tracking SDK tracks the 87 2D points indicated in the following image (in addition to 13 points that aren’t shown in Figure 1 - Tracked Points):
48 These points are returned in an array, and are defined in the coordinate space of the RGB image (in 640 x 480 resolution) returned from the Kinect sensor. The additional 13 points (which are not shown in the figure) include:
The center of the eye, the corners of the mouth, and the center of the nose.
A bounding="" box around the head.
B.2. 3D Head Pose
The X,Y, and Z position of the user’s head are reported based on a right-handed coordinate system (with the origin at the sensor, Z pointed towards the user and Y pointed UP – this is the same as the Kinect’s skeleton coordinate frame). Translations are in meters.
The user’s head pose is captured by three angles: pitch, roll, and yaw.
Figure 2. Head Pose Angles.
The angles are expressed in degrees, with values ranging from -180 degrees to +180 degrees.
Angle Value
Pitch angle
-90 = looking down towards the floor +90 = looking up towards the ceiling
49
0=neutral Face Tracking tracks when the user’s head pitch is less than 20 degrees, but works best when less than 10 degrees.
Roll angle 0 = neutral
-90 = horizontal parallel with right shoulder of subject +90 = horizontal parallel with left shoulder of the subject
Face Tracking tracks when the user’s head roll is less than 90 degrees, but works best when less than 45 degrees.
Yaw angle 0 = neutral
-90 = turned towards the right shoulder of the subject +90 = turned towards the left shoulder of the subject
Face Tracking tracks when the user’s head yaw is less than 45 degrees, but works best when less than 30 degrees
B.3. Animation Units
The Face Tracking SDK results are also expressed in terms of weights of six AUs and 11 SUs, which are a subset of what is defined in the Candide3 model (http://www.icg.isy.liu.se/candide/). The SUs estimate the particular shape of the user’s head: the neutral position of their mouth, brows, eyes, and so on. The AUs are deltas from the neutral shape that you can use to morph targets on animated avatar models so that the avatar acts as the tracked user does. The Face Tracking SDK tracks the following AUs. Each AU is expressed as a numeric weight varying between -1 and +1.
AU Name and
Value Avatar Illustration AU Value Interpretation
Neutral Face (all AUs 0)
AU0 – Upper Lip Raiser
(In Candid3 this is AU10)
0=neutral, covering teeth 1=showing teeth fully -1=maximal possible pushed down lip
50 AU1 – Jaw Lowerer
(In Candid3 this is AU26/27)
0=closed 1=fully open -1= closed, like 0
AU2 – Lip Stretcher (In Candid3 this is AU20)
0=neutral
1=fully stretched (joker’s smile)
-0.5=rounded (pout) -1=fully rounded (kissing mouth)
AU3 – Brow Lowerer
(In Candid3 this is AU4)
0=neutral
-1=raised almost all the way +1=fully lowered (to the limit of the eyes)
AU4 – Lip Corner Depressor
(In Candid3 this is AU13/15)
0=neutral
-1=very happy smile +1=very sad frown
AU5 – Outer Brow Raiser
(In Candid3 this is AU2)
0=neutral
-1=fully lowered as a very sad face
+1=raised as in an expression of deep surprise
51
B.4. Shape Units
The Face Tracking SDK tracks the following 11 SUs in IFTFaceTracker. They are discussed here because of their logical relation to the Candide-3 model.
Each SU specifies the vertices it affects and the displacement (x,y,z) per affected vertex.
SU Name SU number in Candide-3
Head height 0
Eyebrows vertical position 1
Eyes vertical position 2
Eyes, width 3
Eyes, height 4
Eye separation distance 5
Nose vertical position 8
Mouth vertical position 10
Mouth width 11
Eyes vertical difference n/a
Chin width n/a
In addition to the Candide-3 as described at
http://www.icg.isy.liu.se/candide/, face tracking supports the following:
Eyes vertical difference
Chin width
Face tracking does not support the following:
Cheeks z (6)
Nose z-extension="" (7)
Nose pointing="" up (9)
B.5. 3D Face Model Provided by IFTModel Interface
The Face Tracking SDK also tries to fit a 3D mask to the user’s face. The 3D model is based on the Candide3 model.