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> | 
