public FaceRetrieveResult FindFace(Mat image) { int size = Math.Min(image.Height, image.Width) / 8; Rectangle[] faces = faceClassifier.DetectMultiScale(image, 1.15, 7, new Size(size, size)); if (faces.Length <= 0) { return(FaceRetrieveResult.EmptyResult); } return(new FaceRetrieveResult(true, RectangleHelper.GetMaximumRectangle(faces))); }
public void DetectFace(Mat mat, out FaceRetrieveResult face, out EyeRetrieveResult eye) { Rectangle[] faceDetected = faceClassifier.DetectMultiScale(mat, faceScaleFactor, faceMinNeighbors, faceMinSize); if (faceDetected.Length <= 0) { face = FaceRetrieveResult.EmptyResult; eye = EyeRetrieveResult.EmptyResult; return; } Rectangle largestFace = RectangleHelper.GetMaximumRectangle(faceDetected); face = new FaceRetrieveResult(true, largestFace); searchRegionExtractor.GetSearchRegion(largestFace, out Rectangle leftSearchRegion, out Rectangle rightSearchRegion); leftSearchRegion.Offset(largestFace.X, largestFace.Y); rightSearchRegion.Offset(largestFace.X, largestFace.Y); bool hasLeftEye = false; Rectangle leftEyeRegion = default; using (Mat eyeSearchRegion = new Mat(mat, leftSearchRegion)) { Rectangle[] eyesDetected = eyeClassifier.DetectMultiScale(eyeSearchRegion, eyeScaleFactor, eyeMinNeighbors, eyeMinSize); if (eyesDetected.Length > 0) { hasLeftEye = true; leftEyeRegion = RectangleHelper.GetMaximumRectangle(eyesDetected); leftEyeRegion.Offset(leftSearchRegion.X, leftSearchRegion.Y); } } bool hasRightEye = false; Rectangle rightEyeRegion = default; using (Mat eyeSearchRegion = new Mat(mat, rightSearchRegion)) { Rectangle[] eyesDetected = eyeClassifier.DetectMultiScale(eyeSearchRegion, eyeScaleFactor, eyeMinNeighbors, eyeMinSize); if (eyesDetected.Length > 0) { hasRightEye = true; rightEyeRegion = RectangleHelper.GetMaximumRectangle(eyesDetected); rightEyeRegion.Offset(rightSearchRegion.X, rightSearchRegion.Y); } } eye = new EyeRetrieveResult(hasLeftEye, leftEyeRegion, hasRightEye, rightEyeRegion); }