From 4f00c4c74d213a37a4b1a3313e50ce2b4dd51271 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 22 Mar 2013 21:48:15 +0100 Subject: finish rename --- ftnoir_tracker_fd/FTNoIR_FD_Controls.ui | 152 --------------- ftnoir_tracker_fd/FTNoIR_Tracker_FD.h | 114 ----------- ftnoir_tracker_fd/Tracker.qrc | 5 - ftnoir_tracker_fd/face-detect.h | 39 ---- ftnoir_tracker_fd/ftnoir_tracker_facedetect.cpp | 214 --------------------- .../ftnoir_tracker_facedetect_dialog.cpp | 180 ----------------- .../ftnoir_tracker_facedetect_dll.cpp | 85 -------- ftnoir_tracker_fd/images/FaceDetect.ico | Bin 5430 -> 0 bytes ftnoir_tracker_fd/images/xxx_facedetect.ico | Bin 0 -> 5430 bytes ftnoir_tracker_fd/xxx_face-detect.h | 39 ++++ ftnoir_tracker_fd/xxx_ftnoir_fd_controls.ui | 152 +++++++++++++++ .../xxx_ftnoir_tracker_facedetect.cpp | 214 +++++++++++++++++++++ .../xxx_ftnoir_tracker_facedetect_dialog.cpp | 180 +++++++++++++++++ .../xxx_ftnoir_tracker_facedetect_dll.cpp | 85 ++++++++ ftnoir_tracker_fd/xxx_ftnoir_tracker_fd.h | 114 +++++++++++ ftnoir_tracker_fd/xxx_tracker.qrc | 5 + 16 files changed, 789 insertions(+), 789 deletions(-) delete mode 100644 ftnoir_tracker_fd/FTNoIR_FD_Controls.ui delete mode 100644 ftnoir_tracker_fd/FTNoIR_Tracker_FD.h delete mode 100644 ftnoir_tracker_fd/Tracker.qrc delete mode 100644 ftnoir_tracker_fd/face-detect.h delete mode 100644 ftnoir_tracker_fd/ftnoir_tracker_facedetect.cpp delete mode 100644 ftnoir_tracker_fd/ftnoir_tracker_facedetect_dialog.cpp delete mode 100644 ftnoir_tracker_fd/ftnoir_tracker_facedetect_dll.cpp delete mode 100644 ftnoir_tracker_fd/images/FaceDetect.ico create mode 100644 ftnoir_tracker_fd/images/xxx_facedetect.ico create mode 100644 ftnoir_tracker_fd/xxx_face-detect.h create mode 100644 ftnoir_tracker_fd/xxx_ftnoir_fd_controls.ui create mode 100644 ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect.cpp create mode 100644 ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dialog.cpp create mode 100644 ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dll.cpp create mode 100644 ftnoir_tracker_fd/xxx_ftnoir_tracker_fd.h create mode 100644 ftnoir_tracker_fd/xxx_tracker.qrc (limited to 'ftnoir_tracker_fd') diff --git a/ftnoir_tracker_fd/FTNoIR_FD_Controls.ui b/ftnoir_tracker_fd/FTNoIR_FD_Controls.ui deleted file mode 100644 index 0bb8028f..00000000 --- a/ftnoir_tracker_fd/FTNoIR_FD_Controls.ui +++ /dev/null @@ -1,152 +0,0 @@ - - - UICFDClientControls - - - Qt::ApplicationModal - - - - 0 - 0 - 283 - 151 - - - - - 0 - 0 - - - - FaceDetect tracker settings - - - - images/FaceTrackNoIR.icoimages/FaceTrackNoIR.ico - - - Qt::LeftToRight - - - false - - - - QLayout::SetFixedSize - - - - - - - - - QFormLayout::AllNonFixedFieldsGrow - - - - - Changes take effect after tracker restart. - - - - - - - Camera (indices from 0) - - - - - - - 100 - - - - - - - Haar detection timeout (ms) - - - - - - - 2000 - - - 50 - - - 200 - - - - - - - Video Widget - - - - - - - Qt::RightToLeft - - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - - - - - - - - - - - startEngineClicked() - stopEngineClicked() - cameraSettingsClicked() - - diff --git a/ftnoir_tracker_fd/FTNoIR_Tracker_FD.h b/ftnoir_tracker_fd/FTNoIR_Tracker_FD.h deleted file mode 100644 index 02e95bb4..00000000 --- a/ftnoir_tracker_fd/FTNoIR_Tracker_FD.h +++ /dev/null @@ -1,114 +0,0 @@ -#include "..\ftnoir_tracker_base\ftnoir_tracker_base.h" -#include "face-detect.h" -#include "ui_FTNoIR_FD_controls.h" - -#include -#include -#include - -#include -#include -#include -#include "math.h" -#include - -using namespace std; - -static LPTSTR prog_cmdline = (LPTSTR) TEXT("face-detect.exe"); -static LPTSTR fd_shm_name = (LPTSTR) TEXT("face-detect-shm"); -static LPTSTR fd_mutex_name = (LPTSTR) TEXT("face-detect-mutex"); - -class VideoWidget : public QWidget -{ - Q_OBJECT -public: - VideoWidget(HANDLE hMutex, unsigned char* data, struct face_detect_shm* shm); -protected: - void paintEvent(QPaintEvent*); -private: - HANDLE hMutex; - unsigned char* data; - struct face_detect_shm* shm; -}; - -class FTNoIR_Tracker : public ITracker -{ -public: - FTNoIR_Tracker(); - ~FTNoIR_Tracker(); - - void Initialize( QFrame *videoframe ); - void StartTracker( HWND parent_window ); - void StopTracker( bool exit ); - bool GiveHeadPoseData(THeadPoseData *data); // Returns true if confidence is good - - void loadSettings(); -// bool setParameterValue(const int index, const float newvalue); - bool notifyZeroed(); - void refreshVideo(); - -private: - bool activep; - //QList> parameterRange; - //QList parameterValueAsFloat; - void TerminateTracker(); - HANDLE hMutex, hMapFile; - struct face_detect_shm* shm; - PROCESS_INFORMATION procInfo; - VideoWidget* ctrl; - QFrame* qframe; -}; - -class TrackerControls: public QWidget, Ui::UICFDClientControls, public ITrackerDialog -{ - Q_OBJECT -public: - - explicit TrackerControls(); - virtual ~TrackerControls(); - void Release(); // Member functions which are accessible from outside the DLL - void Initialize(QWidget *parent); - void registerTracker(ITracker *tracker) {}; - void unRegisterTracker() {}; - void NotifyZeroing(); - -private: - Ui::UICFDClientControls ui; - void loadSettings(); - void save(); - - bool settingsDirty; - HANDLE hMapFile, hMutex; - struct face_detect_shm* shm; - -private slots: - void doOK(); - void doCancel(); - void settingChanged() { settingsDirty = true; }; - void doSetRedetectMs(int val); - void doSetCameraId(int val); - void doSetVideoWidget(bool val); -signals: -}; - -//******************************************************************************************************* -// FaceTrackNoIR Tracker DLL. Functions used to get general info on the Tracker -//******************************************************************************************************* -class FTNoIR_TrackerDll : public ITrackerDll -{ -public: - FTNoIR_TrackerDll(); - ~FTNoIR_TrackerDll(); - - void Initialize(); - - void getFullName(QString *strToBeFilled); - void getShortName(QString *strToBeFilled); - void getDescription(QString *strToBeFilled); - void getIcon(QIcon *icon); - -private: - QString trackerFullName; // Trackers' name and description - QString trackerShortName; - QString trackerDescription; -}; diff --git a/ftnoir_tracker_fd/Tracker.qrc b/ftnoir_tracker_fd/Tracker.qrc deleted file mode 100644 index d988ba71..00000000 --- a/ftnoir_tracker_fd/Tracker.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - images/FaceDetect.ico - - diff --git a/ftnoir_tracker_fd/face-detect.h b/ftnoir_tracker_fd/face-detect.h deleted file mode 100644 index fc359c53..00000000 --- a/ftnoir_tracker_fd/face-detect.h +++ /dev/null @@ -1,39 +0,0 @@ -#if defined(_WIN32) || defined(WIN32) -# ifdef __cplusplus -# define FDAPI_EXTERN extern "C" -# else -# define FDAPI_EXTERN -# endif -# define FDAPI(ret) FDAPI_EXTERN __declspec(dllexport) ret __cdecl -#else -# define FDAPI(ret) ret -#endif - -struct face_detect_settings { - unsigned char magic, quit, newOutput, widgetp; - int redetect_ms, camera_id; -}; - -struct face_detect; -FDAPI(struct face_detect*) face_detect_init(const char* eyes_model, - const char* nose_model, - const char* mouth_model, - const char* face_model, - int capture_no, - struct face_detect_settings* settings); -FDAPI(void) face_detect_free(struct face_detect *ctx); -FDAPI(int) face_detect_cycle(struct face_detect *ctx, float *data); -FDAPI(void) face_detect_zero(struct face_detect *ctx); - -FDAPI(unsigned char*) face_detect_video(struct face_detect* ctx); - -#define FD_VIDEO_WIDTH 252 -#define FD_VIDEO_HEIGHT 189 -#define FD_MAGIC 0x42 - -struct face_detect_shm { - unsigned char zerop, received; - float data[6]; - unsigned char pixels[FD_VIDEO_WIDTH * FD_VIDEO_HEIGHT * 3]; - struct face_detect_settings settings; -}; diff --git a/ftnoir_tracker_fd/ftnoir_tracker_facedetect.cpp b/ftnoir_tracker_fd/ftnoir_tracker_facedetect.cpp deleted file mode 100644 index 620fb9fd..00000000 --- a/ftnoir_tracker_fd/ftnoir_tracker_facedetect.cpp +++ /dev/null @@ -1,214 +0,0 @@ -/* Copyright (c) 2012 Stanislaw Halik - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - */ - -#include "ftnoir_tracker_fd.h" -#include -#include -#include - -static void load_settings(struct face_detect_settings* out) { - qDebug("[!] load_settings()"); - 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) - - iniFile.beginGroup ( "FaceDetectTracker" ); - out->redetect_ms = iniFile.value("RedetectMs", 500).toInt(); - out->camera_id = iniFile.value("CameraId", 0).toInt(); - out->quit = 0; - out->newOutput = 0; - out->magic = FD_MAGIC; - out->widgetp = iniFile.value("VideoWidget", true).toBool(); - iniFile.endGroup (); -} - -static void save_settings(const struct face_detect_settings* in) { - - 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) - - iniFile.beginGroup ( "FaceDetectTracker" ); - iniFile.setValue("RedetectMs", in->redetect_ms); - iniFile.setValue("CameraId", in->camera_id); - iniFile.setValue("VideoWidget", in->widgetp); - iniFile.endGroup (); -} - -VideoWidget::VideoWidget(HANDLE hMutex, unsigned char* data, struct face_detect_shm* shm) { - this->hMutex = hMutex; - this->data = data; - this->shm = shm; -} - -void VideoWidget::paintEvent(QPaintEvent*) { - WaitForSingleObject(hMutex, INFINITE); - if (!this->shm->settings.widgetp) { - ReleaseMutex(hMutex); - return; - } - QPainter painter(this); - QImage image(data, FD_VIDEO_WIDTH, FD_VIDEO_HEIGHT, QImage::Format_RGB888); - QRectF rect(0, 0, FD_VIDEO_WIDTH, FD_VIDEO_HEIGHT); - painter.paintEngine()->drawImage(rect, image.rgbSwapped(), rect); - ReleaseMutex(hMutex); -} - -FTNoIR_Tracker::FTNoIR_Tracker() -{ - qDebug("making tracker FaceDetect"); - - hMutex = CreateMutex(NULL, false, fd_mutex_name); - hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(struct face_detect_shm), fd_shm_name); - shm = (struct face_detect_shm*) MapViewOfFile(hMapFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(struct face_detect_shm)); - memset(shm, 0, sizeof(struct face_detect_shm)); - activep = 0; - procInfo.hProcess = INVALID_HANDLE_VALUE; - ctrl = NULL; - qframe = NULL; -} - -void FTNoIR_Tracker::TerminateTracker() { - if (procInfo.hProcess != INVALID_HANDLE_VALUE) { - shm->settings.quit = 1; - //TerminateProcess(procInfo.hProcess, 42); - CloseHandle(procInfo.hProcess); - CloseHandle(procInfo.hThread); - procInfo.hProcess = INVALID_HANDLE_VALUE; - } -} - -FTNoIR_Tracker::~FTNoIR_Tracker() -{ - WaitForSingleObject(hMutex, INFINITE); - TerminateTracker(); - UnmapViewOfFile(shm); - //CloseHandle(hMapFile); - ReleaseMutex(hMutex); - //CloseHandle(hMutex); -} - -void FTNoIR_Tracker::Initialize( QFrame *videoframe ) -{ - qDebug("FTNoIR_Tracker::Initialize()"); - WaitForSingleObject(hMutex, INFINITE); - videoframe->setAttribute(Qt::WA_NativeWindow); - videoframe->show(); - ctrl = new VideoWidget(hMutex, shm->pixels, shm); - QHBoxLayout* layout = new QHBoxLayout(); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(ctrl); - videoframe->setLayout(layout); - ctrl->resize(FD_VIDEO_WIDTH, FD_VIDEO_HEIGHT); - qframe = videoframe; - loadSettings(); - ReleaseMutex(hMutex); -} - -void FTNoIR_Tracker::refreshVideo() { - QWidget* w; - WaitForSingleObject(hMutex, INFINITE); - w = ctrl; - ReleaseMutex(hMutex); - if (w != NULL) - w->update(); -} - -void FTNoIR_Tracker::StartTracker( HWND parent_window ) -{ - WaitForSingleObject(hMutex, INFINITE); - qDebug("* tracker starting"); - activep = true; - ReleaseMutex(hMutex); -} - -void FTNoIR_Tracker::StopTracker( bool exit ) -{ - WaitForSingleObject(hMutex, INFINITE); - qDebug("* tracker stopping"); - activep = false; - if (exit) { - TerminateTracker(); - if (qframe && qframe->layout()) { - delete qframe->layout(); - qframe = NULL; - } - if (ctrl) { - delete ctrl; - ctrl = NULL; - } - } - ReleaseMutex(hMutex); -} - -bool FTNoIR_Tracker::notifyZeroed() { - qDebug("notifying of zero"); - WaitForSingleObject(hMutex, INFINITE); - shm->zerop = 1; - ReleaseMutex(hMutex); - return true; -} - -bool FTNoIR_Tracker::GiveHeadPoseData(THeadPoseData *data) -{ - WaitForSingleObject(hMutex, INFINITE); - if (procInfo.hProcess == INVALID_HANDLE_VALUE) { - STARTUPINFO si; - SECURITY_ATTRIBUTES sa; - sa.bInheritHandle = 1; - sa.lpSecurityDescriptor = NULL; - sa.nLength = sizeof(SECURITY_ATTRIBUTES); - memset(&si, 0, sizeof(STARTUPINFO)); - si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; - si.cb = sizeof(STARTUPINFO); - si.hStdOutput = NULL; - si.hStdError = NULL; - si.hStdInput = NULL; - if (!CreateProcess(prog_cmdline, NULL, NULL, NULL, true, 0, NULL, NULL, &si, &procInfo)) { - qDebug("Badness! %d", GetLastError()); - } - } - - shm->received = 1; - - if (activep) { - shm->settings.newOutput = 0; - data->x = shm->data[3]; - data->y = shm->data[4]; - data->z = shm->data[5]; - data->yaw = shm->data[0]; - data->pitch = shm->data[1]; - data->roll = shm->data[2]; - ReleaseMutex(hMutex); - return true; - } - ReleaseMutex(hMutex); - return false; -} - -// -// Load the current Settings from the currently 'active' INI-file. -// -void FTNoIR_Tracker::loadSettings() { - load_settings(&shm->settings); -} - -//////////////////////////////////////////////////////////////////////////////// -// 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 ITrackerPtr __stdcall GetTracker() -{ - return new FTNoIR_Tracker; -} diff --git a/ftnoir_tracker_fd/ftnoir_tracker_facedetect_dialog.cpp b/ftnoir_tracker_fd/ftnoir_tracker_facedetect_dialog.cpp deleted file mode 100644 index 71b19242..00000000 --- a/ftnoir_tracker_fd/ftnoir_tracker_facedetect_dialog.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* Copyright (c) 2012 Stanislaw Halik - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - */ - -#include "ftnoir_tracker_fd.h" -#include -#include -#include - -//******************************************************************************************************* -// faceDetect Settings-dialog. -//******************************************************************************************************* - -static void load_settings(struct face_detect_settings* out) { - qDebug("[!] load_settings()"); - 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) - - iniFile.beginGroup ( "FaceDetectTracker" ); - out->redetect_ms = iniFile.value("RedetectMs", 500).toInt(); - out->camera_id = iniFile.value("CameraId", 0).toInt(); - out->quit = 0; - out->newOutput = 0; - out->magic = FD_MAGIC; - out->widgetp = iniFile.value("VideoWidget", true).toBool(); - iniFile.endGroup (); -} - -static void save_settings(const struct face_detect_settings* in) { - - 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) - - iniFile.beginGroup ( "FaceDetectTracker" ); - iniFile.setValue("RedetectMs", in->redetect_ms); - iniFile.setValue("CameraId", in->camera_id); - iniFile.setValue("VideoWidget", in->widgetp); - iniFile.endGroup (); -} - - -// -// Constructor for server-settings-dialog -// -TrackerControls::TrackerControls() : -QWidget() -{ - qDebug("[!] TrackerControls::TrackerControls()"); - hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(struct face_detect_shm), fd_shm_name); - shm = (struct face_detect_shm*) MapViewOfFile(hMapFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(struct face_detect_shm)); - hMutex = CreateMutex(NULL, false, fd_mutex_name); - ui.setupUi( this ); - - load_settings(&shm->settings); - - ui.redetect_ms->setValue(shm->settings.redetect_ms); - ui.cameraId->setValue(shm->settings.camera_id); - ui.videoWidget->setChecked(shm->settings.widgetp); - - settingsDirty = false; - - // what a load of boilerplate... - QObject::connect(ui.okButton, SIGNAL(clicked()), this, SLOT(doOK())); - QObject::connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(doCancel())); - QObject::connect(ui.redetect_ms, SIGNAL(valueChanged(int)), this, SLOT(doSetRedetectMs(int))); - QObject::connect(ui.cameraId, SIGNAL(valueChanged(int)), this, SLOT(doSetCameraId(int))); - QObject::connect(ui.videoWidget, SIGNAL(toggled(bool)), this, SLOT(doSetVideoWidget(bool))); -} - -void TrackerControls::save() { - save_settings(&shm->settings); - settingsDirty = false; -} - -void TrackerControls::doSetCameraId(int val) { - settingsDirty = true; - WaitForSingleObject(hMutex, INFINITE); - shm->settings.camera_id = val; - ReleaseMutex(hMutex); -} - -void TrackerControls::doSetVideoWidget(bool val) { - settingsDirty = true; - WaitForSingleObject(hMutex, INFINITE); - shm->settings.widgetp = val; - ReleaseMutex(hMutex); -} - -void TrackerControls::doSetRedetectMs(int val) { - settingsDirty = true; - WaitForSingleObject(hMutex, INFINITE); - shm->settings.redetect_ms = val; - ReleaseMutex(hMutex); -} - -// -// Destructor for server-dialog -// -TrackerControls::~TrackerControls() { - UnmapViewOfFile(shm); - //CloseHandle(hMutex); - //CloseHandle(hMapFile); -} - -void TrackerControls::Release() -{ - delete this; -} - -// -// Initialize tracker-client-dialog -// -void TrackerControls::Initialize(QWidget *parent) { - - QPoint offsetpos(200, 200); - if (parent) { - this->move(parent->pos() + offsetpos); - } - show(); -} - -// -// OK clicked on server-dialog -// -void TrackerControls::doOK() { - save(); - this->close(); -} - -// -// Cancel clicked on server-dialog -// -void TrackerControls::doCancel() { - // - // Ask if changed Settings should be saved - // - if (settingsDirty) { - int ret = QMessageBox::question ( this, "Settings have changed", "Do you want to save the settings?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard ); - - switch (ret) { - case QMessageBox::Save: - save(); - this->close(); - break; - case QMessageBox::Discard: - this->close(); - break; - case QMessageBox::Cancel: - // Cancel was clicked - break; - default: - // should never be reached - break; - } - } - else { - this->close(); - } -} - -//////////////////////////////////////////////////////////////////////////////// -// Factory function that creates instances if the Tracker-settings dialog object. - -// Export both decorated and undecorated names. -// GetTrackerDialog - Undecorated name, which can be easily used with GetProcAddress -// Win32 API function. -// _GetTrackerDialog@0 - Common name decoration for __stdcall functions in C language. -#pragma comment(linker, "/export:GetTrackerDialog=_GetTrackerDialog@0") - -FTNOIR_TRACKER_BASE_EXPORT ITrackerDialogPtr __stdcall GetTrackerDialog( ) -{ - return new TrackerControls; -} diff --git a/ftnoir_tracker_fd/ftnoir_tracker_facedetect_dll.cpp b/ftnoir_tracker_fd/ftnoir_tracker_facedetect_dll.cpp deleted file mode 100644 index 8e010e3e..00000000 --- a/ftnoir_tracker_fd/ftnoir_tracker_facedetect_dll.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************** -* FaceTrackNoIR This program is a private project of some enthusiastic * -* gamers from Holland, who don't like to pay much for * -* head-tracking. * -* * -* Copyright (C) 2012 Wim Vriend (Developing) * -* Ron Hendriks (Researching and Testing) * -* * -* Homepage * -* * -* This program is free software; you can redistribute it and/or modify it * -* under the terms of the GNU General Public License as published by the * -* Free Software Foundation; either version 3 of the License, or (at your * -* option) any later version. * -* * -* This program is distributed in the hope that it will be useful, but * -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * -* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * -* more details. * -* * -* You should have received a copy of the GNU General Public License along * -* with this program; if not, see . * -* * -********************************************************************************/ -/* - Modifications (last one on top): - 20120830 - WVR: The Dialog class was used to get general info on the DLL. This - had a big disadvantage: the complete dialog was loaded, just to get - some data and then it was deleted again (without ever showing the dialog). - The TrackerDll class solves this. - The functions to get the name(s) and icon were removed from the two other classes. -*/ -#include "ftnoir_tracker_fd.h" -#include - -FTNoIR_TrackerDll::FTNoIR_TrackerDll() { - //populate the description strings - trackerFullName = "faceDetect V1.0.0"; - trackerShortName = "faceDetect"; - trackerDescription = "Stans' faceDetect V1.0.0"; -} - -FTNoIR_TrackerDll::~FTNoIR_TrackerDll() -{ - -} - -void FTNoIR_TrackerDll::Initialize() -{ - return; -} - -void FTNoIR_TrackerDll::getFullName(QString *strToBeFilled) -{ - *strToBeFilled = trackerFullName; -}; - -void FTNoIR_TrackerDll::getShortName(QString *strToBeFilled) -{ - *strToBeFilled = trackerShortName; -}; - -void FTNoIR_TrackerDll::getDescription(QString *strToBeFilled) -{ - *strToBeFilled = trackerDescription; -}; - -void FTNoIR_TrackerDll::getIcon(QIcon *icon) -{ - *icon = QIcon(":/images/FaceDetect.ico"); -}; - -//////////////////////////////////////////////////////////////////////////////// -// Factory function that creates instances if the Tracker object. - -// Export both decorated and undecorated names. -// GetTrackerDll - Undecorated name, which can be easily used with GetProcAddress -// Win32 API function. -// _GetTrackerDll@0 - Common name decoration for __stdcall functions in C language. -#pragma comment(linker, "/export:GetTrackerDll=_GetTrackerDll@0") - -FTNOIR_TRACKER_BASE_EXPORT ITrackerDllPtr __stdcall GetTrackerDll() -{ - return new FTNoIR_TrackerDll; -} diff --git a/ftnoir_tracker_fd/images/FaceDetect.ico b/ftnoir_tracker_fd/images/FaceDetect.ico deleted file mode 100644 index 8e862cee..00000000 Binary files a/ftnoir_tracker_fd/images/FaceDetect.ico and /dev/null differ diff --git a/ftnoir_tracker_fd/images/xxx_facedetect.ico b/ftnoir_tracker_fd/images/xxx_facedetect.ico new file mode 100644 index 00000000..8e862cee Binary files /dev/null and b/ftnoir_tracker_fd/images/xxx_facedetect.ico differ diff --git a/ftnoir_tracker_fd/xxx_face-detect.h b/ftnoir_tracker_fd/xxx_face-detect.h new file mode 100644 index 00000000..fc359c53 --- /dev/null +++ b/ftnoir_tracker_fd/xxx_face-detect.h @@ -0,0 +1,39 @@ +#if defined(_WIN32) || defined(WIN32) +# ifdef __cplusplus +# define FDAPI_EXTERN extern "C" +# else +# define FDAPI_EXTERN +# endif +# define FDAPI(ret) FDAPI_EXTERN __declspec(dllexport) ret __cdecl +#else +# define FDAPI(ret) ret +#endif + +struct face_detect_settings { + unsigned char magic, quit, newOutput, widgetp; + int redetect_ms, camera_id; +}; + +struct face_detect; +FDAPI(struct face_detect*) face_detect_init(const char* eyes_model, + const char* nose_model, + const char* mouth_model, + const char* face_model, + int capture_no, + struct face_detect_settings* settings); +FDAPI(void) face_detect_free(struct face_detect *ctx); +FDAPI(int) face_detect_cycle(struct face_detect *ctx, float *data); +FDAPI(void) face_detect_zero(struct face_detect *ctx); + +FDAPI(unsigned char*) face_detect_video(struct face_detect* ctx); + +#define FD_VIDEO_WIDTH 252 +#define FD_VIDEO_HEIGHT 189 +#define FD_MAGIC 0x42 + +struct face_detect_shm { + unsigned char zerop, received; + float data[6]; + unsigned char pixels[FD_VIDEO_WIDTH * FD_VIDEO_HEIGHT * 3]; + struct face_detect_settings settings; +}; diff --git a/ftnoir_tracker_fd/xxx_ftnoir_fd_controls.ui b/ftnoir_tracker_fd/xxx_ftnoir_fd_controls.ui new file mode 100644 index 00000000..0bb8028f --- /dev/null +++ b/ftnoir_tracker_fd/xxx_ftnoir_fd_controls.ui @@ -0,0 +1,152 @@ + + + UICFDClientControls + + + Qt::ApplicationModal + + + + 0 + 0 + 283 + 151 + + + + + 0 + 0 + + + + FaceDetect tracker settings + + + + images/FaceTrackNoIR.icoimages/FaceTrackNoIR.ico + + + Qt::LeftToRight + + + false + + + + QLayout::SetFixedSize + + + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Changes take effect after tracker restart. + + + + + + + Camera (indices from 0) + + + + + + + 100 + + + + + + + Haar detection timeout (ms) + + + + + + + 2000 + + + 50 + + + 200 + + + + + + + Video Widget + + + + + + + Qt::RightToLeft + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + + + + + startEngineClicked() + stopEngineClicked() + cameraSettingsClicked() + + diff --git a/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect.cpp b/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect.cpp new file mode 100644 index 00000000..620fb9fd --- /dev/null +++ b/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect.cpp @@ -0,0 +1,214 @@ +/* Copyright (c) 2012 Stanislaw Halik + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + */ + +#include "ftnoir_tracker_fd.h" +#include +#include +#include + +static void load_settings(struct face_detect_settings* out) { + qDebug("[!] load_settings()"); + 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) + + iniFile.beginGroup ( "FaceDetectTracker" ); + out->redetect_ms = iniFile.value("RedetectMs", 500).toInt(); + out->camera_id = iniFile.value("CameraId", 0).toInt(); + out->quit = 0; + out->newOutput = 0; + out->magic = FD_MAGIC; + out->widgetp = iniFile.value("VideoWidget", true).toBool(); + iniFile.endGroup (); +} + +static void save_settings(const struct face_detect_settings* in) { + + 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) + + iniFile.beginGroup ( "FaceDetectTracker" ); + iniFile.setValue("RedetectMs", in->redetect_ms); + iniFile.setValue("CameraId", in->camera_id); + iniFile.setValue("VideoWidget", in->widgetp); + iniFile.endGroup (); +} + +VideoWidget::VideoWidget(HANDLE hMutex, unsigned char* data, struct face_detect_shm* shm) { + this->hMutex = hMutex; + this->data = data; + this->shm = shm; +} + +void VideoWidget::paintEvent(QPaintEvent*) { + WaitForSingleObject(hMutex, INFINITE); + if (!this->shm->settings.widgetp) { + ReleaseMutex(hMutex); + return; + } + QPainter painter(this); + QImage image(data, FD_VIDEO_WIDTH, FD_VIDEO_HEIGHT, QImage::Format_RGB888); + QRectF rect(0, 0, FD_VIDEO_WIDTH, FD_VIDEO_HEIGHT); + painter.paintEngine()->drawImage(rect, image.rgbSwapped(), rect); + ReleaseMutex(hMutex); +} + +FTNoIR_Tracker::FTNoIR_Tracker() +{ + qDebug("making tracker FaceDetect"); + + hMutex = CreateMutex(NULL, false, fd_mutex_name); + hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(struct face_detect_shm), fd_shm_name); + shm = (struct face_detect_shm*) MapViewOfFile(hMapFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(struct face_detect_shm)); + memset(shm, 0, sizeof(struct face_detect_shm)); + activep = 0; + procInfo.hProcess = INVALID_HANDLE_VALUE; + ctrl = NULL; + qframe = NULL; +} + +void FTNoIR_Tracker::TerminateTracker() { + if (procInfo.hProcess != INVALID_HANDLE_VALUE) { + shm->settings.quit = 1; + //TerminateProcess(procInfo.hProcess, 42); + CloseHandle(procInfo.hProcess); + CloseHandle(procInfo.hThread); + procInfo.hProcess = INVALID_HANDLE_VALUE; + } +} + +FTNoIR_Tracker::~FTNoIR_Tracker() +{ + WaitForSingleObject(hMutex, INFINITE); + TerminateTracker(); + UnmapViewOfFile(shm); + //CloseHandle(hMapFile); + ReleaseMutex(hMutex); + //CloseHandle(hMutex); +} + +void FTNoIR_Tracker::Initialize( QFrame *videoframe ) +{ + qDebug("FTNoIR_Tracker::Initialize()"); + WaitForSingleObject(hMutex, INFINITE); + videoframe->setAttribute(Qt::WA_NativeWindow); + videoframe->show(); + ctrl = new VideoWidget(hMutex, shm->pixels, shm); + QHBoxLayout* layout = new QHBoxLayout(); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(ctrl); + videoframe->setLayout(layout); + ctrl->resize(FD_VIDEO_WIDTH, FD_VIDEO_HEIGHT); + qframe = videoframe; + loadSettings(); + ReleaseMutex(hMutex); +} + +void FTNoIR_Tracker::refreshVideo() { + QWidget* w; + WaitForSingleObject(hMutex, INFINITE); + w = ctrl; + ReleaseMutex(hMutex); + if (w != NULL) + w->update(); +} + +void FTNoIR_Tracker::StartTracker( HWND parent_window ) +{ + WaitForSingleObject(hMutex, INFINITE); + qDebug("* tracker starting"); + activep = true; + ReleaseMutex(hMutex); +} + +void FTNoIR_Tracker::StopTracker( bool exit ) +{ + WaitForSingleObject(hMutex, INFINITE); + qDebug("* tracker stopping"); + activep = false; + if (exit) { + TerminateTracker(); + if (qframe && qframe->layout()) { + delete qframe->layout(); + qframe = NULL; + } + if (ctrl) { + delete ctrl; + ctrl = NULL; + } + } + ReleaseMutex(hMutex); +} + +bool FTNoIR_Tracker::notifyZeroed() { + qDebug("notifying of zero"); + WaitForSingleObject(hMutex, INFINITE); + shm->zerop = 1; + ReleaseMutex(hMutex); + return true; +} + +bool FTNoIR_Tracker::GiveHeadPoseData(THeadPoseData *data) +{ + WaitForSingleObject(hMutex, INFINITE); + if (procInfo.hProcess == INVALID_HANDLE_VALUE) { + STARTUPINFO si; + SECURITY_ATTRIBUTES sa; + sa.bInheritHandle = 1; + sa.lpSecurityDescriptor = NULL; + sa.nLength = sizeof(SECURITY_ATTRIBUTES); + memset(&si, 0, sizeof(STARTUPINFO)); + si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; + si.cb = sizeof(STARTUPINFO); + si.hStdOutput = NULL; + si.hStdError = NULL; + si.hStdInput = NULL; + if (!CreateProcess(prog_cmdline, NULL, NULL, NULL, true, 0, NULL, NULL, &si, &procInfo)) { + qDebug("Badness! %d", GetLastError()); + } + } + + shm->received = 1; + + if (activep) { + shm->settings.newOutput = 0; + data->x = shm->data[3]; + data->y = shm->data[4]; + data->z = shm->data[5]; + data->yaw = shm->data[0]; + data->pitch = shm->data[1]; + data->roll = shm->data[2]; + ReleaseMutex(hMutex); + return true; + } + ReleaseMutex(hMutex); + return false; +} + +// +// Load the current Settings from the currently 'active' INI-file. +// +void FTNoIR_Tracker::loadSettings() { + load_settings(&shm->settings); +} + +//////////////////////////////////////////////////////////////////////////////// +// 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 ITrackerPtr __stdcall GetTracker() +{ + return new FTNoIR_Tracker; +} diff --git a/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dialog.cpp b/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dialog.cpp new file mode 100644 index 00000000..71b19242 --- /dev/null +++ b/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dialog.cpp @@ -0,0 +1,180 @@ +/* Copyright (c) 2012 Stanislaw Halik + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + */ + +#include "ftnoir_tracker_fd.h" +#include +#include +#include + +//******************************************************************************************************* +// faceDetect Settings-dialog. +//******************************************************************************************************* + +static void load_settings(struct face_detect_settings* out) { + qDebug("[!] load_settings()"); + 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) + + iniFile.beginGroup ( "FaceDetectTracker" ); + out->redetect_ms = iniFile.value("RedetectMs", 500).toInt(); + out->camera_id = iniFile.value("CameraId", 0).toInt(); + out->quit = 0; + out->newOutput = 0; + out->magic = FD_MAGIC; + out->widgetp = iniFile.value("VideoWidget", true).toBool(); + iniFile.endGroup (); +} + +static void save_settings(const struct face_detect_settings* in) { + + 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) + + iniFile.beginGroup ( "FaceDetectTracker" ); + iniFile.setValue("RedetectMs", in->redetect_ms); + iniFile.setValue("CameraId", in->camera_id); + iniFile.setValue("VideoWidget", in->widgetp); + iniFile.endGroup (); +} + + +// +// Constructor for server-settings-dialog +// +TrackerControls::TrackerControls() : +QWidget() +{ + qDebug("[!] TrackerControls::TrackerControls()"); + hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(struct face_detect_shm), fd_shm_name); + shm = (struct face_detect_shm*) MapViewOfFile(hMapFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(struct face_detect_shm)); + hMutex = CreateMutex(NULL, false, fd_mutex_name); + ui.setupUi( this ); + + load_settings(&shm->settings); + + ui.redetect_ms->setValue(shm->settings.redetect_ms); + ui.cameraId->setValue(shm->settings.camera_id); + ui.videoWidget->setChecked(shm->settings.widgetp); + + settingsDirty = false; + + // what a load of boilerplate... + QObject::connect(ui.okButton, SIGNAL(clicked()), this, SLOT(doOK())); + QObject::connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(doCancel())); + QObject::connect(ui.redetect_ms, SIGNAL(valueChanged(int)), this, SLOT(doSetRedetectMs(int))); + QObject::connect(ui.cameraId, SIGNAL(valueChanged(int)), this, SLOT(doSetCameraId(int))); + QObject::connect(ui.videoWidget, SIGNAL(toggled(bool)), this, SLOT(doSetVideoWidget(bool))); +} + +void TrackerControls::save() { + save_settings(&shm->settings); + settingsDirty = false; +} + +void TrackerControls::doSetCameraId(int val) { + settingsDirty = true; + WaitForSingleObject(hMutex, INFINITE); + shm->settings.camera_id = val; + ReleaseMutex(hMutex); +} + +void TrackerControls::doSetVideoWidget(bool val) { + settingsDirty = true; + WaitForSingleObject(hMutex, INFINITE); + shm->settings.widgetp = val; + ReleaseMutex(hMutex); +} + +void TrackerControls::doSetRedetectMs(int val) { + settingsDirty = true; + WaitForSingleObject(hMutex, INFINITE); + shm->settings.redetect_ms = val; + ReleaseMutex(hMutex); +} + +// +// Destructor for server-dialog +// +TrackerControls::~TrackerControls() { + UnmapViewOfFile(shm); + //CloseHandle(hMutex); + //CloseHandle(hMapFile); +} + +void TrackerControls::Release() +{ + delete this; +} + +// +// Initialize tracker-client-dialog +// +void TrackerControls::Initialize(QWidget *parent) { + + QPoint offsetpos(200, 200); + if (parent) { + this->move(parent->pos() + offsetpos); + } + show(); +} + +// +// OK clicked on server-dialog +// +void TrackerControls::doOK() { + save(); + this->close(); +} + +// +// Cancel clicked on server-dialog +// +void TrackerControls::doCancel() { + // + // Ask if changed Settings should be saved + // + if (settingsDirty) { + int ret = QMessageBox::question ( this, "Settings have changed", "Do you want to save the settings?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard ); + + switch (ret) { + case QMessageBox::Save: + save(); + this->close(); + break; + case QMessageBox::Discard: + this->close(); + break; + case QMessageBox::Cancel: + // Cancel was clicked + break; + default: + // should never be reached + break; + } + } + else { + this->close(); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// Factory function that creates instances if the Tracker-settings dialog object. + +// Export both decorated and undecorated names. +// GetTrackerDialog - Undecorated name, which can be easily used with GetProcAddress +// Win32 API function. +// _GetTrackerDialog@0 - Common name decoration for __stdcall functions in C language. +#pragma comment(linker, "/export:GetTrackerDialog=_GetTrackerDialog@0") + +FTNOIR_TRACKER_BASE_EXPORT ITrackerDialogPtr __stdcall GetTrackerDialog( ) +{ + return new TrackerControls; +} diff --git a/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dll.cpp b/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dll.cpp new file mode 100644 index 00000000..8e010e3e --- /dev/null +++ b/ftnoir_tracker_fd/xxx_ftnoir_tracker_facedetect_dll.cpp @@ -0,0 +1,85 @@ +/******************************************************************************** +* FaceTrackNoIR This program is a private project of some enthusiastic * +* gamers from Holland, who don't like to pay much for * +* head-tracking. * +* * +* Copyright (C) 2012 Wim Vriend (Developing) * +* Ron Hendriks (Researching and Testing) * +* * +* Homepage * +* * +* This program is free software; you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the * +* Free Software Foundation; either version 3 of the License, or (at your * +* option) any later version. * +* * +* This program is distributed in the hope that it will be useful, but * +* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * +* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along * +* with this program; if not, see . * +* * +********************************************************************************/ +/* + Modifications (last one on top): + 20120830 - WVR: The Dialog class was used to get general info on the DLL. This + had a big disadvantage: the complete dialog was loaded, just to get + some data and then it was deleted again (without ever showing the dialog). + The TrackerDll class solves this. + The functions to get the name(s) and icon were removed from the two other classes. +*/ +#include "ftnoir_tracker_fd.h" +#include + +FTNoIR_TrackerDll::FTNoIR_TrackerDll() { + //populate the description strings + trackerFullName = "faceDetect V1.0.0"; + trackerShortName = "faceDetect"; + trackerDescription = "Stans' faceDetect V1.0.0"; +} + +FTNoIR_TrackerDll::~FTNoIR_TrackerDll() +{ + +} + +void FTNoIR_TrackerDll::Initialize() +{ + return; +} + +void FTNoIR_TrackerDll::getFullName(QString *strToBeFilled) +{ + *strToBeFilled = trackerFullName; +}; + +void FTNoIR_TrackerDll::getShortName(QString *strToBeFilled) +{ + *strToBeFilled = trackerShortName; +}; + +void FTNoIR_TrackerDll::getDescription(QString *strToBeFilled) +{ + *strToBeFilled = trackerDescription; +}; + +void FTNoIR_TrackerDll::getIcon(QIcon *icon) +{ + *icon = QIcon(":/images/FaceDetect.ico"); +}; + +//////////////////////////////////////////////////////////////////////////////// +// Factory function that creates instances if the Tracker object. + +// Export both decorated and undecorated names. +// GetTrackerDll - Undecorated name, which can be easily used with GetProcAddress +// Win32 API function. +// _GetTrackerDll@0 - Common name decoration for __stdcall functions in C language. +#pragma comment(linker, "/export:GetTrackerDll=_GetTrackerDll@0") + +FTNOIR_TRACKER_BASE_EXPORT ITrackerDllPtr __stdcall GetTrackerDll() +{ + return new FTNoIR_TrackerDll; +} diff --git a/ftnoir_tracker_fd/xxx_ftnoir_tracker_fd.h b/ftnoir_tracker_fd/xxx_ftnoir_tracker_fd.h new file mode 100644 index 00000000..02e95bb4 --- /dev/null +++ b/ftnoir_tracker_fd/xxx_ftnoir_tracker_fd.h @@ -0,0 +1,114 @@ +#include "..\ftnoir_tracker_base\ftnoir_tracker_base.h" +#include "face-detect.h" +#include "ui_FTNoIR_FD_controls.h" + +#include +#include +#include + +#include +#include +#include +#include "math.h" +#include + +using namespace std; + +static LPTSTR prog_cmdline = (LPTSTR) TEXT("face-detect.exe"); +static LPTSTR fd_shm_name = (LPTSTR) TEXT("face-detect-shm"); +static LPTSTR fd_mutex_name = (LPTSTR) TEXT("face-detect-mutex"); + +class VideoWidget : public QWidget +{ + Q_OBJECT +public: + VideoWidget(HANDLE hMutex, unsigned char* data, struct face_detect_shm* shm); +protected: + void paintEvent(QPaintEvent*); +private: + HANDLE hMutex; + unsigned char* data; + struct face_detect_shm* shm; +}; + +class FTNoIR_Tracker : public ITracker +{ +public: + FTNoIR_Tracker(); + ~FTNoIR_Tracker(); + + void Initialize( QFrame *videoframe ); + void StartTracker( HWND parent_window ); + void StopTracker( bool exit ); + bool GiveHeadPoseData(THeadPoseData *data); // Returns true if confidence is good + + void loadSettings(); +// bool setParameterValue(const int index, const float newvalue); + bool notifyZeroed(); + void refreshVideo(); + +private: + bool activep; + //QList> parameterRange; + //QList parameterValueAsFloat; + void TerminateTracker(); + HANDLE hMutex, hMapFile; + struct face_detect_shm* shm; + PROCESS_INFORMATION procInfo; + VideoWidget* ctrl; + QFrame* qframe; +}; + +class TrackerControls: public QWidget, Ui::UICFDClientControls, public ITrackerDialog +{ + Q_OBJECT +public: + + explicit TrackerControls(); + virtual ~TrackerControls(); + void Release(); // Member functions which are accessible from outside the DLL + void Initialize(QWidget *parent); + void registerTracker(ITracker *tracker) {}; + void unRegisterTracker() {}; + void NotifyZeroing(); + +private: + Ui::UICFDClientControls ui; + void loadSettings(); + void save(); + + bool settingsDirty; + HANDLE hMapFile, hMutex; + struct face_detect_shm* shm; + +private slots: + void doOK(); + void doCancel(); + void settingChanged() { settingsDirty = true; }; + void doSetRedetectMs(int val); + void doSetCameraId(int val); + void doSetVideoWidget(bool val); +signals: +}; + +//******************************************************************************************************* +// FaceTrackNoIR Tracker DLL. Functions used to get general info on the Tracker +//******************************************************************************************************* +class FTNoIR_TrackerDll : public ITrackerDll +{ +public: + FTNoIR_TrackerDll(); + ~FTNoIR_TrackerDll(); + + void Initialize(); + + void getFullName(QString *strToBeFilled); + void getShortName(QString *strToBeFilled); + void getDescription(QString *strToBeFilled); + void getIcon(QIcon *icon); + +private: + QString trackerFullName; // Trackers' name and description + QString trackerShortName; + QString trackerDescription; +}; diff --git a/ftnoir_tracker_fd/xxx_tracker.qrc b/ftnoir_tracker_fd/xxx_tracker.qrc new file mode 100644 index 00000000..d988ba71 --- /dev/null +++ b/ftnoir_tracker_fd/xxx_tracker.qrc @@ -0,0 +1,5 @@ + + + images/FaceDetect.ico + + -- cgit v1.2.3