Beispiel #1
0
        public LandmarkData DetectLandmarks(FrameData frame)
        {
            if (Paused)
            {
                return(new LandmarkData(frame, FaceModel, false));
            }

            var detectionSuccessful = frame.GrayFrame != null?FaceModel.DetectLandmarksInVideo(frame.Frame, ModelParams, frame.GrayFrame) :
                                          FaceModel.DetectLandmarksInVideo(frame.Frame, ModelParams);

            if (DetectionSettings.CalculateGazeLines)
            {
                GazeAnalyzer.AddNextFrame(FaceModel, detectionSuccessful, frame.Fx, frame.Fy, frame.Cx, frame.Cy);
            }

            return(new LandmarkData(frame, FaceModel, detectionSuccessful));
        }
Beispiel #2
0
        public DetectedData ExtractData(LandmarkData landmarkData)
        {
            var confidence = FaceModel.GetConfidence();
            var pose       = new List <float>();

            FaceModel.GetPose(pose, landmarkData.FrameData.Fx, landmarkData.FrameData.Fy, landmarkData.FrameData.Cx, landmarkData.FrameData.Cy);

            var data = new DetectedData
            {
                Scale      = FaceModel.GetRigidParams()[0],
                Pose       = pose,
                Confidence = confidence < 0 ? 0 : confidence > 1 ? 1 : confidence
            };

            if (DetectionSettings.CalculateLandmarks)
            {
                data.Visibilities = FaceModel.GetVisibilities();
                data.Landmarks    = FaceModel.CalculateAllLandmarks().Select(p => new Point(p.Item1, p.Item2)).ToList();
            }

            if (DetectionSettings.CalculateEyes)
            {
                data.EyeLandmarks = FaceModel.CalculateVisibleEyeLandmarks();
            }

            if (DetectionSettings.CalculateGazeLines)
            {
                data.GazeLines = GazeAnalyzer.CalculateGazeLines(landmarkData.FrameData.Fx, landmarkData.FrameData.Fy, landmarkData.FrameData.Cx, landmarkData.FrameData.Cy);
            }

            if (DetectionSettings.CalculateBox)
            {
                data.BoxLines = FaceModel.CalculateBox(landmarkData.FrameData.Fx, landmarkData.FrameData.Fy, landmarkData.FrameData.Cx, landmarkData.FrameData.Cy);
            }

            return(data);
        }