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