public List<Face> QueryFaces()
        {
            List<Face> faces = new List<Face>();

            PXCMFaceAnalysis faceAnalysis = QueryFace();
            PXCMFaceAnalysis.Detection faceLocation = (PXCMFaceAnalysis.Detection)faceAnalysis.DynamicCast(PXCMFaceAnalysis.Detection.CUID);
            PXCMFaceAnalysis.Landmark faceLandmark = (PXCMFaceAnalysis.Landmark)faceAnalysis.DynamicCast(PXCMFaceAnalysis.Landmark.CUID);

            for (uint fidx = 0; ; fidx++)
            {
                int faceId = 0;
                ulong timeStamp;

                pxcmStatus sts = faceAnalysis.QueryFace(fidx, out faceId, out timeStamp);
                if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) break; // no more faces

                PXCMFaceAnalysis.Detection.Data faceLocationData;
                pxcmStatus locationStatus = faceLocation.QueryData(faceId, out faceLocationData);
                uint detectionConfidence = faceLocationData.confidence;

                if (locationStatus >= pxcmStatus.PXCM_STATUS_NO_ERROR && faceLocationData.fid != 0)
                {
                    Face face = new Face(faceLocationData);
                    // Face landmarks

                    PXCMFaceAnalysis.Landmark.ProfileInfo landmarkProfile;
                    faceLandmark.QueryProfile(1, out landmarkProfile);
                    faceLandmark.SetProfile(ref landmarkProfile);

                    PXCMFaceAnalysis.Landmark.LandmarkData[] faceLandmarkData = new PXCMFaceAnalysis.Landmark.LandmarkData[7];
                    pxcmStatus landmarkStatus = faceLandmark.QueryLandmarkData(faceId, PXCMFaceAnalysis.Landmark.Label.LABEL_7POINTS, faceLandmarkData);
                    face.AddLandmarks(faceLandmarkData);
                    faces.Add(face);
                }
            }

            return faces;
        }