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