summaryrefslogtreecommitdiffhomepage
path: root/tracker-aruco/ftnoir_tracker_aruco.h
diff options
context:
space:
mode:
Diffstat (limited to 'tracker-aruco/ftnoir_tracker_aruco.h')
-rw-r--r--tracker-aruco/ftnoir_tracker_aruco.h112
1 files changed, 57 insertions, 55 deletions
diff --git a/tracker-aruco/ftnoir_tracker_aruco.h b/tracker-aruco/ftnoir_tracker_aruco.h
index b753fdec..839be6d5 100644
--- a/tracker-aruco/ftnoir_tracker_aruco.h
+++ b/tracker-aruco/ftnoir_tracker_aruco.h
@@ -13,8 +13,9 @@
#include "api/plugin-api.hpp"
#include "cv/video-widget.hpp"
#include "compat/timer.hpp"
+#include "video/camera.hpp"
-#include "include/markerdetector.h"
+#include "aruco/markerdetector.h"
#include <QObject>
#include <QThread>
@@ -27,7 +28,6 @@
#include <cinttypes>
#include <opencv2/core.hpp>
-#include <opencv2/videoio.hpp>
// value 0->1
//#define DEBUG_UNSHARP_MASKING .75
@@ -37,46 +37,51 @@
using namespace options;
-struct settings : opts {
- enum rot
- {
- rot_zero = 0,
- rot_neg = -1,
- rot_plus = +1,
- };
-
- value<int> fov;
- value<double> headpos_x, headpos_y, headpos_z;
- value<QString> camera_name;
- value<int> force_fps, resolution;
- value<rot> model_rotation;
- settings() :
- opts("aruco-tracker"),
- fov(b, "field-of-view", 56),
- headpos_x(b, "headpos-x", 0),
- headpos_y(b, "headpos-y", 0),
- headpos_z(b, "headpos-z", 0),
- camera_name(b, "camera-name", ""),
- force_fps(b, "force-fps", 0),
- resolution(b, "force-resolution", 0),
- model_rotation(b, "model-rotation", rot_zero)
- {}
+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_300 = 9,
+ fps_250 = 10,
+ fps_MAX = 11,
};
-class aruco_dialog;
+struct settings : opts {
+ value<double> headpos_x { b, "headpos-x", 0 },
+ headpos_y { b, "headpos-y", 0 },
+ headpos_z { b, "headpos-z", 0 };
+
+ value<QString> camera_name { b, "camera-name", ""};
+ value<int> resolution { b, "force-resolution", 0 };
+ value<int> fov { b, "field-of-view", 56 };
+ value<aruco_fps> force_fps { b, "force-fps", fps_default };
+ value<bool> use_mjpeg { b, "use-mjpeg", false };
+
+ settings();
+};
class aruco_tracker : protected virtual QThread, public ITracker
{
Q_OBJECT
- friend class aruco_dialog;
- static constexpr inline float c_search_window = 1.3f;
+ static constexpr float c_search_window = 1.3f;
public:
aruco_tracker();
~aruco_tracker() override;
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;
+ std::unique_ptr<video::impl::camera> camera;
+
private:
bool detect_with_roi();
bool detect_without_roi();
@@ -93,54 +98,48 @@ private:
void set_detector_params();
void cycle_detection_params();
- cv::Point3f rotate_model(float x, float y, settings::rot mode);
-
- cv::VideoCapture camera;
- QMutex camera_mtx;
QMutex mtx;
std::unique_ptr<cv_video_widget> videoWidget;
std::unique_ptr<QHBoxLayout> layout;
settings s;
double pose[6] {}, fps = 0;
double no_detection_timeout = 0;
- cv::Mat frame, grayscale, color;
cv::Matx33d r;
-#ifdef DEBUG_UNSHARP_MASKING
- cv::Mat blurred;
-#endif
- std::vector<cv::Point3f> obj_points {4};
cv::Matx33d intrinsics = cv::Matx33d::eye();
- aruco::MarkerDetector detector;
- std::vector<aruco::Marker> markers;
cv::Vec3d t;
cv::Vec3d rvec, tvec;
- std::vector<cv::Point2f> roi_projection;
- std::vector<cv::Point2f> repr2;
cv::Matx33d m_r, m_q, rmat = cv::Matx33d::eye();
cv::Vec3d euler;
std::vector<cv::Point3f> roi_points {4};
+ std::vector<cv::Point2f> roi_projection;
+ std::vector<cv::Point2f> repr2;
+ std::vector<cv::Point3f> obj_points {4};
+ aruco::MarkerDetector detector;
+ std::vector<aruco::Marker> markers;
+ cv::Mat frame, grayscale, color;
cv::Rect last_roi { 65535, 65535, 0, 0 };
Timer fps_timer, last_detection_timer;
- unsigned adaptive_size_pos = 0;
+ unsigned adaptive_size_pos { 0 };
bool use_otsu = false;
#if !defined USE_EXPERIMENTAL_CANNY
- static constexpr inline int adaptive_thres = 6;
+ static constexpr int adaptive_thres = 6;
#else
- static constexpr inline int adaptive_thres = 3;
+ static constexpr int adaptive_thres = 3;
#endif
-#ifdef DEBUG_UNSHARP_MASKING
- static constexpr inline double gauss_kernel_size = 3;
-#endif
+ static constexpr double timeout = .35;
+ static constexpr double timeout_backoff_c = .25;
- static constexpr inline double timeout = 1;
- static constexpr inline double timeout_backoff_c = 4./11;
+ static constexpr float size_min = 0.05f;
+ static constexpr float size_max = 0.5f;
- static constexpr inline float size_min = 0.05;
- static constexpr inline float size_max = 0.5;
+ static constexpr double RC = .25;
- static constexpr inline double RC = .25;
+#ifdef DEBUG_UNSHARP_MASKING
+ static constexpr double gauss_kernel_size = 3;
+ cv::Mat blurred;
+#endif
};
class aruco_dialog : public ITrackerDialog
@@ -151,6 +150,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;
@@ -168,6 +169,7 @@ private Q_SLOTS:
class aruco_metadata : public Metadata
{
- QString name() { return QString("aruco -- paper marker tracker"); }
- QIcon icon() { return QIcon(":/images/aruco.png"); }
+ Q_OBJECT
+ QString name() override { return QString("aruco -- paper marker tracker"); }
+ QIcon icon() override { return QIcon(":/images/aruco.png"); }
};