public override void Init(Size[] imageSizes)
        {
            Clean();

            _flowflags      |= CMSConstants.CV_LKFLOW_PYR_A_READY;
            validTrackPoints = false;
            _pwinsz          = new CvSize(10, 10);
            _status          = new byte[NumberOfTrackingPoints];
            imageSize.Width  = imageSizes[0].Width;
            imageSize.Height = imageSizes[0].Height;

            _last_track_points    = new CvPoint2D32f[NumberOfTrackingPoints];
            _current_track_points = new CvPoint2D32f[NumberOfTrackingPoints];

            _criteria = new CvTermCriteria(CMSConstants.CV_TERMCRIT_ITER | CMSConstants.CV_TERMCRIT_EPS, 20, 0.03);

            _curFrame = CvImageWrapper.CreateImage(imageSize, PixelDepth, PixelColorChannels);

            _grey = CvImageWrapper.CreateImage(imageSize, PixelDepth, PixelChannels);

            _prev_grey = CvImageWrapper.CreateImage(imageSize, PixelDepth, PixelChannels);

            _pyramid = CvImageWrapper.CreateImage(imageSize, PixelDepth, PixelChannels);

            _prev_pyramid = CvImageWrapper.CreateImage(imageSize, PixelDepth, PixelChannels);

            _swap_temp = CvImageWrapper.CreateImage(imageSize, PixelDepth, PixelChannels);

            eyeLocator = new EyeLocator(EyeLocationImageCount);
            eyeLocator.Reset();

            eyeImagePoints = new PointF[2];

            CMSTrackingSuiteAdapter.SendMessage(InitMessage);
        }
Esempio n. 2
0
        public void StateChange(CMSState state)
        {
            lock (mutex)
            {
                if (state.Equals(CMSState.Tracking) ||
                    state.Equals(CMSState.ControlTracking))
                {
                    CMSTrackingSuiteAdapter.SendMessage("");
                }

                if (trackingModule != null)
                {
                    trackingModule.State = state;
                    trackingModule.StateChange(state);
                }

                if (mouseControlModule != null)
                {
                    mouseControlModule.State = state;
                    mouseControlModule.StateChange(state);
                }

                if (clickControlModule != null)
                {
                    clickControlModule.State = state;
                    clickControlModule.StateChange(state);
                }
            }
        }
Esempio n. 3
0
        public override void Init(Size[] imageSizes)
        {
            eyeLocator = new EyeLocator(3);
            eyeLocator.Reset();
            eyeLocatorTickCount = Environment.TickCount;
            lastClickPoint      = Point.Empty;

            int imageWidth  = imageSizes[0].Width;
            int imageHeight = imageSizes[0].Height;

            lock (mutex)
            {
                CleanStandard();
                InitStandard(imageWidth, imageHeight);
            }

            CMSTrackingSuiteAdapter.SendMessage(CMSConstants.PLEASE_CLICK_TF);
        }
