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.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/tracker-aruco/ftnoir_tracker_aruco.h b/tracker-aruco/ftnoir_tracker_aruco.h
new file mode 100644
index 00000000..f827da77
--- /dev/null
+++ b/tracker-aruco/ftnoir_tracker_aruco.h
@@ -0,0 +1,99 @@
+/* Copyright (c) 2013-2015 Stanislaw Halik <sthalik@misaki.pl>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ */
+
+#pragma once
+
+#include "ui_aruco-trackercontrols.h"
+#include "ar_video_widget.h"
+#include <QObject>
+#include <QThread>
+#include <QMutex>
+#include <QHBoxLayout>
+#include <QDialog>
+#include <QTimer>
+#include "opentrack/options.hpp"
+#include "trans_calib.h"
+#include "opentrack/plugin-api.hpp"
+#include "opentrack/opencv-camera-dialog.hpp"
+
+#include <opencv2/core/core.hpp>
+#include <opencv2/highgui/highgui.hpp>
+
+using namespace options;
+
+struct settings : opts {
+ value<int> fov;
+ value<double> headpos_x, headpos_y, headpos_z;
+ value<QString> camera_name;
+ value<int> force_fps, resolution;
+ 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)
+ {}
+};
+
+class TrackerControls;
+
+class Tracker : protected QThread, public ITracker
+{
+ Q_OBJECT
+ friend class TrackerControls;
+ static constexpr double c_search_window = 2.65;
+public:
+ Tracker();
+ ~Tracker() override;
+ void start_tracker(QFrame* frame) override;
+ void data(double *data) override;
+ void run() override;
+ void getRT(cv::Matx33d &r, cv::Vec3d &t);
+private:
+ cv::VideoCapture camera;
+ QMutex camera_mtx;
+ QMutex mtx;
+ volatile bool stop;
+ QHBoxLayout* layout;
+ ArucoVideoWidget* videoWidget;
+ settings s;
+ double pose[6];
+ cv::Mat frame;
+ cv::Matx33d r;
+ cv::Vec3d t;
+};
+
+class TrackerControls : public ITrackerDialog, protected camera_dialog<Tracker>
+{
+ Q_OBJECT
+public:
+ TrackerControls();
+ void register_tracker(ITracker * x) override { tracker = static_cast<Tracker*>(x); }
+ void unregister_tracker() override { tracker = nullptr; }
+private:
+ Ui::Form ui;
+ Tracker* tracker;
+ settings s;
+ TranslationCalibrator calibrator;
+ QTimer calib_timer;
+private slots:
+ void doOK();
+ void doCancel();
+ void toggleCalibrate();
+ void cleanupCalib();
+ void update_tracker_calibration();
+ void camera_settings();
+};
+
+class TrackerDll : public Metadata
+{
+ QString name() { return QString("aruco -- paper marker tracker"); }
+ QIcon icon() { return QIcon(":/images/aruco.png"); }
+};