summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2018-12-07 08:22:11 +0100
committerStanislaw Halik <sthalik@misaki.pl>2018-12-07 08:22:11 +0100
commitd0dbe46a389b4ce33414fb9435784bbdb34a923f (patch)
treeb4124c5e1d0ecf0eb080d1623a93cddd1f9fc1c0
parentb627bf2d913cd2f60a26462cd5e86a957a6ce508 (diff)
tracker/aruco: make fps change backward-compatible
Issue: #794
-rw-r--r--tracker-aruco/aruco-trackercontrols.ui45
-rw-r--r--tracker-aruco/ftnoir_tracker_aruco.cpp81
-rw-r--r--tracker-aruco/ftnoir_tracker_aruco.h31
-rw-r--r--tracker-aruco/lang/nl_NL.ts39
-rw-r--r--tracker-aruco/lang/ru_RU.ts37
-rw-r--r--tracker-aruco/lang/stub.ts37
-rw-r--r--tracker-aruco/lang/zh_CN.ts37
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>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Lees de &lt;a href=&quot;https://github.com/opentrack/opentrack/wiki/Aruco-tracker&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;wiki-pagina&lt;/span&gt;&lt;/a&gt; en voornamelijk de laatste paragraaf voordat u de markering uitprint.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</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>