void Nui_GotSkeletonAlert( ) { NUI_SKELETON_FRAME SkeletonFrame; bool bFoundSkeleton = false; if( SUCCEEDED(m_pNuiInstance->NuiSkeletonGetNextFrame( 0, &SkeletonFrame )) ) { for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ) { bFoundSkeleton = true; } } } // no skeletons! // if( !bFoundSkeleton ) { return; } // smooth out the skeleton data m_pNuiInstance->NuiTransformSmooth(&SkeletonFrame,NULL); // we found a skeleton, re-start the timer m_bScreenBlanked = false; m_LastSkeletonFoundTime = -1; // draw each skeleton color according to the slot within they are found. // bool bBlank = true; for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { // Show skeleton only if it is tracked, and the center-shoulder joint is at least inferred. if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED && SkeletonFrame.SkeletonData[i].eSkeletonPositionTrackingState[NUI_SKELETON_POSITION_SHOULDER_CENTER] != NUI_SKELETON_POSITION_NOT_TRACKED) { Nui_DrawSkeleton( bBlank, &SkeletonFrame.SkeletonData[i], i ); bBlank = false; } } cvShowImage("Kinect skeleton image",kinect_skeleton_image); cvWaitKey(10); //Nui_DoDoubleBuffer(GetDlgItem(m_hWnd,IDC_SKELETALVIEW), m_SkeletonDC); }
void CSkeletalViewerApp::Nui_GotSkeletonAlert( ) { NUI_SKELETON_FRAME SkeletonFrame; HRESULT hr = NuiSkeletonGetNextFrame( 0, &SkeletonFrame ); bool bFoundSkeleton = true; for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ) { bFoundSkeleton = false; } } // no skeletons! // if( bFoundSkeleton ) { return; } // smooth out the skeleton data NuiTransformSmooth(&SkeletonFrame,NULL); // we found a skeleton, re-start the timer m_bScreenBlanked = false; m_LastSkeletonFoundTime = -1; // draw each skeleton color according to the slot within they are found. // bool bBlank = true; for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ) { Nui_DrawSkeleton( bBlank, &SkeletonFrame.SkeletonData[i], GetDlgItem( m_hWnd, IDC_SKELETALVIEW ), i ); bBlank = false; } } Nui_DoDoubleBuffer(GetDlgItem(m_hWnd,IDC_SKELETALVIEW), m_SkeletonDC); }
//------------------------------------------------------------------- // Nui_GotSkeletonAlert // // Handle new skeleton data //------------------------------------------------------------------- void SkeletalTracker::Nui_GotSkeletonAlert( ) { NUI_SKELETON_FRAME SkeletonFrame = {0}; bool bFoundSkeleton = false; if ( SUCCEEDED(NuiSkeletonGetNextFrame( 0, &SkeletonFrame )) ) // if ( SUCCEEDED(m_pNuiSensor->NuiSkeletonGetNextFrame( 0, &SkeletonFrame )) ) { for ( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { // if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED || // (SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_POSITION_ONLY )) { bFoundSkeleton = true; } } } // no skeletons! if( !bFoundSkeleton ) { return; } // smooth out the skeleton data NUI_TRANSFORM_SMOOTH_PARAMETERS smoothParams; smoothParams.fSmoothing = 0.6f; smoothParams.fCorrection = 0.3f; smoothParams.fPrediction = 0.6f; smoothParams.fJitterRadius = 0.6f; smoothParams.fMaxDeviationRadius = 0.6f; HRESULT hr = NuiTransformSmooth(&SkeletonFrame,&smoothParams); // HRESULT hr = NuiTransformSmooth(&SkeletonFrame,&smoothParams); if ( FAILED(hr) ) { return; } // we found a skeleton, re-start the skeletal timer bool bSkeletonIdsChanged = false; USHORT currentMaxDepth = NUI_IMAGE_DEPTH_MAXIMUM; int selectedSkeleton = -1; for ( int i = 0 ; i < NUI_SKELETON_COUNT; i++ ) { if ( m_SkeletonIds[i] != SkeletonFrame.SkeletonData[i].dwTrackingID ) { m_SkeletonIds[i] = SkeletonFrame.SkeletonData[i].dwTrackingID; bSkeletonIdsChanged = true; } // Show skeleton only if it is tracked, and the center-shoulder joint is at least inferred. if ( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED) { LONG x, y; USHORT depth; // Transform skeleton coordinates to depth image NuiTransformSkeletonToDepthImage(SkeletonFrame.SkeletonData[i].Position, &x, &y, &depth); if (depth < currentMaxDepth) { selectedSkeleton = i; currentMaxDepth = depth; } } else if ( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_POSITION_ONLY ) { // OutputDebugString( L"Skeleton position only\r\n" ); } } if (selectedSkeleton > -1) { Nui_DrawSkeleton( &SkeletonFrame.SkeletonData[selectedSkeleton], NULL, selectedSkeleton ); } }
void CSkeletalViewerApp::Nui_GotSkeletonAlert( ) { NUI_SKELETON_FRAME SkeletonFrame; bool bFoundSkeleton = false; if( SUCCEEDED(m_pNuiInstance->NuiSkeletonGetNextFrame( 0, &SkeletonFrame )) ) { for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ) { bFoundSkeleton = true; } } } // no skeletons! // if( !bFoundSkeleton ) { return; } // smooth out the skeleton data m_pNuiInstance->NuiTransformSmooth(&SkeletonFrame,NULL); // we found a skeleton, re-start the timer m_bScreenBlanked = false; m_LastSkeletonFoundTime = -1; // draw each skeleton color according to the slot within they are found. // bool bBlank = true; for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { // Only distance-track the first skeleton bool first = true; // Show skeleton only if it is tracked, and the center-shoulder joint is at least inferred. if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED && SkeletonFrame.SkeletonData[i].eSkeletonPositionTrackingState[NUI_SKELETON_POSITION_SHOULDER_CENTER] != NUI_SKELETON_POSITION_NOT_TRACKED) { Nui_DrawSkeleton( bBlank, &SkeletonFrame.SkeletonData[i], GetDlgItem( m_hWnd, IDC_SKELETALVIEW ), i ); if (first) { first = false; // Update distance data Vector4 headPoint = SkeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HEAD]; float xcoord, ycoord; USHORT depthValue; NuiTransformSkeletonToDepthImageF(headPoint, &xcoord, &ycoord, &depthValue); int depthInMM = (depthValue >> 3); ::PostMessageW(m_hWnd, WM_USER_UPDATE_DISTANCE, IDC_DISTANCE, depthInMM); // Update user data ::PostMessageW(m_hWnd, WM_USER_UPDATE_USER, IDC_USER, i); } bBlank = false; } }