Ejemplo n.º 1
0
        /// <summary>
        /// Retorna o estado de rastreamento do gesto atual
        /// </summary>
        /// <param name="esqueletoUsuario"></param>
        /// <returns></returns>
        public override TrackState Track(Skeleton esqueletoUsuario)
        {
            if (esqueletoUsuario == null)
            {
                RestartTracker();
            }

            if (ValidPosition(esqueletoUsuario))
            {
                Estado = TrackState.EM_EXECUCAO;

                if (CurrentKeyFrame.Value == KeyFrames.Last.Value)
                {
                    Estado = TrackState.IDENTIFICADO;
                }

                else
                {
                    if (FrameCounter >= CurrentKeyFrame.Value.QuadroLimiteInferior && FrameCounter <= CurrentKeyFrame.Value.QuadroLimiteSuperior)
                    {
                        NextKeyFrame();
                    }

                    else if (FrameCounter < CurrentKeyFrame.Value.QuadroLimiteInferior)
                    {
                        Tracking();
                    }

                    else if (FrameCounter > CurrentKeyFrame.Value.QuadroLimiteSuperior)
                    {
                        RestartTracker();
                    }
                }
            }

            else if (CurrentKeyFrame.Value.QuadroLimiteSuperior < FrameCounter)
            {
                RestartTracker();
            }

            else
            {
                Tracking();
            }

            var index = KeyFrames.TakeWhile(n => n != CurrentKeyFrame.Value).Count();

            ConsoleLog.WriteLog("(" + index + ")" + CurrentKeyFrame.Value.PoseChave.ToString() + " / " + Estado
                                + " / " + FrameCounter, ConsoleStatesEnum.NOTICE);

            return(Estado);
        }