From d0dbe46a389b4ce33414fb9435784bbdb34a923f Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 7 Dec 2018 08:22:11 +0100 Subject: tracker/aruco: make fps change backward-compatible Issue: #794 --- tracker-aruco/aruco-trackercontrols.ui | 45 ------------------- tracker-aruco/ftnoir_tracker_aruco.cpp | 81 +++++++++++++++++++++++++++------- tracker-aruco/ftnoir_tracker_aruco.h | 31 +++++++++---- tracker-aruco/lang/nl_NL.ts | 39 +++------------- tracker-aruco/lang/ru_RU.ts | 37 ++-------------- tracker-aruco/lang/stub.ts | 37 ++-------------- tracker-aruco/lang/zh_CN.ts | 37 ++-------------- 7 files changed, 104 insertions(+), 203 deletions(-) (limited to 'tracker-aruco') diff --git a/tracker-aruco/aruco-trackercontrols.ui b/tracker-aruco/aruco-trackercontrols.ui index f2c18c1d..9c3bd78a 100644 --- a/tracker-aruco/aruco-trackercontrols.ui +++ b/tracker-aruco/aruco-trackercontrols.ui @@ -154,51 +154,6 @@ 0 - - - Default - - - - - 30 - - - - - 50 - - - - - 60 - - - - - 75 - - - - - 100 - - - - - 120 - - - - - 125 - - - - - 200 - - diff --git a/tracker-aruco/ftnoir_tracker_aruco.cpp b/tracker-aruco/ftnoir_tracker_aruco.cpp index db8e499a..6fc31874 100644 --- a/tracker-aruco/ftnoir_tracker_aruco.cpp +++ b/tracker-aruco/ftnoir_tracker_aruco.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -134,26 +135,35 @@ bool aruco_tracker::detect_without_roi() return markers.size() == 1 && markers[0].size() == 4; } +static int enum_to_fps(int value) +{ + int fps; + + switch (value) + { + default: eval_once(qDebug() << "aruco: invalid fps enum value"); + [[fallthrough]]; + case fps_default: fps = 0; break; + case fps_30: fps = 30; break; + case fps_60: fps = 60; break; + case fps_75: fps = 75; break; + case fps_125: fps = 125; break; + case fps_200: fps = 200; break; + case fps_50: fps = 50; break; + case fps_100: fps = 100; break; + case fps_120: fps = 120; break; + } + + return fps; +}; + bool aruco_tracker::open_camera() { int rint = s.resolution; if (rint < 0 || rint >= (int)(sizeof(resolution_choices) / sizeof(resolution_tuple))) rint = 0; resolution_tuple res = resolution_choices[rint]; - int fps; - switch (*s.force_fps) - { - default: - case 0: fps = 0; break; - case 1: fps = 30; break; - case 2: fps = 50; break; - case 3: fps = 60; break; - case 4: fps = 75; break; - case 5: fps = 100; break; - case 6: fps = 120; break; - case 7: fps = 125; break; - case 8: fps = 200; break; - } + int fps = enum_to_fps(s.force_fps); QMutexLocker l(&camera_mtx); @@ -442,17 +452,52 @@ void aruco_tracker::data(double *data) data[TZ] = pose[TZ]; } +void aruco_dialog::make_fps_combobox() +{ + std::vector> resolutions; + resolutions.reserve(fps_MAX); + + for (int k = 0; k < fps_MAX; k++) + { + int hz = enum_to_fps(k); + resolutions.emplace_back(k, hz); + } + + std::sort(resolutions.begin(), resolutions.end(), [](const auto& a, const auto& b) { + auto [idx1, hz1] = a; + auto [idx2, hz2] = b; + + return hz1 < hz2; + }); + + for (auto [idx, hz] : resolutions) + { + QString name; + + if (hz == 0) + name = tr("Default"); + else + name = QString::number(hz); + + ui.cameraFPS->addItem(name, idx); + } +} + aruco_dialog::aruco_dialog() : calibrator(1, 0) { + ui.setupUi(this); + //setAttribute(Qt::WA_NativeWindow, true); + + make_fps_combobox(); + tie_setting(s.force_fps, ui.cameraFPS); + tracker = nullptr; calib_timer.setInterval(100); - ui.setupUi(this); - setAttribute(Qt::WA_NativeWindow, true); ui.cameraName->addItems(get_camera_names()); + tie_setting(s.camera_name, ui.cameraName); tie_setting(s.resolution, ui.resolution); - tie_setting(s.force_fps, ui.cameraFPS); tie_setting(s.fov, ui.cameraFOV); tie_setting(s.headpos_x, ui.cx); tie_setting(s.headpos_y, ui.cy); @@ -537,4 +582,6 @@ void aruco_dialog::update_camera_settings_state(const QString& name) ui.camera_settings->setEnabled(true); } +settings::settings() : opts("aruco-tracker") {} + OPENTRACK_DECLARE_TRACKER(aruco_tracker, aruco_dialog, aruco_metadata) diff --git a/tracker-aruco/ftnoir_tracker_aruco.h b/tracker-aruco/ftnoir_tracker_aruco.h index 6c249c6a..757182e8 100644 --- a/tracker-aruco/ftnoir_tracker_aruco.h +++ b/tracker-aruco/ftnoir_tracker_aruco.h @@ -37,6 +37,20 @@ using namespace options; +enum aruco_fps +{ + fps_default = 0, + fps_30 = 1, + fps_60 = 2, + fps_75 = 3, + fps_125 = 4, + fps_200 = 5, + fps_50 = 6, + fps_100 = 7, + fps_120 = 8, + fps_MAX = 9, +}; + struct settings : opts { value camera_name { b, "camera-name", ""}; value fov { b, "field-of-view", 56 }; @@ -45,18 +59,15 @@ struct settings : opts { headpos_y { b, "headpos-y", 0 }, headpos_z { b, "headpos-z", 0 }; - value force_fps { b, "force-fps", 0 }, - resolution { b, "force-resolution", 0 }; + value resolution { b, "force-resolution", 0 }; + value force_fps { b, "force-fps", fps_default }; - settings() : opts("aruco-tracker") {} + settings(); }; -class aruco_dialog; - class aruco_tracker : protected virtual QThread, public ITracker { Q_OBJECT - friend class aruco_dialog; static constexpr inline float c_search_window = 1.3f; public: aruco_tracker(); @@ -64,7 +75,11 @@ public: module_status start_tracker(QFrame* frame) override; void data(double *data) override; void run() override; + void getRT(cv::Matx33d &r, cv::Vec3d &t); + QMutex camera_mtx; + cv::VideoCapture camera; + private: bool detect_with_roi(); bool detect_without_roi(); @@ -81,8 +96,6 @@ private: void set_detector_params(); void cycle_detection_params(); - cv::VideoCapture camera; - QMutex camera_mtx; QMutex mtx; std::unique_ptr videoWidget; std::unique_ptr layout; @@ -135,6 +148,8 @@ public: void register_tracker(ITracker * x) override { tracker = static_cast(x); } void unregister_tracker() override { tracker = nullptr; } private: + void make_fps_combobox(); + Ui::Form ui; aruco_tracker* tracker; settings s; diff --git a/tracker-aruco/lang/nl_NL.ts b/tracker-aruco/lang/nl_NL.ts index ad34d973..87040565 100644 --- a/tracker-aruco/lang/nl_NL.ts +++ b/tracker-aruco/lang/nl_NL.ts @@ -35,30 +35,6 @@ <html><head/><body><p>Read the <a href="https://github.com/opentrack/opentrack/wiki/Aruco-tracker"><span style=" text-decoration: underline; color:#0000ff;">wiki page</span></a> and especially the last paragraph before printing markers.</p></body></html> <html><head/><body><p>Lees de <a href="https://github.com/opentrack/opentrack/wiki/Aruco-tracker"><span style=" text-decoration: underline; color:#0000ff;">wiki-pagina</span></a> en voornamelijk de laatste paragraaf voordat u de markering uitprint.</p></body></html> - - Default - Standaard - - - 30 - 30 - - - 60 - 30 - - - 75 - 75 - - - 125 - 125 - - - 200 - 200 - Default (not recommended!) Standaard (niet aanbevolen) @@ -83,17 +59,12 @@ Toggle calibration Schakel tussen kalibratie + + + aruco_dialog - 50 - 50 - - - 100 - 100 - - - 120 - 120 + Default + Standaard diff --git a/tracker-aruco/lang/ru_RU.ts b/tracker-aruco/lang/ru_RU.ts index fb54c20f..57c8170d 100644 --- a/tracker-aruco/lang/ru_RU.ts +++ b/tracker-aruco/lang/ru_RU.ts @@ -15,30 +15,6 @@ Diagonal FOV - - Default - - - - 30 - - - - 60 - - - - 75 - - - - 125 - - - - 200 - - 640x480 @@ -83,16 +59,11 @@ Toggle calibration + + + aruco_dialog - 50 - - - - 100 - - - - 120 + Default diff --git a/tracker-aruco/lang/stub.ts b/tracker-aruco/lang/stub.ts index 39d584a3..67cb36b8 100644 --- a/tracker-aruco/lang/stub.ts +++ b/tracker-aruco/lang/stub.ts @@ -15,30 +15,6 @@ Diagonal FOV - - Default - - - - 30 - - - - 60 - - - - 75 - - - - 125 - - - - 200 - - 640x480 @@ -83,16 +59,11 @@ Toggle calibration + + + aruco_dialog - 50 - - - - 100 - - - - 120 + Default diff --git a/tracker-aruco/lang/zh_CN.ts b/tracker-aruco/lang/zh_CN.ts index 9115340f..b5093b4e 100644 --- a/tracker-aruco/lang/zh_CN.ts +++ b/tracker-aruco/lang/zh_CN.ts @@ -27,30 +27,6 @@ Default (not recommended!) - - Default - - - - 30 - - - - 60 - - - - 75 - - - - 125 - - - - 200 - - Camera name @@ -83,16 +59,11 @@ Toggle calibration + + + aruco_dialog - 50 - - - - 100 - - - - 120 + Default -- cgit v1.2.3