diff options
-rw-r--r-- | CMakeLists.txt | 10 | ||||
-rw-r--r-- | cmake/mingw-w64.cmake | 14 | ||||
-rw-r--r-- | facetracknoir/settings.ui | 12 | ||||
-rw-r--r-- | ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp | 19 | ||||
-rw-r--r-- | ftnoir_tracker_pt/ftnoir_tracker_pt.cpp | 20 | ||||
-rw-r--r-- | ftnoir_tracker_pt/ftnoir_tracker_pt.h | 8 | ||||
-rw-r--r-- | ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp | 22 | ||||
-rw-r--r-- | ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h | 8 | ||||
-rw-r--r-- | ftnoir_tracker_pt/ftnoir_tracker_pt_settings.h | 4 | ||||
-rw-r--r-- | ftnoir_tracker_pt/point_extractor.h | 2 | ||||
-rw-r--r-- | ftnoir_tracker_pt/point_tracker.h | 4 | ||||
-rw-r--r-- | pose-widget/glwidget.cpp | 14 |
12 files changed, 74 insertions, 63 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index f9da7d36..4413f712 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,9 @@ project(opentrack) cmake_minimum_required(VERSION 2.8.11) cmake_policy(SET CMP0020 NEW) -cmake_policy(SET CMP0058 OLD) +if(POLICY CMP0058) + cmake_policy(SET CMP0058 OLD) +endif() include(CMakeParseArguments) @@ -321,7 +323,7 @@ if(OpenCV_FOUND) link_with_dinput8(opentrack-tracker-pt) if(SDK_ARUCO_LIBPATH) - opentrack_library(opentrack-tracker-aruco ftnoir_tracker_aruco GNU-LINK -fno-ipa-pta) + opentrack_library(opentrack-tracker-aruco ftnoir_tracker_aruco) target_link_libraries(opentrack-tracker-aruco ${SDK_ARUCO_LIBPATH} ${OpenCV_LIBS}) target_include_directories(opentrack-tracker-aruco SYSTEM PUBLIC ${OpenCV_INCLUDE_DIRS}) endif() @@ -368,7 +370,7 @@ if(SDK_HYDRA) ) install(FILES "${SDK_HYDRA}/bin/win32/release_dll/sixense.dll" #"${SDK_HYDRA}/bin/win32/release_dll/sixense_utils.dll" - DESTINATION .) + DESTINATION . PERMISSIONS WORLD_READ WORLD_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE) else() if(SDK_HYDRA_AMD64) set(underscore-sixtyfour _x64) @@ -479,7 +481,7 @@ endif() install(TARGETS opentrack DESTINATION .) if(SDK_VJOY) - install(FILES "${SDK_VJOY}/VJoy.dll" DESTINATION .) + install(FILES "${SDK_VJOY}/VJoy.dll" DESTINATION . PERMISSIONS WORLD_READ WORLD_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE) endif() if(WIN32) diff --git a/cmake/mingw-w64.cmake b/cmake/mingw-w64.cmake index b69fa129..7e34746d 100644 --- a/cmake/mingw-w64.cmake +++ b/cmake/mingw-w64.cmake @@ -25,14 +25,16 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(lto "-flto -fuse-linker-plugin -flto-partition=none -fno-fat-lto-objects") -set(rice "-ftree-vectorize -ffast-math -mfpmath=both -fipa-pta") -set(cpu "-march=i686 -mtune=corei7-avx -msse -msse2 -mno-sse3 -mno-avx") +set(lto "-flto -fuse-linker-plugin") +set(rice "-fmerge-all-constants -fipa-pta -fipa-icf -fweb -fmodulo-sched -fmodulo-sched-allow-regmoves -fgcse-sm -fgcse-las") +set(cpu "-O3 -march=i686 -mtune=corei7-avx -ffast-math -mfpmath=both -msse -msse2 -mno-sse3 -mno-avx") +set(lto-link "${lto} -flto-partition=none -fno-fat-lto-objects") set(CFLAGS-OVERRIDE "" CACHE STRING "") -set(CMAKE_C_FLAGS_RELEASE "-O3 ${rice} ${lto} ${cpu} ${CFLAGS-OVERRIDE}" CACHE STRING "" FORCE) -set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "-msse -msse2 -mno-sse3 -mno-avx ${lto}" CACHE STRING "" FORCE) -set(CMAKE_EXE_LINKER_FLAGS_RELEASE ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}) +set(CMAKE_C_FLAGS_RELEASE "${rice} ${lto} ${cpu} ${CFLAGS-OVERRIDE}" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${cpu} ${lto-link} ${CFLAGS-OVERRIDE}" CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS_RELEASE ${CMAKE_SHARED_LINKER_FLAGS_RELEASE} CACHE STRING "" FORCE) +set(CMAKE_MODULE_LINKER_FLAGS_RELEASE ${CMAKE_SHARED_LINKER_FLAGS_RELEASE} CACHE STRING "" FORCE) set(CMAKE_BUILD_TYPE "RELEASE" CACHE STRING "" FORCE) diff --git a/facetracknoir/settings.ui b/facetracknoir/settings.ui index 6d67b8ff..34b15b47 100644 --- a/facetracknoir/settings.ui +++ b/facetracknoir/settings.ui @@ -344,10 +344,10 @@ </size> </property> <property name="minimum"> - <number>-90</number> + <number>-180</number> </property> <property name="maximum"> - <number>90</number> + <number>180</number> </property> </widget> </item> @@ -360,10 +360,10 @@ </size> </property> <property name="minimum"> - <number>-90</number> + <number>-180</number> </property> <property name="maximum"> - <number>90</number> + <number>180</number> </property> </widget> </item> @@ -383,10 +383,10 @@ </size> </property> <property name="minimum"> - <number>-90</number> + <number>-180</number> </property> <property name="maximum"> - <number>90</number> + <number>180</number> </property> </widget> </item> diff --git a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp index cf9dc7cb..ca8cea9e 100644 --- a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp +++ b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp @@ -236,8 +236,8 @@ void Tracker::run() obj_points.at<float>(x4,2)= 0 + s.headpos_z; std::vector<cv::Point2f> img_points = m; - cv::solvePnP(obj_points, img_points, intrinsics, dist_coeffs, rvec, tvec, false, cv::SOLVEPNP_DLS); - cv::solvePnP(obj_points, img_points, intrinsics, dist_coeffs, rvec, tvec, true, cv::SOLVEPNP_ITERATIVE); + if (!cv::solvePnP(obj_points, img_points, intrinsics, dist_coeffs, rvec, tvec, false, cv::SOLVEPNP_ITERATIVE)) + goto fail; { std::vector<cv::Point2f> repr2; @@ -287,11 +287,17 @@ void Tracker::run() last_roi.x = 0; if (last_roi.y < 0) last_roi.y = 0; - - if (last_roi.width+1 > color.cols) + if (last_roi.width < 0) + last_roi.width = 0; + if (last_roi.height < 0) + last_roi.height = 0; + if (last_roi.x >= color.cols-1) + last_roi.x = color.cols-1; + if (last_roi.width >= color.cols-1) last_roi.width = color.cols-1; - - if (last_roi.height+1 > color.rows) + if (last_roi.y >= color.rows-1) + last_roi.y= color.rows-1; + if (last_roi.height >= color.rows-1) last_roi.height = color.rows-1; last_roi.width -= last_roi.x; @@ -320,6 +326,7 @@ void Tracker::run() cv::rectangle(frame, last_roi, cv::Scalar(255, 0, 255), 1); } else +fail: last_roi = cv::Rect(65535, 65535, 0, 0); if (frame.rows > 0) diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp index b7138f25..4c0913e7 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt.cpp @@ -19,7 +19,7 @@ using namespace cv; //#define PT_PERF_LOG //log performance //----------------------------------------------------------------------------- -Tracker::Tracker() +Tracker_PT::Tracker_PT() : mutex(QMutex::Recursive), commands(0), video_widget(NULL), @@ -29,7 +29,7 @@ Tracker::Tracker() connect(s.b.get(), SIGNAL(saving()), this, SLOT(apply_settings())); } -Tracker::~Tracker() +Tracker_PT::~Tracker_PT() { set_command(ABORT); wait(); @@ -38,26 +38,26 @@ Tracker::~Tracker() if (video_frame->layout()) delete video_frame->layout(); } -void Tracker::set_command(Command command) +void Tracker_PT::set_command(Command command) { //QMutexLocker lock(&mutex); commands |= command; } -void Tracker::reset_command(Command command) +void Tracker_PT::reset_command(Command command) { //QMutexLocker lock(&mutex); commands &= ~command; } -float Tracker::get_focal_length() +float Tracker_PT::get_focal_length() { static constexpr float pi = 3.1415926f; const float fov = static_cast<int>(s.fov) * pi / 180.f; return 0.5f / tan(0.5f * fov); } -void Tracker::run() +void Tracker_PT::run() { #ifdef PT_PERF_LOG QFile log_file(QCoreApplication::applicationDirPath() + "/PointTrackerPerformance.txt"); @@ -130,7 +130,7 @@ void Tracker::run() int camera_name_to_index(const QString &name); -void Tracker::apply_settings() +void Tracker_PT::apply_settings() { qDebug()<<"Tracker:: Applying settings"; QMutexLocker lock(&mutex); @@ -140,7 +140,7 @@ void Tracker::apply_settings() qDebug()<<"Tracker::apply ends"; } -void Tracker::start_tracker(QFrame *parent_window) +void Tracker_PT::start_tracker(QFrame *parent_window) { this->video_frame = parent_window; video_frame->setAttribute(Qt::WA_NativeWindow); @@ -167,7 +167,7 @@ void Tracker::StopTracker(bool exit) #define THeadPoseData double #endif -void Tracker::data(THeadPoseData *data) +void Tracker_PT::data(THeadPoseData *data) { if (ever_success) { @@ -211,5 +211,5 @@ extern "C" OPENTRACK_EXPORT ITracker* GetConstructor() OPENTRACK_EXPORT ITrackerPtr __stdcall GetTracker() #endif { - return new Tracker; + return new Tracker_PT; } diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt.h b/ftnoir_tracker_pt/ftnoir_tracker_pt.h index 349cf2c8..771631cd 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt.h +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt.h @@ -33,12 +33,12 @@ //----------------------------------------------------------------------------- // Constantly processes the tracking chain in a separate thread -class Tracker : public QThread, public ITracker +class Tracker_PT : public QThread, public ITracker { Q_OBJECT public: - Tracker(); - ~Tracker() override; + Tracker_PT(); + ~Tracker_PT() override; void start_tracker(QFrame* parent_window) override; void data(double* data) override; @@ -69,7 +69,7 @@ private: PTVideoWidget* video_widget; QFrame* video_frame; - settings s; + settings_pt s; Timer time; volatile bool ever_success; diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp index 6fa149ed..86178cb3 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.cpp @@ -21,7 +21,7 @@ using namespace std; //----------------------------------------------------------------------------- -TrackerDialog::TrackerDialog() +TrackerDialog_PT::TrackerDialog_PT() : tracker(NULL), timer(this), trans_calib_running(false) @@ -86,7 +86,7 @@ TrackerDialog::TrackerDialog() timer.start(100); } -void TrackerDialog::startstop_trans_calib(bool start) +void TrackerDialog_PT::startstop_trans_calib(bool start) { if (start) { @@ -110,7 +110,7 @@ void TrackerDialog::startstop_trans_calib(bool start) } } -void TrackerDialog::poll_tracker_info() +void TrackerDialog_PT::poll_tracker_info() { if (tracker) { @@ -142,7 +142,7 @@ void TrackerDialog::poll_tracker_info() } } -void TrackerDialog::trans_calib_step() +void TrackerDialog_PT::trans_calib_step() { if (tracker) { @@ -151,32 +151,32 @@ void TrackerDialog::trans_calib_step() } } -void TrackerDialog::save() +void TrackerDialog_PT::save() { s.b->save(); } -void TrackerDialog::doOK() +void TrackerDialog_PT::doOK() { save(); close(); } -void TrackerDialog::doCancel() +void TrackerDialog_PT::doCancel() { s.b->reload(); close(); } -void TrackerDialog::register_tracker(ITracker *t) +void TrackerDialog_PT::register_tracker(ITracker *t) { qDebug()<<"TrackerDialog:: Tracker registered"; - tracker = static_cast<Tracker*>(t); + tracker = static_cast<Tracker_PT*>(t); ui.tcalib_button->setEnabled(true); //ui.center_button->setEnabled(true); } -void TrackerDialog::unregister_tracker() +void TrackerDialog_PT::unregister_tracker() { qDebug()<<"TrackerDialog:: Tracker un-registered"; tracker = NULL; @@ -186,5 +186,5 @@ void TrackerDialog::unregister_tracker() extern "C" OPENTRACK_EXPORT ITrackerDialog* GetDialog( ) { - return new TrackerDialog; + return new TrackerDialog_PT; } diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h index c6f7f8e1..c1cd2e3b 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_dialog.h @@ -23,11 +23,11 @@ //----------------------------------------------------------------------------- // The dialog that shows up when the user presses "Settings" -class TrackerDialog : public ITrackerDialog +class TrackerDialog_PT : public ITrackerDialog { Q_OBJECT public: - TrackerDialog(); + TrackerDialog_PT(); void register_tracker(ITracker *tracker) override; void unregister_tracker() override; void save(); @@ -40,8 +40,8 @@ public slots: void startstop_trans_calib(bool start); void poll_tracker_info(); private: - settings s; - Tracker* tracker; + settings_pt s; + Tracker_PT* tracker; QTimer timer; TranslationCalibrator trans_calib; diff --git a/ftnoir_tracker_pt/ftnoir_tracker_pt_settings.h b/ftnoir_tracker_pt/ftnoir_tracker_pt_settings.h index fba755bd..30647412 100644 --- a/ftnoir_tracker_pt/ftnoir_tracker_pt_settings.h +++ b/ftnoir_tracker_pt/ftnoir_tracker_pt_settings.h @@ -13,7 +13,7 @@ #include "opentrack/options.hpp" using namespace options; -struct settings : opts +struct settings_pt : opts { value<QString> camera_name; value<int> cam_res_x, @@ -36,7 +36,7 @@ struct settings : opts value<bool> dynamic_pose; - settings() : + settings_pt() : opts("tracker-pt"), camera_name(b, "camera-name", ""), cam_res_x(b, "camera-res-width", 640), diff --git a/ftnoir_tracker_pt/point_extractor.h b/ftnoir_tracker_pt/point_extractor.h index 06d148d6..3f6cfb72 100644 --- a/ftnoir_tracker_pt/point_extractor.h +++ b/ftnoir_tracker_pt/point_extractor.h @@ -25,7 +25,7 @@ public: const std::vector<cv::Vec2f>& get_points() { return points; } PointExtractor(); - settings s; + settings_pt s; private: std::vector<cv::Vec2f> points; cv::Mat frame_last; diff --git a/ftnoir_tracker_pt/point_tracker.h b/ftnoir_tracker_pt/point_tracker.h index 10bd2cef..3b9573ff 100644 --- a/ftnoir_tracker_pt/point_tracker.h +++ b/ftnoir_tracker_pt/point_tracker.h @@ -72,7 +72,7 @@ public: enum Model { Clip = 0, Cap = 1, Custom = 2 }; - PointModel(settings& s) + PointModel(settings_pt& s) { set_model(s); // calculate u @@ -86,7 +86,7 @@ public: P = 1.0/(s11*s22-s12*s12) * cv::Matx22f(s22, -s12, -s12, s11); } - void set_model(settings& s) + void set_model(settings_pt& s) { switch (s.active_model_panel) { diff --git a/pose-widget/glwidget.cpp b/pose-widget/glwidget.cpp index b444e87e..66527a57 100644 --- a/pose-widget/glwidget.cpp +++ b/pose-widget/glwidget.cpp @@ -70,7 +70,7 @@ public: } bool barycentric_coords(const vec2& px, vec2& uv) const { - vec2 v2({ px.x() - origin.x(), px.y() - origin.y() }); + vec2 v2 = px - origin; double dot12 = v1.dot(v2); double dot02 = v0.dot(v2); double u = (dot11 * dot02 - dot01 * dot12) * invDenom; @@ -162,15 +162,15 @@ void GLWidget::project_quad_texture() { for (int x = 0; x < sx; x++) { vec2 pos({(double)x, (double)y}); for (int i = 0; i < 2; i++) { - vec2 coords; - if (triangles[i].barycentric_coords(pos, coords)) + vec2 uv; + if (triangles[i].barycentric_coords(pos, uv)) { const int px = origs[i][0].x() - + coords.x() * (origs[i][2].x() - origs[i][0].x()) - + coords.y() * (origs[i][1].x() - origs[i][0].x()); + + uv.x() * (origs[i][2].x() - origs[i][0].x()) + + uv.y() * (origs[i][1].x() - origs[i][0].x()); const int py = origs[i][0].y() - + coords.x() * (origs[i][2].y() - origs[i][0].y()) - + coords.y() * (origs[i][1].y() - origs[i][0].y()); + + uv.x() * (origs[i][2].y() - origs[i][0].y()) + + uv.y() * (origs[i][1].y() - origs[i][0].y()); int r = orig[py * orig_pitch + px * orig_depth + 2]; int g = orig[py * orig_pitch + px * orig_depth + 1]; |