private Task <RetrieveResult> FindFaceEyesIrisAsync()
        {
            return(Task <RetrieveResult> .Run(() =>
            {
                detector.DetectFace(grayFrame, out FaceRetrieveResult face, out EyeRetrieveResult eye);
                if (!face.HasFace)
                {
                    return null;
                }
                bool hasLeftPupil = false;
                CIRCLE leftPupil = default;
                if (eye.HasLeftEye)
                {
                    RECT leftEye = eye.LeftEye;
                    int offsety = (int)(leftEye.Height * 0.2);
                    int offsetx = (int)(leftEye.Width * 0.1);
                    leftEye.Offset(offsetx, offsety);
                    leftEye.Height = leftEye.Height - offsety - offsety;

                    leftPupil = Iris.SearchInnerBoundary(grayBytes, img_width, img_height, leftEye.Left, leftEye.Top, leftEye.Right, leftEye.Bottom);
                }
                bool hasRightPupil = false;
                CIRCLE rightPupil = default;
                if (eye.HasRightEye)
                {
                    RECT rightEye = eye.RightEye;
                    int offsety = (int)(rightEye.Height * 0.2);
                    int offsetx = (int)(rightEye.Width * 0.1);
                    rightEye.Offset(-offsetx, offsety);
                    rightEye.Height = rightEye.Height - offsety - offsety;
                    rightPupil = Iris.SearchInnerBoundary(grayBytes, img_width, img_height, rightEye.Left, rightEye.Top, rightEye.Right, rightEye.Bottom);
                }
                return new RetrieveResult()
                {
                    Face = face,
                    Eye = eye,
                    Pupil = new PupilRetrieveResult(hasLeftPupil, leftPupil, hasRightPupil, rightPupil),
                };
            }));
        }