From 7dc20f380c80b1b0597e619e66d23921f0309aa0 Mon Sep 17 00:00:00 2001 From: Wim Vriend Date: Tue, 8 Mar 2011 22:10:06 +0000 Subject: Start after update 1.5 Begin placing faceAPI in DLL git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@52 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb --- FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.h | 44 ++++ FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj | 266 +++++++++++++++++++++ .../FTNoIR_Tracker_SM.vcproj.VRIEND200810.Wim.user | 65 +++++ FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp | 142 +++++++++++ 4 files changed, 517 insertions(+) create mode 100644 FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.h create mode 100644 FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj create mode 100644 FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj.VRIEND200810.Wim.user create mode 100644 FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp (limited to 'FTNoIR_Tracker_SM') diff --git a/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.h b/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.h new file mode 100644 index 00000000..0687730a --- /dev/null +++ b/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.h @@ -0,0 +1,44 @@ +#include "..\ftnoir_tracker_base\ftnoir_tracker_base.h" +#include "ui_FTNoIR_SMClientcontrols.h" + +#include +#include +#include +#include "Windows.h" +#include "math.h" + +using namespace sm::faceapi; +using namespace sm::faceapi::qt; + +class FTNoIR_Tracker_SM : public ITracker +{ +public: + FTNoIR_Tracker_SM(); + ~FTNoIR_Tracker_SM(); + + void Release(); + void Initialize(); + void StartTracker(); + void GiveHeadPoseData(THeadPoseData *data); + void loadSettings(); + + bool setParameterValue(const int index, const float newvalue); + +private: + /** face api variables **/ + APIScope *faceapi_scope; + QSharedPointer _engine; + smEngineHandle _engine_handle; + + THeadPoseData newHeadPose; // Structure with new headpose + + //parameter list for the filter-function(s) + enum + { + kPortAddress=0, // Index in QList + kNumFilterParameters // Indicate number of parameters used + }; + QList> parameterRange; + QList parameterValueAsFloat; + +}; diff --git a/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj b/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj new file mode 100644 index 00000000..243e919b --- /dev/null +++ b/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj.VRIEND200810.Wim.user b/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj.VRIEND200810.Wim.user new file mode 100644 index 00000000..12f78238 --- /dev/null +++ b/FTNoIR_Tracker_SM/FTNoIR_Tracker_SM.vcproj.VRIEND200810.Wim.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp b/FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp new file mode 100644 index 00000000..930ce090 --- /dev/null +++ b/FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp @@ -0,0 +1,142 @@ +#include "ftnoir_tracker_sm.h" + +using namespace sm::faceapi; +using namespace sm::faceapi::qt; + +FTNoIR_Tracker_SM::FTNoIR_Tracker_SM() +{ + //allocate memory for the parameters + parameterValueAsFloat.clear(); + parameterRange.clear(); + + // Add the parameters to the list + parameterRange.append(std::pair(1000.0f,9999.0f)); + parameterValueAsFloat.append(0.0f); + setParameterValue(kPortAddress,5551.0f); + + newHeadPose.x = 0.0f; + newHeadPose.y = 0.0f; + newHeadPose.z = 0.0f; + newHeadPose.yaw = 0.0f; + newHeadPose.pitch = 0.0f; + newHeadPose.roll = 0.0f; +} + +FTNoIR_Tracker_SM::~FTNoIR_Tracker_SM() +{ +} + +void FTNoIR_Tracker_SM::Release() +{ + delete this; +} + +void FTNoIR_Tracker_SM::Initialize() +{ + qDebug() << "FTNoIR_Tracker_SM::Initialize says: Starting "; + loadSettings(); + + try { + // Initialize the faceAPI Qt library + sm::faceapi::qt::initialize(); + smLoggingSetFileOutputEnable( false ); + + // Initialize the API + faceapi_scope = new APIScope(); + + //if (APIScope::internalQtGuiIsDisabled()){ + // QMessageBox::warning(0,"faceAPI Error","Something Bad",QMessageBox::Ok,QMessageBox::NoButton); + //} + + // Create head-tracking engine v2 using first detected webcam + CameraInfo::registerType(SM_API_CAMERA_TYPE_WDM); + _engine = QSharedPointer(new HeadTrackerV2()); + + // starts the faceapi engine + _engine->start(); + } + catch (sm::faceapi::Error &e) + { + /* ERROR with camera */ + QMessageBox::warning(0,"faceAPI Error",e.what(),QMessageBox::Ok,QMessageBox::NoButton); + } + + return; +} + +void FTNoIR_Tracker_SM::StartTracker() +{ + return; +} + +void FTNoIR_Tracker_SM::GiveHeadPoseData(THeadPoseData *data) +{ + data->x = newHeadPose.x; + data->y = newHeadPose.y; + data->z = newHeadPose.z; + data->yaw = newHeadPose.yaw; + data->pitch = newHeadPose.pitch; + data->roll = newHeadPose.roll; + return; +} + +bool FTNoIR_Tracker_SM::setParameterValue(const int index, const float newvalue) +{ + if ((index >= 0) && (index < parameterValueAsFloat.size())) + { + // + // Limit the new value, using the defined range. + // + if (newvalue < parameterRange[index].first) { + parameterValueAsFloat[index] = parameterRange[index].first; + } + else { + if (newvalue > parameterRange[index].second) { + parameterValueAsFloat[index] = parameterRange[index].second; + } + else { + parameterValueAsFloat[index] = newvalue; + } + } + +// updateParameterString(index); + return true; + } + else + { + return false; + } +}; + +// +// Load the current Settings from the currently 'active' INI-file. +// +void FTNoIR_Tracker_SM::loadSettings() { + + qDebug() << "FTNoIR_Tracker_SM::loadSettings says: Starting "; + QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER) + + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + + qDebug() << "FTNoIR_Tracker_SM::loadSettings says: iniFile = " << currentFile; + + iniFile.beginGroup ( "FTNClient" ); + setParameterValue(kPortAddress, (float) iniFile.value ( "PortNumber", 5550 ).toInt()); + iniFile.endGroup (); +} + + +//////////////////////////////////////////////////////////////////////////////// +// Factory function that creates instances if the Tracker object. + +// Export both decorated and undecorated names. +// GetTracker - Undecorated name, which can be easily used with GetProcAddress +// Win32 API function. +// _GetTracker@0 - Common name decoration for __stdcall functions in C language. +#pragma comment(linker, "/export:GetTracker=_GetTracker@0") + +FTNOIR_TRACKER_BASE_EXPORT TRACKERHANDLE __stdcall GetTracker() +{ + return new FTNoIR_Tracker_SM; +} -- cgit v1.2.3