suivre un élève dans une vidéo
Je suis en train de travailler sur un projet visant à piste pupille. Pour cela, j'ai fait un tête-monté système qui capture les images de l'œil. Terminé avec le matériel de la partie je suis frappé dans le logiciel partie. Je suis à l'aide de opencv. S'il vous plaît laissez-moi savoir ce que serait le moyen le plus efficace pour le suivi de l'élève. Houghcircles n'a pas performant.
Après que j'ai aussi essayé avec HSV filtre et voici le code et
lien vers la capture d'écran de l'image raw et traitées. Merci de m'aider à résoudre ce problème. Le lien contient également la vidéo de la pupille que je suis à l'aide de ce code.
Code:
include "cv.h"
include"highgui.h"
IplImage* GetThresholdedImage(IplImage* img)
{
IplImage *imgHSV=cvCreateImage(cvGetSize(img),8,3);
cvCvtColor(img,imgHSV,CV_BGR2HSV);
IplImage *imgThresh=cvCreateImage(cvGetSize(img),8,1);
cvInRangeS(imgHSV,cvScalar(0, 84, 0, 0),cvScalar(179, 256, 11, 0),imgThresh);
cvReleaseImage(&imgHSV);
return imgThresh;
}
void main(int *argv,char **argc)
{
IplImage *imgScribble= NULL;
char c=0;
CvCapture *capture;
capture=cvCreateFileCapture("main.avi");
if(!capture)
{
printf("Camera could not be initialized");
exit(0);
}
cvNamedWindow("Simple");
cvNamedWindow("Thresholded");
while(c!=32)
{
IplImage *img=0;
img=cvQueryFrame(capture);
if(!img)
break;
if(imgScribble==NULL)
imgScribble=cvCreateImage(cvGetSize(img),8,3);
IplImage *timg=GetThresholdedImage(img);
CvMoments *moments=(CvMoments*)malloc(sizeof(CvMoments));
cvMoments(timg,moments,1);
double moment10 = cvGetSpatialMoment(moments, 1, 0);
double moment01 = cvGetSpatialMoment(moments, 0, 1);
double area = cvGetCentralMoment(moments, 0, 0);
static int posX = 0;
static int posY = 0;
int lastX = posX;
int lastY = posY;
posX = moment10/area;
posY = moment01/area;
//Print it out for debugging purposes
printf("position (%d,%d)\n", posX, posY);
//We want to draw a line only if its a valid position
if(lastX>0 && lastY>0 && posX>0 && posY>0)
{
//Draw a yellow line from the previous point to the current point
cvLine(imgScribble, cvPoint(posX, posY), cvPoint(lastX, lastY), cvScalar(0,255,255), 5);
}
//Add the scribbling image and the frame...
cvAdd(img, imgScribble, img);
cvShowImage("Simple",img);
cvShowImage("Thresholded",timg);
c=cvWaitKey(3);
cvReleaseImage(&timg);
delete moments;
}
//cvReleaseImage(&img);
cvDestroyWindow("Simple");
cvDestroyWindow("Thresholded");
}
Je suis en mesure de suivre de l'œil et de trouver les coordonnées du centre de l'élève précisément.
J'ai d'abord thresholded l'image prise par la tête de caméra. Après que j'ai utilisé contour de l'algorithme de recherche puis-je trouver le centre de gravité de tous les contours. Cela me donne les coordonnées du centre de la pupille, cette méthode fonctionne bien en temps réel et aussi la détection de clignement de l'œil avec une très bonne précision.
Maintenant, mon objectif est d'intégrer cette fonctionnalité dans un jeu(un jeu de course). Dans lequel, Si je regarde à gauche/à droite, puis la voiture se déplace de gauche à droite et Si je cligne des yeux la voiture ralentit. Comment pourrais-je procéder maintenant??? Ai-je besoin d'un moteur de jeu pour le faire?
J'ai entendu parler de l'open source, les moteurs de jeu compatible avec visual studio 2010(unité etc.). Est-ce faisable??? Si oui, comment dois-je procéder ?
source d'informationauteur siso
Vous devez vous connecter pour publier un commentaire.
Je suis l'un des développeurs de SimpleCV. Nous maintenons un open-source bibliothèque python pour la vision par ordinateur. Vous pouvez le télécharger à SimpleCV.org. SimpleCV est grande pour résoudre ces types de problèmes par le piratage sur la ligne de commande. J'ai été en mesure d'extraire de l'élève en seulement quelques lignes de code. Ici, vous allez:
Voici les résultats.
Afin que vos prochaines étapes consistent à utiliser une sorte de tracker, comme un Kalmann filtre, pour suivre l'élève de manière robuste. Vous souhaitez peut-être le modèle de l'œil comme une sphère et un suivi de l'élève le centre de gravité dans sphereical coordonnées (c'est à dire theta et phi). Vous aurez aussi envie de écrire un peu de code pour détecter clin événements de sorte que le système ne va pas tout déglingués lorsque l'utilisateur clignote. Je vous suggère d'utiliser un habile bord détecteur de trouver le plus grand des lignes horizontales dans l'image et en supposant que ce sont les paupières. J'espère que cette aide, et s'il vous plaît laissez-nous savoir comment votre travail progresse.
Tout dépend de la bonne santé de votre système doit être. Si c'est 2 mois à l'université de projet, c'est ok pour trouver et suivre quelques gouttes ou d'utiliser une solution toute prête, comme Kscottz recommandé.
Mais si vous visez à avoir une plus grave du système, vous devez aller plus loin.
Une approche que je vous recommande est de détecter le visage de points d'intérêt. Un bon exemple est Actif l'Apparence des Modèles, ce qui semble être le meilleur au suivi des visages
http://www2.imm.dtu.dk/~aam/
et
http://www.youtube.com/watch?v=M1iu__viJN8
Il nécessite une bonne compréhension des algorithmes de vision par ordinateur, de bonnes compétences en programmation, et un peu de travail. Mais le résultat en vaudra la peine.
Et ne vous laissez pas berner par le fait que les démonstrations montrent l'ensemble-le suivi du visage. Vous pouvez vous entraîner pour le suivi de n'importe quoi: des mains, des yeux, des fleurs ou des feuilles, etc.
(Avant de commencer avec AAM, vous pouvez lire plus sur les autres en face des algorithmes de suivi. Ils peuvent être mieux pour vous)
C'est ma solution, je suis en mesure de suivre de l'œil et de trouver les coordonnées du centre de l'élève précisément.
J'ai d'abord thresholded l'image prise par la tête de caméra. Après que j'ai utilisé contour de l'algorithme de recherche puis-je trouver le centre de gravité de tous les contours. Cela me donne les coordonnées du centre de la pupille, cette méthode fonctionne bien en temps réel et aussi la détection de clignement de l'œil avec une très bonne précision.