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); }
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); }
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); }