diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2018-12-07 08:22:11 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2018-12-07 08:22:11 +0100 |
commit | d0dbe46a389b4ce33414fb9435784bbdb34a923f (patch) | |
tree | b4124c5e1d0ecf0eb080d1623a93cddd1f9fc1c0 | |
parent | b627bf2d913cd2f60a26462cd5e86a957a6ce508 (diff) |
tracker/aruco: make fps change backward-compatible
Issue: #794
-rw-r--r-- | tracker-aruco/aruco-trackercontrols.ui | 45 | ||||
-rw-r--r-- | tracker-aruco/ftnoir_tracker_aruco.cpp | 81 | ||||
-rw-r--r-- | tracker-aruco/ftnoir_tracker_aruco.h | 31 | ||||
-rw-r--r-- | tracker-aruco/lang/nl_NL.ts | 39 | ||||
-rw-r--r-- | tracker-aruco/lang/ru_RU.ts | 37 | ||||
-rw-r--r-- | tracker-aruco/lang/stub.ts | 37 | ||||
-rw-r--r-- | tracker-aruco/lang/zh_CN.ts | 37 |
7 files changed, 104 insertions, 203 deletions
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 @@ <verstretch>0</verstretch> </sizepolicy> </property> - <item> - <property name="text"> - <string>Default</string> - </property> - </item> - <item> - <property name="text"> - <string>30</string> - </property> - </item> - <item> - <property name="text"> - <string>50</string> - </property> - </item> - <item> - <property name="text"> - <string>60</string> - </property> - </item> - <item> - <property name="text"> - <string>75</string> - </property> - </item> - <item> - <property name="text"> - <string>100</string> - </property> - </item> - <item> - <property name="text"> - <string>120</string> - </property> - </item> - <item> - <property name="text"> - <string>125</string> - </property> - </item> - <item> - <property name="text"> - <string>200</string> - </property> - </item> </widget> </item> <item row="4" column="1"> 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 <QDebug> #include <vector> +#include <tuple> #include <cstdio> #include <cmath> #include <algorithm> @@ -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<std::tuple<int, int>> 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<QString> camera_name { b, "camera-name", ""}; value<int> 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<int> force_fps { b, "force-fps", 0 }, - resolution { b, "force-resolution", 0 }; + value<int> resolution { b, "force-resolution", 0 }; + value<aruco_fps> 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<cv_video_widget> videoWidget; std::unique_ptr<QHBoxLayout> layout; @@ -135,6 +148,8 @@ public: void register_tracker(ITracker * x) override { tracker = static_cast<aruco_tracker*>(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 @@ -36,30 +36,6 @@ <translation><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></translation> </message> <message> - <source>Default</source> - <translation>Standaard</translation> - </message> - <message> - <source>30</source> - <translation>30</translation> - </message> - <message> - <source>60</source> - <translation>30</translation> - </message> - <message> - <source>75</source> - <translation>75</translation> - </message> - <message> - <source>125</source> - <translation>125</translation> - </message> - <message> - <source>200</source> - <translation>200</translation> - </message> - <message> <source>Default (not recommended!)</source> <translation>Standaard (niet aanbevolen)</translation> </message> @@ -83,17 +59,12 @@ <source>Toggle calibration</source> <translation>Schakel tussen kalibratie</translation> </message> +</context> +<context> + <name>aruco_dialog</name> <message> - <source>50</source> - <translation type="unfinished">50</translation> - </message> - <message> - <source>100</source> - <translation type="unfinished">100</translation> - </message> - <message> - <source>120</source> - <translation type="unfinished">120</translation> + <source>Default</source> + <translation type="unfinished">Standaard</translation> </message> </context> </TS> 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 @@ -16,30 +16,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Default</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>30</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>60</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>75</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>125</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>200</source> - <translation type="unfinished"></translation> - </message> - <message> <source>640x480</source> <translation type="unfinished"></translation> </message> @@ -83,16 +59,11 @@ <source>Toggle calibration</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>aruco_dialog</name> <message> - <source>50</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>100</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>120</source> + <source>Default</source> <translation type="unfinished"></translation> </message> </context> 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 @@ -16,30 +16,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Default</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>30</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>60</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>75</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>125</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>200</source> - <translation type="unfinished"></translation> - </message> - <message> <source>640x480</source> <translation type="unfinished"></translation> </message> @@ -83,16 +59,11 @@ <source>Toggle calibration</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>aruco_dialog</name> <message> - <source>50</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>100</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>120</source> + <source>Default</source> <translation type="unfinished"></translation> </message> </context> 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 @@ -28,30 +28,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Default</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>30</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>60</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>75</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>125</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>200</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Camera name</source> <translation type="unfinished"></translation> </message> @@ -83,16 +59,11 @@ <source>Toggle calibration</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>aruco_dialog</name> <message> - <source>50</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>100</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>120</source> + <source>Default</source> <translation type="unfinished"></translation> </message> </context> |