UnaNancyOwen
7/14/2016 - 4:15 PM

main.cpp

inline void result( const CComPtr<IVisualGestureBuilderFrame>& gestureFrame, const CComPtr<IGesture>& gesture, const int count )
{
	// TrackingIdを取得
	UINT64 trackingId;
	ERROR_CHECK( gestureFrame->get_TrackingId( &trackingId ) );

	// Gestureの種類(Discrete or Continuous)を取得
	GestureType gestureType;
	ERROR_CHECK( gesture->get_GestureType( &gestureType ) );
	switch( gestureType ){
		case GestureType::GestureType_Discrete:
		{
			// Discrete Gestureの認識結果を取得
			CComPtr<IDiscreteGestureResult> gestureResult;
			ERROR_CHECK( gestureFrame->get_DiscreteGestureResult( gesture, &gestureResult ) );

			// 検出結果を取得
			BOOLEAN detected;
			ERROR_CHECK( gestureResult->get_Detected( &detected ) );
			if( !detected ){
				break;
			}

			// 検出結果の信頼値を取得
			float confidence;
			ERROR_CHECK( gestureResult->get_Confidence( &confidence ) );

			// 結果の描画
			std::string discrete = gesture2string( gesture ) + " : Detected (" + std::to_string( confidence ) + ")";
			discrete += " / " + std::to_string( trackingId );
			cv::putText( colorImage, discrete, cv::Point( 50, 50 + offset ), font, 1.0f, colors[count], 2, CV_AA );
			offset += 30;
			break;
		}
		case GestureType::GestureType_Continuous:
		{
			// Continuous Gestureの認識結果を取得
			CComPtr<IContinuousGestureResult> gestureResult;
			ERROR_CHECK( gestureFrame->get_ContinuousGestureResult( gesture, &gestureResult ) );

			// 進度を取得
			float progress;
			ERROR_CHECK( gestureResult->get_Progress( &progress ) );

			// 結果の描画
			std::string continuous = gesture2string( gesture ) + " : Progress " + std::to_string( progress );
			continuous += " / " + std::to_string( trackingId );
			cv::putText( colorImage, continuous, cv::Point( 50, 50 + offset ), font, 1.0f, colors[count], 2, CV_AA );
			offset += 30;
			break;
		}
		default:
			break;
	}
}