Date de remise: 7 mars 2019 à 23h59
Due date: 23h59 on March 7th, 2019
Dans la partie A de ce travail, vous avez implanté un algorithme de morphage. Cela vous a permis de morpher votre visage vers celui de quelqu'un autre, ou peut-être même de morpher un objet ou un animal vers autre chose. Dans cette partie du travail, vous utiliserez votre algorithme de morphage afin de calculer le visage moyen d'un ensemble de visages.
En créant un visage moyen, vous aurez l'occasion d'observer les traits et les formes dominants d'un ensemble de visages. De plus, il est possible d'utiliser la forme d'un visage moyen pour modifier un visage; chose que vous ferez en vous prenant comme cobaye!
In part A of this assignment, you implemented a morphing algorithm. You used this algorithm to morph your face toward the face of someone else, and perhaps you morphed and animal or an object toward another things. In this part, you will have to calculate the average face of a face dataset using morphing.
In generating this average face, you will be able to notice dominant traits and shapes in a face set. Furthermore, it is possible to use the shape of an average face to modify a face; in the context of this assignment, you will do it on your face!
Pour calculer le visage moyen d'un ensemble de personnes, il faut
Cette technique exige un marquage uniforme de tous les visages. Dans ce TP, vous devrez utiliser les photos des étudiants du cours, ainsi que l'ensemble d'images de la base de données d'Utrecth (source). Celle-ci contient 131 images de 69 personnes: 20 femmes et 49 hommes.
To calculate the average face of a set of persons, we must:
This requires consistent labeling of all the faces. In this homework, you will have to use the photos from our class, as well as the Utrecht face image dataset (source). This dataset contains 131 images of 69 persons: 20 women and 49 men.
Dans l'ensemble d'images mentionné plus haut, vous ne connaissez pas la position des visages et encore moins la position des points caractéristiques de celui-ci. Puisqu'il serait fastidieux de sélectionner manuellement les points de tous les visages comme vous deviez le faire dans la partie A, nous vous suggérons d'utiliser le détecteur de visage et caractéristiques du visage suivant.
Nous vous fournissons un executable, une fonction matlab pour utiliser celui-ci, ainsi que son code source en C++ utilisant la librairie dlib
. Cette fonction matlab s'appelle avec un nom de fichier d'image ou une cellule contenant plusieurs noms de fichiers d'images.
In the faces dataset mentioned earlier, you do not know the face position, let alone its landmarks. Since it would be impractical to manually select every features of every faces, we invite you to use this face and face landmarks detector.
We provide you an executable, a matlab function to use it, and its C++ source code using the dlib
library. This matlab function is called with a single image filename or a cell filled with multiple image filenames.
Si vous travaillez sous MacOS ou Linux, vous devez compiler le fichier source fourni; téléchargez la librairie dlib et installez cmake pour vous aider à compiler cette dernière. Si vous travaillez avec python, inspirez-vous de la fonction matlab pour l'utilisation de l'exécutable. De plus, sous MacOS, il est plus facile de compiler dlib
avec gcc
plutôt que llvm
.
If you work in MacOS or Linux, you will have to compile the given source file; download dlib and install cmake to help you compile it. If you work with python, look at the matlab function to understand how to call the executable. Finally, in MacOS, it is easier to compile dlib
with gcc
rather than llvm
.
Vous remarquerez (voir figure ci-dessus) que la sortie du détecteur vous donne un rectangle de détection ainsi que 68 points d'intérêts entre les sourcils et le menton. Si un visage n'est pas détecté dans une image, retirez cette image de votre ensemble.
You will notice (see figure above) that detector output is a bounding box as well as 68 features points between the eyebrows and the chin. If a face is not detected in an image, you should remove it from your set.
Le calcul de la forme du visage moyen se fait de la même façon que pour le morphage normal (partie A de ce travail). Vous devez faire la moyenne de la position des points caractéristiques de tous les visages détectés.
The average face shape calculation is done the same way than the normal morphing approach (part A of this assignment). You have to average the position of every feature points of every detected face.
Une fois la forme du visage moyen calculé, vous devez déformer chacun des visages détectés vers celle-ci en utilisant votre algorithme de morphage de la partie A.
Once the average face shape calculated, you must deform each detected face towards it; use your implementation from part A of this assignment.
Puisque tous les visages ont maintenant la forme du visage moyen, il est possible de directement additionner toutes ces images et d'en calculer la moyenne. Attention, si vous additionnez toutes les images sur des valeurs de type entier non-signés de 8-bits (uint8
), les valeurs des pixels vont excéder la valeur maximale pouvant être représentée par un uint8
(c'est-à-dire 255). Convertissez vos images avec im2double
pour éviter ce problème.
Since all faces now have the shape of the mean face, we can compute their mean. Beware, if you add all the images on 8-bit unsigned integer type (uint8
), pixel values will exceed the maximum value that uint8
can represent (which is 255). To avoid this problem, convert your images with im2double
.
>> addpath('utrecht'); >> files = dir('utrecht'); >> files = files(~[files.isdir]); >> filenames = {files.name}; >> filenames = sprintf('utrecht/%s ', filenames{:}); >> faces = detect_face_landmark(filenames);
NaN
(Not a Number) dans votre image morphée. Essayez de trouver une méthode pour détecter et gérer ces cas.>> addpath('utrecht'); >> files = dir('utrecht'); >> files = files(~[files.isdir]); >> filenames = {files.name}; >> filenames = sprintf('utrecht/%s ', filenames{:}); >> faces = detect_face_landmark(filenames);
NaN
(Not a Number) values. Try to find a way to detect and manage these situations.Pour cette section, incluez les résultats suivants dans votre rapport:
(20%) Vous devez tout d'abord présenter vos résultats obtenus dans la partie A du travail. Présentez vos résultats, vos crédits supplémentaires (s'il y a lieu), et discutez.
dlib
;dlib
;dlib
;dlib
;For this section, include the following results in your report:
(20%) You must first present the results you have obtained in part A of this assignment . Present your results, your bells & whistles (if any), and discuss.
Créez un visage moyen pour tous les visages de femmes et un visage moyen pour tous les visages d'hommes dans la base de données d'Utrecht. Ensuite, masculinisez et féminisez-vous en morphant votre visage avec le visage moyen masculin et féminin!
First, you generate the average face for woman faces and the average face for man faces in the Utrecht database. Then, masculinize and feminize yourself by morphing your face with the mean man and woman faces!
strfind
or regexpi
.Pour cette section, incluez les résultats suivants dans votre rapport:
For this section, include the following results in your report:
dlib
pour détecter les points d'intérêts dans vos photos. Ajoutez de la musique à votre vidéo pour un effet encore plus réussi!dlib
to detect the facial keypoints in your photos. Add music to your video for added effect!dlib
pour chacune des images du vidéo. Ensuite, déformez votre visage pour qu'il «parle» de la même façon que la personne dans la vidéo originale. Est-ce que l'effet est convaincant?dlib
for each frame in the video. Then, deform your own face so that it can "talk" as the person in the original video. Is the effect convincing?Pour la remise de votre travail, créez un fichier tp3b.zip
qui contient:
tp3b/web
. Vos images doivent être dans un dossier tp3b/web/images
.tp3b/code
. N'incluez pas les images que vous avez utilisées pour produire vos résultats dans ce dossier dans le but de ne pas alourdir le fichier.tp3b/video
.Finalement, veuillez téléverser votre fichier tp3b.zip
sur le portail des cours avant la date limite. La politique des retards mentionnée dans le plan de cours sera appliquée. Pour toutes questions concernant la procédure de remise ou le travail lui-même, utilisez Piazza!
For this homework, you must create a tp3b.zip
file. In this file you'll put:
tp3b/web/
.Your result images inside a folder named tp3/web/images
.tp3/code
. Do not include the images you have used to generate your results inside this folder, as this will likely generate huge files.tp3/video
.
Finally, you should upload this file (tp3.zip
) on the "portail des cours" before the deadline. The late submission policy described in the course plan will be applied. For any question regarding the submission process or the project as such, use Piazza!
Merci à Alyosha Efros d'avoir créé le TP original qui a servi d'inspiration pour celui-ci!
Many thanks to Alyosha Efros for creating the assignment which inspired this one!