Exemplo n.º 1
0
        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)));
        }
Exemplo n.º 2
0
        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);
        }