Projet !

Code

Pour mon projet, j'avais choisi d'essayer de reproduire les filtres Snapchat. Ainsi, le but est de prendre un article d'une photo et de l'appliquer à un vidéo autre vidéo. Pour ce faire, le principe est le suivant : On commence par choisir une photo avec un article quelconque. Par exemple, un homme avec une moustache. Par la suite, il faut se définir un masque qui sélectionne l'objet désiré.

Images avec objet
Masque de sélection
Par la suite, on utilise le détecteur de visage automatique. Celui-ci identifie les points utiles pour faire un lien avec le vidéo. On passe donc chacun des frames du vidéo au détecteur. Une fois tout les points sélectionnés, on effectue une triangulation et on associe les 2 images ensembles. On doit aussi passer le filtre par la déformation afin d'obtenir la moustahce déformée pour bien se mélanger avec le vidéo. On peut voir sur les images suivantes le processus.
Sélection de l'image avec l'objet
Triangulation de l'image avec l'objet
Sélecteur sur le premier frame du vidéo
triangulation du premier frame

Afin que la moustache suive aussi les mouvements de l'image, on doit effectuer la transformation sur le masque aussi, et ensuite multiplier le masque avec l'image modifiée. Ceci nous permet d'extraire la moustache modifiée.

Sélecteur sur le premier frame du vidéo
triangulation du premier frame

Par la suite, il faut ajouter la moustache modifiée sur le frame du vidéo. Pour ce faire, on utilise la même technique qu'au TP2. On utilise donc la technique de pyramide. On commence par filtrer l'image et le masque, on extrait les hautes et les basses fréquences, on effectue le tout 5 fois (pour le bien du projet). Ensuite, on utilises les piles pour reconstruire les images, et obtenir une image avec tous les éléments ensembles. Le tout fonctionne bien, mais est très lent.

Discussion

Tout ce processus est très lent. Au départ, j'utilisais mon algorithme de triangulation ainsi que mon algorithme de morphage par pyramide. Ces algorithmes n'étaient pas très optimisé, et très lent. Pour la suite, avec l'accord de mon collègue, j'ai utilisé le code d'Alexandre Picard. Celui-ci était beaucoup plus optimisé et accélérait environ d'un facteur de 2 l'exécution du code. Cependant, pour des vidéos HD, pour 10 secondes de vidéo, on avait besoin de 4 heures pour générer la séquence. Puisque je devais faire 10 vidéos et que je n'avais pas 40h à sacrifier, je me suis résolu a réduire la taille des viédos. Cela parait grandement dans la qualité des vidéos produit.

Avec un peu de recul, si le projet était à refaire, j'utiliserais le détecteur pour ne sélectionner qu'une partie précise du visage. Par exemple, si on désire ajouter une moustache, on ne sélectionne que les lèvres. Ainsi, les transformations seraient plus représentative des mouvements. Présentement, puisque la triangulation prend parfois des points sur les oreilles ou, pour les lunettes et les sourcils, on remarque que les lunettes se trouve déformé en suivant les sourcils, alors qu'elle devrait être stable. En n'utilisant que la position des yeux, on pourrait résoudre ce problème. Ceci accélererait grandement aussi l'exécution du code.

Pour la suite, je discuterai des résultats obtenus en dessous de chacun des différents vidéos.




Voici le vidéo original. Celui-ci a été choisi car il est très drôle, et que le visage du personage bouge suffisament, sans pour autant tourner. Un visage qui tourne venait briser l'algorithme de détection.

















































Jonathan Fleurent
JOFLE24
111 077 514