face tracking - C++ - Programmation
Marsh Posté le 02-06-2010 à 20:57:15
Question à la con : Pourquoi ne pas passer par une analyse type transformée de Fourier?
Pour détecter la translation d'un objet, il me semble que c'est le plus simple non ?
Marsh Posté le 02-06-2010 à 21:29:50
réponse à la con : parce qu'on est plus dans les années 60. Réponse un peu moins à la con : même si ça s'appelle Fast Fourrier Transform, c'est pas si fast que ça et une fois que t'as calculé ta TF, t'es loin d'avoir fini.
@Dreamvig : Comment réalise tu ta détection de visage? Par une classif de Haar, ou par une autre méthode? SOn va partir du principe que ta méthode est pas assez rapide/performante pour te permettre de considérer que tu détectes le visage à tous les coups.
Pour la méthode KLT, dans openCV, tu peux utiliser la fonction qui s'appelle (de mémoire) cvGoodFeaturesToTrack(stuff) et ensuite cvCalcLkPyr(stuff), c'est une implémentation de cette méthode. Tu peux chercher la publi originelle de Kanade-Lucas-Tomasi qui présente le truc, mais pour faire simple, on extrait des points de harris, et on cherche à estimer le mouvement de ces points par une méthode proche de celle de LK pour calculer du flot optique (équation de conservation de la lumiosité + contrainte de lissage) et tout se passe bien. Ca marche pas trop mal quand tu es dans un monde de bisounours (caméra fixe, un seul objet qui bouge et pas vite, mouvement plan...). Si tu as une cadence très lente (ou un mouvement très rapide) tu devras passer sur des trucs plus robuste (genre SURF). J'ai pas réussi à voir ta vidéo, donc je sais pas trop à quoi tu es confronté.
Bonne chance.
Marsh Posté le 02-06-2010 à 21:41:49
Merci
Marsh Posté le 02-06-2010 à 22:11:20
Non mais c'est bon Je savais que c'était une question conne.
Je demande juste parce que c'est ce qu'on utilisait en cours avec des vidéos de bactéries qui bougeaient dans tous les sens. Vu que le framerate était bas (ça bouge pas très vite une bactérie ) la FFT allait très bien, et donc je me demandais pourquoi il l'utilisait pas.
Marsh Posté le 02-06-2010 à 23:46:46
A ma connaissance, la TF peut être utile dans un cas : quand tu as une image qui présente du motion blur et que tu veux l'enlever, tu peux analyser ton image en fourrier, puis la déconvoluer par la quantité correspondant à ta translation. Attention hein, je dis pas que la TF sers à rien, je dis juste qu'elle sert plus à rien depuis la guerre de Corée. Dans ton cas, les bactéries étaient vues au microscope donc mouvement plan+caméra immobile. Ca, ajouté que fait que tu étais à l'école (on avait pas le temps de te bourrer le crâne avec des trucs utiles ) explique probablement l'utilisation de techniques préhistoriques. Pour info, c'est dans quelle formation qu'on apprends la TF comme technique de traitements des images du 21e siècle?
Marsh Posté le 03-06-2010 à 00:01:52
Personne à jamais dit que c'était du 21 ème siècle. Par contre dans un cours d'introduction au traitement d'image, donné dans un auditoire composé de gens ayant un parcours très varié (informaticiens, biologistes, électroniciens) , je trouve que c'est déjà pas mal..
Après j'ai jamais eu de cours plus poussés sur le traitement de vidéo, j'ai plutôt continué dans le traitement de son (et un petit peu d'images). Donc au revoir Fourier, bonjour wavelets.
Marsh Posté le 03-06-2010 à 00:08:53
bonsoir,
bon, premièrement je vous remercie pour vos attention à ma question.
snafu8 a écrit : |
-j'ai la réaliser par la méthode de classif de haar .
-pour connatitre les coordonnée du visage j'ai utilisé ce code
Code :
|
et pour déssiner la cylindre j'ai fais une appèle à une fonction
Code :
|
est ce que je peux considérer ces 2 point qui j'ai les utilisées pour déssiner la cylindre comme des points d'intérêts au lieu d'utiliser cette fct "cvGoodFeaturesToTrack"?
Marsh Posté le 03-06-2010 à 10:17:44
Bah effectivement, si à chaque image, tu es capable de localiser le centroïde du visage t'as pas besoin de le suivre hein. C'est toi qui voulais faire du KLT...
Marsh Posté le 03-06-2010 à 13:22:17
mon problème est que j'ai pas trouvé un article ou une explication décrire comment on applique KLT pour tracker le visage . tous ce que j'ai trouvé un article théorique
Marsh Posté le 03-06-2010 à 15:40:15
je voudrais connaitre comment on implémente la méthode de KL pour que être capable de tracker le visage (les matrices utilisés , j'ai lu qu'il existe 6 point de liberté dans visage 3 pour translation et 3 pour rotation
mais j'ai pas bien compris le rôle de ces points ainsi que comment on les implémente avec ou dans KLT ( je suis débutante dans le domaine de traitement d'image)
Marsh Posté le 03-06-2010 à 16:01:26
snafu8 a écrit : r |
1- j'ai pas compris l'idée de l'utilisation de cvGoodFeaturesToTrack(stuff) et ensuite cvCalcLkPyr(stuff)? (je crois que on ne peut pas utilisé cvGoodFeaturesToTrack avec la méthode de destruction de haar , parce que à ma connaissance ils font le même travail .
2- pourriez vous me citer ou expliques les autre méthodes de face tracking utilisées dans les cas où le mouvement et très rapide ? (parce que il est possible que la personne bouge sa tête rapidement )
Marsh Posté le 04-06-2010 à 07:51:15
je voudrais savoir aussi qu'elle est la meilleure cas camshift ou Kl?
Marsh Posté le 04-06-2010 à 19:09:16
Je vais tâcher de te répondre dans l'ordre (pour la prochaine fois, pense à éditer tes messages au lieu d'en rajouter, c'est plus facile à suivre).
Effectivement, l'objet que tu suis à 6 degré de liberté (ce n'est pas forcément vrai, la mobilité du cou doit être plus réduite que ça ,mais passons). Si ce que tu veux, c'est estimer le mouvement de la tête entre deux images, il faut que tu écrives toutes les équations du mouvement, pour connaître l'impact visuel du mouvement sur ton visage, d'observer ce déplacement et de remonter jusqu'au déplacement. Pour l'info, il n'est pas possible, en monoculaire, et sans contrainte supplémentaire de déterminer un mouvement 6D absolument. DOnc je pense que ton problème n'est pas d'estimer tout le mouvement de la tête.
CvGoodFeaturesToTrack(...) te permet d'extraire de l'image les points d'intérêt sur lesquels tu vas estimer le mouvement. Ta méthode de classification/détection ne te permet que de suivre le centroïde de la forme, ce n'est pas suffisant pour une estimation d'un mouvement autre que translationel 2D.
Je ne suis pas un spécialiste de face tracking désolé. Pour des méthodes de suivi plus robustes, tu devrais regarder du côté des points d'intérêts robustes (SIFT, SURF, Star...).
Pour l'implémentation de LK, pour le cas particulier du KLT, tout est dans la doc openCV http://opencv.willowgarage.com/doc [...] lflowpyrlk
Marsh Posté le 04-06-2010 à 20:31:00
merci pour votre aide snafu8
j'ai compris un peu maintenant.
Marsh Posté le 09-06-2010 à 13:14:30
je n'arrive pas à travaillé avec cvGoodFeaturesToTrack avec mon programme de tracking . j'ai programmé un code qui a pour but de suivi visage par KL mais j'ai pas utilisé la notion de point d'intérêt j'ai trouvé ici un exemple sur cvGoodFeaturesToTrack
http://opencv.willowgarage.com/doc [...] lflowpyrlk
et mon programme est le suivant
Code :
|
pourrize vous m'aider pour travaillé avec cvGoodFeaturesToTrack dans mon pgm. SVP
Marsh Posté le 09-06-2010 à 15:07:48
Je suis pas sûr de comprendre ce que tu fais (tu essaies de ré-implémenter LK?), mais ci après, un bout de code, qui fait appel au deux, que j'utilisais il fut un temps pour faire de l'estimation de mouvement :
Code :
|
Marsh Posté le 09-06-2010 à 15:27:12
snafu8 a écrit : Je suis pas sûr de comprendre ce que tu fais (tu essaies de ré-implémenter LK?) |
oui j'ai essayé de faire ça , le code précédent et un procédure qui implémente LK
mais j'ai pas utilisé dans cette implémentation les point d'intérêt j'ai travaillé avec toute le visage (qui est encadré par cvrect)
Code :
|
alors dans ma cas au lieu de faire comme vous
Code :
|
j'appele ma procédure
Code :
|
comme ça ?
Marsh Posté le 02-06-2010 à 20:29:43
bonjour,
je voudrais suivre un visage (face tracking) par une méthode cylindrique comme il montre ce vidéo
http://www.consortium.ri.cmu.edu/d [...] r_Only.avi
je travaille avec c++,opencv,opengl
pour cela j'ai fais les deux première étapes étapes :
1-détection de visage
2-construction d'une cylindre par Opengl
3-application de la cylindre sur le visage
il me reste que la méthode de suivi . il existe une méthode qui s'appelle KLT
pourriez vous m'aider pour connaitre comment je faire cette étape .