public PointF[][] Fit(IImage image) { lock (syncLock) { var faces = new VectorOfRect(faceDetector.DetectBoxFaces(image)); var facesLandmarks = new VectorOfVectorOfPointF(); if (!facemark.Fit(image, faces, facesLandmarks)) { throw new ArgumentException("No landamarks point detected for input image"); } var face = faces.ToArray().First(); var landmarks = facesLandmarks.ToArrayOfArray().First(); var componentLandmarkPoints = new PointF[6][]; // extract landarmarks points for each component componentLandmarkPoints[0] = GetComponentPoints(landmarks, EYEBROWS_POINT_RANGE); componentLandmarkPoints[1] = GetComponentPoints(landmarks, EYES_POINT_RANGE); componentLandmarkPoints[2] = GetComponentPoints(landmarks, NOSE_POINT_RANGE); componentLandmarkPoints[3] = GetComponentPoints(landmarks, MOUTH_POINT_RANGE); componentLandmarkPoints[4] = landmarks; // face bounding box componentLandmarkPoints[5] = new PointF[] { new PointF(face.Left, face.Top), new PointF(face.Right, face.Bottom) }; return(componentLandmarkPoints); } }