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