Sto lavorando a un progetto destinato a pupilla occhio traccia. Per questo ho realizzato un sistema montato sulla testa che cattura le immagini dell'occhio. Completato con la parte hardware I am colpito nel software parte. Sto usando opencv. Per favore fatemi sapere quale sarebbe il modo più efficiente per seguire l'allievo. Houghcircles non ha funzionato bene.pupilla occhio traccia in un video
Dopo che ho anche provato con HSV filtro e qui è il codice e collegamento schermata del grezzo immagine e trasformati uno. Per favore aiutami a risolvere questo problema. Il link contiene anche il video della pupilla dell'occhio che sto usando in questo codice.
Codice:
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");
}
io sono in grado di monitorare l'occhio e trovare il centro coordinate della pupilla con precisione.
Innanzitutto ho messo a segno l'immagine presa dalla telecamera montata sulla testa. Dopo di che ho usato l'algoritmo per la ricerca dei contorni, quindi trovo il centroide di tutti i contorni. Questo mi dà le coordinate del centro della pupilla dell'occhio, questo metodo sta funzionando bene in tempo reale e anche rilevando l'ammiccamento degli occhi con una precisione molto buona.
Ora, il mio obiettivo è incorporare questa funzione in un gioco (un gioco di corse). In cui, se guardo a sinistra/destra, l'auto si sposta a sinistra/destra e se lampeggia l'auto rallenta. Come posso procedere ora ??? Avrei bisogno di un motore di gioco per farlo?
Ho sentito parlare di alcuni motori di gioco open source compatibili con Visual Studio 2010 (unità ecc.). È fattibile ??? Se sì, come dovrei procedere?
Questa dovrebbe essere una nuova domanda. –
ok, eccolo http://stackoverflow.com/questions/8200031/transfer-output-of-opencv-to-input-for-a-game-engine – siso