get_HeadPivotPoint() returns invalid data RRS feed

  • Question

  • I'm experiencing that get_HeadPivotPoint() returns invalid data
    Not the HR... it returns S_OK

    hr = pHDFaceFrame->GetAndRefreshFaceAlignmentResult(m_pHDFaceAlignments[iFace]);
    its S_OK
    CameraSpacePoint HDHeadPivot = {0};
    hr = m_pHDFaceAlignments[iFace]->get_HeadPivotPoint(&HDHeadPivot);
    its S_OK
    however, HDHeadPivot is (taken from a run with several consecutive iterations):

    [548] ** pivot 89556066896491786000000000000000000000.000000 0.000000 89556066896491786000000000000000000000.000000
    [548] ** pivot 103035654907030670000000000000000000000.000000 0.000000 103035654907030670000000000000000000000.000000
    [548] ** pivot 109840525023513430000000000000000000000.000000 0.000000 109840525023513430000000000000000000000.000000
    [548] ** pivot 116529937523327400000000000000000000000.000000 0.000000 116529937523327400000000000000000000000.000000
    [548] ** pivot 123317993522248730000000000000000000000.000000 0.000000 123317993522248730000000000000000000000.000000
    [548] ** pivot 130120581867651070000000000000000000000.000000 0.000000 130120581867651070000000000000000000000.000000

    I often seen headpivot being all zeros. I assume that this is a situation where the alignment engine can't discern the pivot.

    However...the above values are odd. It tends to be near the time when the regular face engine isn't tracking or when the body isn't tracked and HDFaceFrame->get_IsTrackingIdValid() hasn't returned false yet.

    For now, I can filter out this bad data by excluding anything outside an 8 meter box.


    Tuesday, November 18, 2014 4:19 AM

All replies

  • reported to team for confirmation of the behavior.

    Carmine Sirignano - MSFT

    Tuesday, November 18, 2014 7:23 PM
  • The values seem to be uninitialized memory. Can you confirm you are getting these results when you have call IHighDefinitionFaceFrame::get_IsFaceTracked() before GetAndRefreshFaceAlignment?

    Carmine Sirignano - MSFT

    Tuesday, November 18, 2014 8:33 PM
  • To answer your question... no I can not confirm that. Instead...

    I have changed to get_IsFaceTracked(). If it returns TRUE, then I *am not* experiencing the erroneous values I reported. This is good. :-)

    I was previously using frame::get_IsTrackingIdValid() based on other threads on this forum and consistency with IFaceFrame. There is a subtle difference in the state handling and their meaning between g_ITIV and g_IFT. It would be great to have that documented. I can guess at it, but I don't want to create confusion.

    Using get_IsTrackingIdValid(), if I got TRUE, then I would call GetAndRefreshFaceAlignmentResult() which returned S_OK and valid pointers. And get_HeadPivotPoint() which also returned S_OK. Though, the pivot float results were sometimes nonsense values as I put above.

    It would be great for the APIs of this problem scenario to be more robust and protect the user of the APIs more. For example, if I call AcquireLatestFrame() the API is very good at returning E_PENDING when there is no frame avail. I additionally check that the returned pointer on that method is not NULL.

    In the scenario of this thread, the frame, alignment, and pivot APIs provide no protection for the user of the APIs in comparison to AcquireLatestFrame(). Can the team make the former series more robust?


    Wednesday, November 19, 2014 9:34 AM