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)) );
		
	}
Example #2
0
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();
		}
	}
}