diff options
| -rw-r--r-- | tracker-kinect-face/kinect_face_tracker.cpp | 86 | ||||
| -rw-r--r-- | tracker-kinect-face/kinect_face_tracker.h | 38 | 
2 files changed, 56 insertions, 68 deletions
| diff --git a/tracker-kinect-face/kinect_face_tracker.cpp b/tracker-kinect-face/kinect_face_tracker.cpp index 5663de0f..9f4f133b 100644 --- a/tracker-kinect-face/kinect_face_tracker.cpp +++ b/tracker-kinect-face/kinect_face_tracker.cpp @@ -7,6 +7,8 @@  #include "compat/check-visible.hpp" +static const int KColorWidth = 1920; +static const int KColorHeight = 1080;  ///  bool IsValidRect(const RectI& aRect) @@ -82,62 +84,48 @@ bool IsNullPoint(const CameraSpacePoint& aPoint)  } -KinectFaceTracker::KinectFaceTracker(): -	m_pKinectSensor(nullptr), -	m_pCoordinateMapper(nullptr), -	m_pColorFrameReader(nullptr), -	m_pColorRGBX(nullptr), -	m_pBodyFrameReader(nullptr), -	iLastFacePosition{0,0,0}, -	iFacePositionCenter{ 0,0,0 }, -	iFacePosition{ 0,0,0 }, -	iLastFaceRotation{ 0,0,0 }, -	iFaceRotationCenter{ 0,0,0 }, -	iFaceRotation{ 0,0,0 } +KinectFaceTracker::KinectFaceTracker()  { -	m_pFaceFrameSource = nullptr; -	m_pFaceFrameReader = nullptr; -  	// create heap storage for color pixel data in RGBX format -	m_pColorRGBX = new RGBQUAD[cColorWidth * cColorHeight]; +	iColorRGBX = new RGBQUAD[KColorWidth * KColorHeight];  }  KinectFaceTracker::~KinectFaceTracker()  { -	if (m_pColorRGBX) +	if (iColorRGBX)  	{ -		delete[] m_pColorRGBX; -		m_pColorRGBX = nullptr; +		delete[] iColorRGBX; +		iColorRGBX = nullptr;  	}  	// clean up Direct2D  	//SafeRelease(m_pD2DFactory);  	// done with face sources and readers -	SafeRelease(m_pFaceFrameSource); -	SafeRelease(m_pFaceFrameReader); +	SafeRelease(iFaceFrameSource); +	SafeRelease(iFaceFrameReader);  	// done with body frame reader -	SafeRelease(m_pBodyFrameReader); +	SafeRelease(iBodyFrameReader);  	// done with color frame reader -	SafeRelease(m_pColorFrameReader); +	SafeRelease(iColorFrameReader);  	// done with coordinate mapper -	SafeRelease(m_pCoordinateMapper); +	SafeRelease(iCoordinateMapper);  	// close the Kinect Sensor -	if (m_pKinectSensor) +	if (iKinectSensor)  	{ -		m_pKinectSensor->Close(); +		iKinectSensor->Close();  	} -	SafeRelease(m_pKinectSensor); +	SafeRelease(iKinectSensor);  }  module_status KinectFaceTracker::start_tracker(QFrame* aFrame)  { -	t.start(); +	iTimer.start();  	if (SUCCEEDED(InitializeDefaultSensor()))  	{ @@ -170,12 +158,12 @@ bool KinectFaceTracker::center()  //  void KinectFaceTracker::data(double *data)  { -	const double dt = t.elapsed_seconds(); +	const double dt = iTimer.elapsed_seconds();  	const double KMinDelayInSeconds = 1.0 / 30.0; // Pointless running faster than Kinect hardware itself  	if (dt > KMinDelayInSeconds)  	{ -		t.start(); // Reset our timer +		iTimer.start(); // Reset our timer  		//OutputDebugStringA("Updating frame!\n");  		Update();  		ExtractFaceRotationInDegrees(&iFaceRotationQuaternion, &iFaceRotation.X, &iFaceRotation.Y, &iFaceRotation.Z); @@ -254,28 +242,28 @@ HRESULT KinectFaceTracker::InitializeDefaultSensor()  	HRESULT hr;  	// Get and open Kinect sensor -	hr = GetDefaultKinectSensor(&m_pKinectSensor); +	hr = GetDefaultKinectSensor(&iKinectSensor);  	if (SUCCEEDED(hr))  	{ -		hr = m_pKinectSensor->Open(); +		hr = iKinectSensor->Open();  	}  	// TODO: check if we still need that guy  	if (SUCCEEDED(hr))  	{ -		hr = m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper); +		hr = iKinectSensor->get_CoordinateMapper(&iCoordinateMapper);  	}  	// Create color frame reader	  	if (SUCCEEDED(hr))  	{  		UniqueInterface<IColorFrameSource> colorFrameSource; -		hr = m_pKinectSensor->get_ColorFrameSource(colorFrameSource.PtrPtr()); +		hr = iKinectSensor->get_ColorFrameSource(colorFrameSource.PtrPtr());  		colorFrameSource.Reset();  		if (SUCCEEDED(hr))  		{ -			hr = colorFrameSource->OpenReader(&m_pColorFrameReader); +			hr = colorFrameSource->OpenReader(&iColorFrameReader);  		}  	} @@ -283,12 +271,12 @@ HRESULT KinectFaceTracker::InitializeDefaultSensor()  	if (SUCCEEDED(hr))  	{  		UniqueInterface<IBodyFrameSource> bodyFrameSource; -		hr = m_pKinectSensor->get_BodyFrameSource(bodyFrameSource.PtrPtr()); +		hr = iKinectSensor->get_BodyFrameSource(bodyFrameSource.PtrPtr());  		bodyFrameSource.Reset();  		if (SUCCEEDED(hr))  		{ -			hr = bodyFrameSource->OpenReader(&m_pBodyFrameReader); +			hr = bodyFrameSource->OpenReader(&iBodyFrameReader);  		}  	} @@ -296,14 +284,14 @@ HRESULT KinectFaceTracker::InitializeDefaultSensor()  	if (SUCCEEDED(hr))  	{  		// create the face frame source by specifying the required face frame features -		hr = CreateHighDefinitionFaceFrameSource(m_pKinectSensor, &m_pFaceFrameSource); +		hr = CreateHighDefinitionFaceFrameSource(iKinectSensor, &iFaceFrameSource);  	}  	// Create HD face frame reader  	if (SUCCEEDED(hr))  	{  		// open the corresponding reader -		hr = m_pFaceFrameSource->OpenReader(&m_pFaceFrameReader); +		hr = iFaceFrameSource->OpenReader(&iFaceFrameReader);  	}  	return hr; @@ -316,13 +304,13 @@ HRESULT KinectFaceTracker::InitializeDefaultSensor()  /// </summary>  void KinectFaceTracker::Update()  { -	if (!m_pColorFrameReader || !m_pBodyFrameReader) +	if (!iColorFrameReader || !iBodyFrameReader)  	{  		return;  	}  	IColorFrame* pColorFrame = nullptr; -	HRESULT hr = m_pColorFrameReader->AcquireLatestFrame(&pColorFrame); +	HRESULT hr = iColorFrameReader->AcquireLatestFrame(&pColorFrame);  	if (SUCCEEDED(hr))  	{ @@ -373,10 +361,10 @@ void KinectFaceTracker::Update()  				{  					hr = pColorFrame->AccessRawUnderlyingBuffer(&nBufferSize, reinterpret_cast<BYTE**>(&pBuffer));  				} -				else if (m_pColorRGBX) +				else if (iColorRGBX)  				{ -					pBuffer = m_pColorRGBX; -					nBufferSize = cColorWidth * cColorHeight * sizeof(RGBQUAD); +					pBuffer = iColorRGBX; +					nBufferSize = KColorWidth * KColorHeight * sizeof(RGBQUAD);  					hr = pColorFrame->CopyConvertedFrameDataToArray(nBufferSize, reinterpret_cast<BYTE*>(pBuffer), ColorImageFormat_Rgba);  				}  				else @@ -389,7 +377,7 @@ void KinectFaceTracker::Update()  			if (SUCCEEDED(hr))  			{  				// Setup our image  -				QImage image((const unsigned char*)pBuffer, cColorWidth, cColorHeight, sizeof(RGBQUAD)*cColorWidth, QImage::Format_RGBA8888); +				QImage image((const unsigned char*)pBuffer, KColorWidth, KColorHeight, sizeof(RGBQUAD)*KColorWidth, QImage::Format_RGBA8888);  				if (IsValidRect(iFaceBox))  				{  					// Draw our face bounding box @@ -423,10 +411,10 @@ HRESULT KinectFaceTracker::UpdateBodyData(IBody** ppBodies)  {  	HRESULT hr = E_FAIL; -	if (m_pBodyFrameReader != nullptr) +	if (iBodyFrameReader != nullptr)  	{  		IBodyFrame* pBodyFrame = nullptr; -		hr = m_pBodyFrameReader->AcquireLatestFrame(&pBodyFrame); +		hr = iBodyFrameReader->AcquireLatestFrame(&pBodyFrame);  		if (SUCCEEDED(hr))  		{  			hr = pBodyFrame->GetAndRefreshBodyData(BODY_COUNT, ppBodies); @@ -539,7 +527,7 @@ void KinectFaceTracker::ProcessFaces()  			if (SUCCEEDED(hr))  			{  				// Tell our face source to use the given body id -				hr = m_pFaceFrameSource->put_TrackingId(iTrackingId); +				hr = iFaceFrameSource->put_TrackingId(iTrackingId);  				//OutputDebugStringA("Tracking new body!\n");  			}  		} @@ -549,7 +537,7 @@ void KinectFaceTracker::ProcessFaces()  	IHighDefinitionFaceFrame* pFaceFrame = nullptr;  	if (SUCCEEDED(hr))  	{ -		hr = m_pFaceFrameReader->AcquireLatestFrame(&pFaceFrame); +		hr = iFaceFrameReader->AcquireLatestFrame(&pFaceFrame);  	}  	BOOLEAN bFaceTracked = false; diff --git a/tracker-kinect-face/kinect_face_tracker.h b/tracker-kinect-face/kinect_face_tracker.h index 9f75507d..a6d4e89b 100644 --- a/tracker-kinect-face/kinect_face_tracker.h +++ b/tracker-kinect-face/kinect_face_tracker.h @@ -64,13 +64,9 @@ public:  	bool center() override;  private: -	Timer t; +	  	// Kinect stuff -	static const int       cColorWidth = 1920; -	static const int       cColorHeight = 1080; - -  	void Update();  	HRESULT InitializeDefaultSensor();  	void ProcessFaces(); @@ -78,39 +74,43 @@ private:  	void ExtractFaceRotationInDegrees(const Vector4* pQuaternion, float* pPitch, float* pYaw, float* pRoll);  	static IBody* FindClosestBody(IBody** aBodies);  	static IBody* FindTrackedBodyById(IBody** aBodies,UINT64 aTrackingId); +	 +	// +	Timer iTimer;  	// Current Kinect -	IKinectSensor*         m_pKinectSensor; +	IKinectSensor* iKinectSensor = nullptr;  	// Coordinate mapper -	ICoordinateMapper*     m_pCoordinateMapper; +	ICoordinateMapper* iCoordinateMapper = nullptr;  	// Color reader -	IColorFrameReader*     m_pColorFrameReader; +	IColorFrameReader* iColorFrameReader = nullptr;  	// Body reader -	IBodyFrameReader*      m_pBodyFrameReader; +	IBodyFrameReader* iBodyFrameReader = nullptr;  	// Face sources -	IHighDefinitionFaceFrameSource*	   m_pFaceFrameSource; +	IHighDefinitionFaceFrameSource*	iFaceFrameSource = nullptr;  	// Face readers -	IHighDefinitionFaceFrameReader*	   m_pFaceFrameReader; +	IHighDefinitionFaceFrameReader*	iFaceFrameReader = nullptr;  	// -	RGBQUAD*               m_pColorRGBX; +	RGBQUAD* iColorRGBX = nullptr;  	RectI iFaceBox = { 0 }; -	CameraSpacePoint iLastFacePosition; -	CameraSpacePoint iFacePosition; -	CameraSpacePoint iFacePositionCenter; +	// Face position +	CameraSpacePoint iLastFacePosition = { 0 }; +	CameraSpacePoint iFacePosition = { 0 }; +	CameraSpacePoint iFacePositionCenter = { 0 }; -	Vector4 iFaceRotationQuaternion; +	Vector4 iFaceRotationQuaternion = { 0 };  	// As Yaw, Pitch, Roll -	CameraSpacePoint iLastFaceRotation; -	CameraSpacePoint iFaceRotation; -	CameraSpacePoint iFaceRotationCenter; +	CameraSpacePoint iLastFaceRotation = { 0 }; +	CameraSpacePoint iFaceRotation = { 0 }; +	CameraSpacePoint iFaceRotationCenter = { 0 };  	//  	std::unique_ptr<cv_video_widget> iVideoWidget;  	std::unique_ptr<QLayout> iLayout; | 
