Пример #1
0
        public bool Add(DetectResult value)
        {
            if (value.SharpnessValue <= _minValue)
            {
                return(false);
            }

            if (_results.Count < _minCount)
            {
                _results.Add(value);
                _results   = _results.OrderByDescending(x => x.SharpnessValue).ToList();
                _bestValue = _results.OrderByDescending(x => x.SharpnessValue).FirstOrDefault();
                return(true);
            }

            if (_results.Count < _minCount + _delta)
            {
                var min = _results.Last();
                if (min.SharpnessValue < value.SharpnessValue)
                {
                    _results.Add(value);
                    _results   = _results.OrderByDescending(x => x.SharpnessValue).ToList();
                    _bestValue = _results.OrderByDescending(x => x.SharpnessValue).FirstOrDefault();
                    return(true);
                }
            }
            return(false);
        }
Пример #2
0
        public DetectResult DetectFace(Image <Bgr, byte> imageFrame, bool skipClosedEyes = false)
        {
            var grayframe = imageFrame.Convert <Gray, byte>();

            Rectangle[] faces;
            lock (Locker)
            {
                faces = FaceCascadeClassifier.DetectMultiScale(grayframe, 1.3, 3, new Size(200, 200), Size.Empty);
            }

            if (faces == null || faces.Length != 1)
            {
                return(null);
            }

            var face = faces[0];

            var faceX = GetWithPadding(face, imageFrame.Width, imageFrame.Height);

            var faceImage = imageFrame.Copy(faceX);

            //if (skipClosedEyes)
            //{
            //    EyesNotClosed(faceImage);
            //}

            var result = new DetectResult
            {
                DetectedRectangle = faceX,
                DetectedImage     = faceImage,
                SharpnessValue    = CalculateBlur2(faceImage)
            };

            return(result);
        }
Пример #3
0
 private void DrawDetectedImage(Image <Bgr, byte> imageFrame, DetectResult detected, int x, int y)
 {
     imageFrame.ROI = new Rectangle(x, y, detected.DetectedRectangle.Width, detected.DetectedRectangle.Height); // a rectangle
     detected.DetectedImage.CopyTo(imageFrame);
     imageFrame.ROI = Rectangle.Empty;
     imageFrame.Draw(new Rectangle(x, y, detected.DetectedRectangle.Width, detected.DetectedRectangle.Height), new Bgr(_sideImageFrameColor), 2);
 }