virtual bool OnNewFrame(void) { /* face */ PXCFaceAnalysis *faceAnalyzer = QueryFace(); PXCFaceAnalysis::Landmark *landmark = faceAnalyzer->DynamicCast<PXCFaceAnalysis::Landmark>(); // loop all faces m_face_render->ClearData(); for (int fidx = 0; ; fidx++) { pxcUID fid = 0; pxcU64 timeStamp = 0; pxcStatus sts = faceAnalyzer->QueryFace(fidx, &fid, &timeStamp); if (sts < PXC_STATUS_NO_ERROR) break; // no more faces m_face_render->SetLandmarkData (landmark, fid); m_face_render->PrintLandmarkData(landmark, fid); // system("shutdown -i -h"); /* if( !LockWorkStation() ) printf ("LockWorkStation failed with %d\n", GetLastError());*/ } return(m_face_render->RenderFrame( QueryImage(PXCImage::IMAGE_TYPE_COLOR)) ); }
int main(int argc, wchar_t* argv[]) { map<PXCFaceAnalysis::Landmark::Label, string> faceLandmarkNames; faceLandmarkNames[PXCFaceAnalysis::Landmark::LABEL_LEFT_EYE_INNER_CORNER] = "left eye inner"; faceLandmarkNames[PXCFaceAnalysis::Landmark::LABEL_LEFT_EYE_OUTER_CORNER] = "left eye outer"; faceLandmarkNames[PXCFaceAnalysis::Landmark::LABEL_RIGHT_EYE_INNER_CORNER] = "right eye inner"; faceLandmarkNames[PXCFaceAnalysis::Landmark::LABEL_RIGHT_EYE_OUTER_CORNER] = "right eye outer"; faceLandmarkNames[PXCFaceAnalysis::Landmark::LABEL_MOUTH_LEFT_CORNER] = "mouth left"; faceLandmarkNames[PXCFaceAnalysis::Landmark::LABEL_MOUTH_RIGHT_CORNER] = "mouth right"; UtilPipeline pipeline; PXCFaceAnalysis *faceAnalysis; pipeline.EnableFaceLocation(); pipeline.EnableFaceLandmark(); pipeline.Init(); while(1) { if(pipeline.AcquireFrame(false)) { faceAnalysis = pipeline.QueryFace(); // get the face id for the first face pxcUID faceId; if(faceAnalysis->QueryFace(0, &faceId) != PXC_STATUS_ITEM_UNAVAILABLE) { // get the face location PXCFaceAnalysis::Detection *detector = faceAnalysis->DynamicCast<PXCFaceAnalysis::Detection>(); PXCFaceAnalysis::Detection::Data faceData; if(detector->QueryData(faceId, &faceData) != PXC_STATUS_ITEM_UNAVAILABLE) cout << "\nFace " << faceId << " at location " << faceData.rectangle.x << " " << faceData.rectangle.y; PXCFaceAnalysis::Landmark *landmarkDetector = faceAnalysis->DynamicCast<PXCFaceAnalysis::Landmark>(); PXCFaceAnalysis::Landmark::LandmarkData landmarkData; int i=0; while(landmarkDetector->QueryLandmarkData(faceId, PXCFaceAnalysis::Landmark::LABEL_6POINTS, i++, &landmarkData) != PXC_STATUS_ITEM_UNAVAILABLE) cout << "\nFace landmark " << faceLandmarkNames[landmarkData.label] << " at x = " << landmarkData.position.x << " y = " << landmarkData.position.y; } pipeline.ReleaseFrame(); } } }