Esempio n. 4
0
        public override void Init(Size [] imageSizes)
        {
            Clean();

            int imageWidth  = imageSizes[0].Width;
            int imageHeight = imageSizes[0].Height;

            eyeLocator = new EyeLocator(3);
            eyeLocator.Reset();
            eyeLocatorTickCount = Environment.TickCount;

            _flowflags      |= CMSConstants.CV_LKFLOW_PYR_A_READY;
            validTrackPoint  = false;
            _pwinsz          = new CvSize(10, 10);
            _status          = new byte[1];
            imageSize.Width  = imageWidth;
            imageSize.Height = imageHeight;

            _last_track_points    = new CvPoint2D32f[1];
            _current_track_points = new CvPoint2D32f[1];

            _criteria = new CvTermCriteria(CMSConstants.CV_TERMCRIT_ITER | CMSConstants.CV_TERMCRIT_EPS, 20, 0.03);

            _curFrame = CvImageWrapper.CreateImage(imageSize, PIXEL_DEPTH, PIXEL_COLOR_CHANNELS);

            _grey = CvImageWrapper.CreateImage(imageSize, PIXEL_DEPTH, PIXEL_CHANNELS);

            _prev_grey = CvImageWrapper.CreateImage(imageSize, PIXEL_DEPTH, PIXEL_CHANNELS);

            _pyramid = CvImageWrapper.CreateImage(imageSize, PIXEL_DEPTH, PIXEL_CHANNELS);

            _prev_pyramid = CvImageWrapper.CreateImage(imageSize, PIXEL_DEPTH, PIXEL_CHANNELS);

            _swap_temp = CvImageWrapper.CreateImage(imageSize, PIXEL_DEPTH, PIXEL_CHANNELS);

            CMSTrackingSuiteAdapter.SendMessage(CMSConstants.PLEASE_CLICK_TF);
        }
        public void Update(FastBitmap img, Point eyeLocation, float timeElapsed)
        {
            lock ( templateMutex )
            {
                if (IsReady)
                {
                    Point searchAreaStartPoint = GetSearchAreaStartPoint(eyeLocation);

                    try
                    {
                        img.GetIntensityMap(searchAreaStartPoint.X, searchAreaStartPoint.Y,
                                            initialSearchintensityMapWidth, initialSearchintensityMapHeight, initialSearchIntensityMap);

                        Point   tempPoint;
                        float[] refinedSearchNccScores;

                        SetInitialNccSearchTemplates(eyeLocation);

                        refinedSearchNccScores = openEyeTemplate.GetTopNccScores(initialSearchTemplates, refinedSearchIndices);


                        inputOpenEyeNcc = float.NegativeInfinity;

                        for (int i = 0; i < refinedSearchIndices.Length; ++i)
                        {
                            FastBitmap.NccTemplate tempTemplate = initialSearchTemplates[refinedSearchIndices[i]];
                            float tempNcc = img.GetNccScore(openEyeTemplate, new Rectangle(tempTemplate.X - (stepAmount - 1),
                                                                                           tempTemplate.Y - (stepAmount - 1), (2 * stepAmount) - 1, (2 * stepAmount) - 1), out tempPoint);

                            if (tempNcc > inputOpenEyeNcc)
                            {
                                inputOpenEyeNcc = tempNcc;
                                eyeOpenLoc      = tempPoint;
                            }
                        }

                        refinedSearchNccScores = closedEyeTemplate.GetTopNccScores(initialSearchTemplates, refinedSearchIndices);

                        inputClosedEyeNcc = float.NegativeInfinity;

                        for (int i = 0; i < refinedSearchIndices.Length; ++i)
                        {
                            FastBitmap.NccTemplate tempTemplate = initialSearchTemplates[refinedSearchIndices[i]];
                            float tempNcc = img.GetNccScore(closedEyeTemplate, new Rectangle(tempTemplate.X - (stepAmount - 1),
                                                                                             tempTemplate.Y - (stepAmount - 1), (2 * stepAmount) - 1, (2 * stepAmount) - 1), out tempPoint);

                            if (tempNcc > inputClosedEyeNcc)
                            {
                                inputClosedEyeNcc = tempNcc;
                                eyeClosedLoc      = tempPoint;
                            }
                        }
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        // Set as eye open since this performs no action, set open eye location as estimated location
                        inputOpenEyeNcc   = 1;
                        eyeOpenLoc        = eyeLocation;
                        inputClosedEyeNcc = 0;
                    }
                }
                else
                {
                    if (!xDistanceBetweenEyesSet)
                    {
                        throw new InvalidOperationException("Must call SetXDistanceBetweenEyes before calling Update");
                    }
                    try
                    {
                        initializationTemplates[nextInitializationImageIndex] = img.GetNccTemplate(GetTemplateRectange(eyeLocation));
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        return;
                    }

                    if (closeEyeMessageTimer > 0)
                    {
                        closeEyeMessageTimer -= timeElapsed;
                        inputOpenEyeNcc       = img.GetNccScore(openEyeTemplate, GetFindingTemplateSearchArea(eyeLocation), 1, out eyeOpenLoc);
                    }
                    else
                    {
                        if (openEyeTemplate == null)
                        {
                            for (int i = 0; i < nextInitializationImageIndex; ++i)
                            {
                                initializationNccScores[i, nextInitializationImageIndex]
                                      = initializationNccScores[nextInitializationImageIndex, i]
                                      = initializationTemplates[i].GetNcc(initializationTemplates[nextInitializationImageIndex]);
                            }
                        }
                        else
                        {
                            inputOpenEyeNcc = img.GetNccScore(openEyeTemplate, GetFindingTemplateSearchArea(eyeLocation), 1, out eyeOpenLoc);

                            initializationNccScores[nextInitializationImageIndex, 0]
                                = openEyeTemplate.GetNcc(initializationTemplates[nextInitializationImageIndex]);
                        }

                        initializationNccScores[nextInitializationImageIndex, nextInitializationImageIndex] = 1;

                        nextInitializationImageIndex++;

                        if (InitializationImageCount == nextInitializationImageIndex)
                        {
                            if (openEyeTemplate == null)
                            {
                                int bestIndex = GetBestRepresentativeTemplateIndex();
                                openEyeTemplate = initializationTemplates[bestIndex];
                                cmsTrackingSuiteAdapter.SendMessage(CloseEyesMessage);
                                closeEyeMessageTimer = CloseEyeMessageStartTime;

                                if (CMSLogger.CanCreateLogEvent(false, true, false, "BlinkLinkLogTemplatesEvent"))
                                {
                                    BlinkLinkLogTemplatesEvent logEvent = new BlinkLinkLogTemplatesEvent();
                                    logEvent.IsOpenTemplates  = true;
                                    logEvent.SelectedTemplate = bestIndex;
                                    logEvent.SetTemplates(initializationTemplates);
                                    CMSLogger.SendLogEvent(logEvent);
                                }
                            }
                            else
                            {
                                float nccScore;
                                int   bestIndex = GetFurtherestFromEyeOpen(out nccScore);
                                FastBitmap.NccTemplate representativeTemplate = initializationTemplates[bestIndex];

                                if (nccScore <= ClassDifferenceThreshold)
                                {
                                    closedEyeTemplate = representativeTemplate;

                                    if (CMSLogger.CanCreateLogEvent(false, true, false, "BlinkLinkLogTemplatesEvent"))
                                    {
                                        BlinkLinkLogTemplatesEvent logEvent = new BlinkLinkLogTemplatesEvent();
                                        logEvent.IsOpenTemplates  = false;
                                        logEvent.SelectedTemplate = bestIndex;
                                        logEvent.SetTemplates(initializationTemplates);
                                        CMSLogger.SendLogEvent(logEvent);
                                    }
                                }
                            }

                            nextInitializationImageIndex = 0;
                        }
                    }
                }
            }
        }
 public override void Init(System.Drawing.Size [] sizes)
 {
     CMSTrackingSuiteAdapter.SendMessage(CMSConstants.EMPTY_TRACKING_SUITE_MESSAGE);
 }