GetFacePointsInColorSpace returning all 0s multiple times a second


  • In the FaceBasics-D2D example sometimes GetFacePointsInColorSpace() will return all 0s but get_FaceBoundingBoxInColorSpace() is still returning valid results on the same frame. Is this expected behavior? Is checking for all 0s a fair error check for this case?

    What about GetFaceProperties()? In the same frame it's returning DetectionResult_No for everything.

    The issue I'm facing is this data is flashing to 0s/No constantly (multiple times a second) and I need a way to know if I should just ignore the result and keep the previous frames result, vs. using it as new valid data the Kinect has detected.

    • Edited by mm bb Monday, January 26, 2015 10:03 PM
    Monday, January 26, 2015 9:59 PM

All replies

  • Yes it is correct, it will flicker based on many factors. Just ensure is setup in the optimal configuration(6 feet from the floor pointing down) as this will stabilize the body tracking which is a key factor when the face api's are pulling joint values. Additionally, you will want to ensure color is running 30fps(not in low light) and there is minimal IR interference(don't setup near a window).

    You just need to setup a filter that will take every frame and average the good data to provide your application a clean set of values.

    Carmine Sirignano - MSFT

    Tuesday, January 27, 2015 6:06 PM
  • Ok, for GetFacePointsInColorSpace() that makes sense since I can look for all 0s and determine it's an invalid frame and not add it to my average.

    However for GetFaceProperties() having 'DetectionResult_No' for all the values is a valid result. Is there a 1:1 correlation between valid/invalid results in GetFacePointsInColorSpace() and GetFaceProperties(). If not, how can I tell if all 'DetectionResult_No' results means that it's invalid, or valid but the state just happens to be 'DetectionResult_No' for all entries?

    It would be better if the HRESULT told us the validity of these calls, or I guess if DetectionResult_Unknown is used, but I don't think that's the case right now, is it?

    Friday, January 30, 2015 8:34 PM
  • There are other face properties that would be easier to determine valid results such as the bounding box. See FaceBasics sample:

    // check if this face frame has valid face frame results
    if (this.ValidateFaceBoxAndPoints(faceFrame.FaceFrameResult))
        // store this face frame result to draw later
        this.faceFrameResults[index] = faceFrame.FaceFrameResult;
        // indicates that the latest face frame result from this reader is invalid
        this.faceFrameResults[index] = null;

    Carmine Sirignano - MSFT

    Monday, February 2, 2015 6:56 PM