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.

https://picasaweb.google.com/118169326982637604860/16November2011?authuser=0&authkey=Gv1sRgCPKwwrGTyvX1Aw&feat=directlink

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