summaryrefslogtreecommitdiffhomepage
path: root/FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp
diff options
context:
space:
mode:
authorWim Vriend <facetracknoir@gmail.com>2011-03-08 22:10:06 +0000
committerWim Vriend <facetracknoir@gmail.com>2011-03-08 22:10:06 +0000
commit7dc20f380c80b1b0597e619e66d23921f0309aa0 (patch)
treec5fb83c3b97b825112433a81ee3dfafe96dba84e /FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp
parent63ce1b5dc62e5c1a079f8a675c0a4371adb27d29 (diff)
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
Diffstat (limited to 'FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp')
-rw-r--r--FTNoIR_Tracker_SM/ftnoir_tracker_faceapi.cpp142
1 files changed, 142 insertions, 0 deletions
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<float,float>(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<HeadTrackerV2>(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;
+}