diff options
author | Stéphane Lenclud <github@lenclud.com> | 2019-04-28 18:45:08 +0200 |
---|---|---|
committer | Stéphane Lenclud <github@lenclud.com> | 2019-04-28 18:45:08 +0200 |
commit | 5b3d825f1eace207502371427e15d8b54a237f83 (patch) | |
tree | 972d1485c0bbb5d0948ccfe407e10af5648e96d4 /tracker-easy | |
parent | b3a1c327bc3d8b7547171d99d3bfcf4d2714549c (diff) |
Easy Tracker: Auto center configurable from settings.easy-tracker-more-models
Diffstat (limited to 'tracker-easy')
-rw-r--r-- | tracker-easy/lang/nl_NL.ts | 20 | ||||
-rw-r--r-- | tracker-easy/lang/ru_RU.ts | 20 | ||||
-rw-r--r-- | tracker-easy/lang/stub.ts | 20 | ||||
-rw-r--r-- | tracker-easy/lang/zh_CN.ts | 20 | ||||
-rw-r--r-- | tracker-easy/settings.h | 2 | ||||
-rw-r--r-- | tracker-easy/tracker-easy-dialog.cpp | 3 | ||||
-rw-r--r-- | tracker-easy/tracker-easy-settings.ui | 129 | ||||
-rw-r--r-- | tracker-easy/tracker-easy.cpp | 58 |
8 files changed, 213 insertions, 59 deletions
diff --git a/tracker-easy/lang/nl_NL.ts b/tracker-easy/lang/nl_NL.ts index fe73b271..9c4e1843 100644 --- a/tracker-easy/lang/nl_NL.ts +++ b/tracker-easy/lang/nl_NL.ts @@ -206,5 +206,25 @@ <source><html><head/><body><p><span style=" font-weight:600;">Easy Tracker<br/>Version 1.0</span></p><p><span style=" font-weight:600;">by Stéphane Lenclud</span></p><p>See <a href="https://github.com/opentrack/opentrack/wiki/Easy-Tracker"><span style=" font-weight:600; text-decoration: underline; color:#9999aa;">documentation on GitHub</span></a></p></body></html></source> <translation type="unfinished"></translation> </message> + <message> + <source>Auto center</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><html><head/><body><p>Use P3P or AP3P for three and four points setup. Use EPNP or ITERATIVE for five points setup. Inconsistent configuration will result in undefined behavior.</p></body></html></source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Auto center timeout</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>If no valid pose can be determined after that much time the center pose will be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source> ms</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff --git a/tracker-easy/lang/ru_RU.ts b/tracker-easy/lang/ru_RU.ts index 022acd68..6499415f 100644 --- a/tracker-easy/lang/ru_RU.ts +++ b/tracker-easy/lang/ru_RU.ts @@ -206,5 +206,25 @@ <source><html><head/><body><p><span style=" font-weight:600;">Easy Tracker<br/>Version 1.0</span></p><p><span style=" font-weight:600;">by Stéphane Lenclud</span></p><p>See <a href="https://github.com/opentrack/opentrack/wiki/Easy-Tracker"><span style=" font-weight:600; text-decoration: underline; color:#9999aa;">documentation on GitHub</span></a></p></body></html></source> <translation type="unfinished"></translation> </message> + <message> + <source>Auto center</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><html><head/><body><p>Use P3P or AP3P for three and four points setup. Use EPNP or ITERATIVE for five points setup. Inconsistent configuration will result in undefined behavior.</p></body></html></source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Auto center timeout</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>If no valid pose can be determined after that much time the center pose will be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source> ms</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff --git a/tracker-easy/lang/stub.ts b/tracker-easy/lang/stub.ts index 60c84d35..7b6facec 100644 --- a/tracker-easy/lang/stub.ts +++ b/tracker-easy/lang/stub.ts @@ -206,5 +206,25 @@ <source><html><head/><body><p><span style=" font-weight:600;">Easy Tracker<br/>Version 1.0</span></p><p><span style=" font-weight:600;">by Stéphane Lenclud</span></p><p>See <a href="https://github.com/opentrack/opentrack/wiki/Easy-Tracker"><span style=" font-weight:600; text-decoration: underline; color:#9999aa;">documentation on GitHub</span></a></p></body></html></source> <translation type="unfinished"></translation> </message> + <message> + <source>Auto center</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><html><head/><body><p>Use P3P or AP3P for three and four points setup. Use EPNP or ITERATIVE for five points setup. Inconsistent configuration will result in undefined behavior.</p></body></html></source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Auto center timeout</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>If no valid pose can be determined after that much time the center pose will be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source> ms</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff --git a/tracker-easy/lang/zh_CN.ts b/tracker-easy/lang/zh_CN.ts index ee89b5b6..bbd8aff1 100644 --- a/tracker-easy/lang/zh_CN.ts +++ b/tracker-easy/lang/zh_CN.ts @@ -206,5 +206,25 @@ <source><html><head/><body><p><span style=" font-weight:600;">Easy Tracker<br/>Version 1.0</span></p><p><span style=" font-weight:600;">by Stéphane Lenclud</span></p><p>See <a href="https://github.com/opentrack/opentrack/wiki/Easy-Tracker"><span style=" font-weight:600; text-decoration: underline; color:#9999aa;">documentation on GitHub</span></a></p></body></html></source> <translation type="unfinished"></translation> </message> + <message> + <source>Auto center</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><html><head/><body><p>Use P3P or AP3P for three and four points setup. Use EPNP or ITERATIVE for five points setup. Inconsistent configuration will result in undefined behavior.</p></body></html></source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Auto center timeout</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>If no valid pose can be determined after that much time the center pose will be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source> ms</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff --git a/tracker-easy/settings.h b/tracker-easy/settings.h index 5a4dff84..b0f14417 100644 --- a/tracker-easy/settings.h +++ b/tracker-easy/settings.h @@ -44,6 +44,8 @@ namespace EasyTracker { value<int> fov{ b, "camera-fov", 56 }; value<bool> debug{ b, "debug", false }; + value<bool> iAutoCenter{ b, "iAutoCenter", true }; + value<int> iAutoCenterTimeout{ b, "iAutoCenterTimeout", 1000 }; value<int> PnpSolver{ b, "pnp-solver", cv::SOLVEPNP_P3P }; diff --git a/tracker-easy/tracker-easy-dialog.cpp b/tracker-easy/tracker-easy-dialog.cpp index d1aafee1..8c8356d1 100644 --- a/tracker-easy/tracker-easy-dialog.cpp +++ b/tracker-easy/tracker-easy-dialog.cpp @@ -72,6 +72,9 @@ namespace EasyTracker tie_setting(s.debug, ui.debug); + tie_setting(s.iAutoCenter, ui.iCheckBoxAutoCenter); + tie_setting(s.iAutoCenterTimeout, ui.iSpinBoxAutoCenterTimeout); + connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); diff --git a/tracker-easy/tracker-easy-settings.ui b/tracker-easy/tracker-easy-settings.ui index c6c3fbd7..451b3e54 100644 --- a/tracker-easy/tracker-easy-settings.ui +++ b/tracker-easy/tracker-easy-settings.ui @@ -61,7 +61,7 @@ <locale language="English" country="UnitedStates"/> </property> <property name="currentIndex"> - <number>2</number> + <number>0</number> </property> <widget class="QWidget" name="tabTracker"> <attribute name="title"> @@ -289,8 +289,21 @@ <property name="title"> <string>Settings</string> </property> - <layout class="QGridLayout" name="gridLayout_7"> - <item row="2" column="0"> + <layout class="QGridLayout" name="gridLayout"> + <item row="1" column="0"> + <widget class="QLabel" name="label_5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Debug (full size preview)</string> + </property> + </widget> + </item> + <item row="5" column="0"> <widget class="QLabel" name="label_7"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> @@ -306,24 +319,24 @@ </property> </widget> </item> - <item row="5" column="0"> - <widget class="QLabel" name="labelDeadzone"> + <item row="5" column="2"> + <widget class="QSpinBox" name="mindiam_spin"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="text"> - <string>Deadzone</string> + <property name="toolTip"> + <string>Minimum point diameter</string> </property> - <property name="buddy"> - <cstring>maxdiam_spin</cstring> + <property name="suffix"> + <string> px</string> </property> </widget> </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_8"> + <item row="2" column="2"> + <widget class="QCheckBox" name="iCheckBoxAutoCenter"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> @@ -331,12 +344,25 @@ </sizepolicy> </property> <property name="text"> - <string>Max size</string> + <string/> </property> </widget> </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_5"> + <item row="1" column="2"> + <widget class="QCheckBox" name="debug"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_13"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> <horstretch>0</horstretch> @@ -344,12 +370,12 @@ </sizepolicy> </property> <property name="text"> - <string>Debug (full size preview)</string> + <string>Auto center</string> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QCheckBox" name="debug"> + <item row="6" column="0"> + <widget class="QLabel" name="label_8"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> @@ -357,11 +383,27 @@ </sizepolicy> </property> <property name="text"> - <string/> + <string>Max size</string> </property> </widget> </item> - <item row="1" column="0"> + <item row="7" column="2"> + <widget class="QSpinBox" name="spinDeadzone"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="toolTip"> + <string>Size in pixels of half the edge defining deadzone squares around tracked points</string> + </property> + <property name="suffix"> + <string> px</string> + </property> + </widget> + </item> + <item row="4" column="0"> <widget class="QLabel" name="label_12"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> @@ -369,12 +411,15 @@ <verstretch>0</verstretch> </sizepolicy> </property> + <property name="toolTip"> + <string><html><head/><body><p>Use P3P or AP3P for three and four points setup. Use EPNP or ITERATIVE for five points setup. Inconsistent configuration will result in undefined behavior.</p></body></html></string> + </property> <property name="text"> <string>Perspective-N-Point solver</string> </property> </widget> </item> - <item row="1" column="1"> + <item row="4" column="2"> <widget class="QComboBox" name="comboBoxSolvers"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> @@ -420,23 +465,23 @@ </item> </widget> </item> - <item row="5" column="1"> - <widget class="QSpinBox" name="spinDeadzone"> + <item row="7" column="0"> + <widget class="QLabel" name="labelDeadzone"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="toolTip"> - <string>Size in pixels of half the edge defining deadzone squares around tracked points</string> + <property name="text"> + <string>Deadzone</string> </property> - <property name="suffix"> - <string> px</string> + <property name="buddy"> + <cstring>maxdiam_spin</cstring> </property> </widget> </item> - <item row="3" column="1"> + <item row="6" column="2"> <widget class="QSpinBox" name="maxdiam_spin"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> @@ -452,8 +497,24 @@ </property> </widget> </item> - <item row="2" column="1"> - <widget class="QSpinBox" name="mindiam_spin"> + <item row="3" column="0"> + <widget class="QLabel" name="label_14"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Auto center timeout</string> + </property> + <property name="buddy"> + <cstring>mindiam_spin</cstring> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QSpinBox" name="iSpinBoxAutoCenterTimeout"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> @@ -461,10 +522,16 @@ </sizepolicy> </property> <property name="toolTip"> - <string>Minimum point diameter</string> + <string>If no valid pose can be determined after that much time the center pose will be used.</string> </property> <property name="suffix"> - <string> px</string> + <string> ms</string> + </property> + <property name="maximum"> + <number>3600000</number> + </property> + <property name="singleStep"> + <number>500</number> </property> </widget> </item> diff --git a/tracker-easy/tracker-easy.cpp b/tracker-easy/tracker-easy.cpp index 1bb6b5e1..e13bdf37 100644 --- a/tracker-easy/tracker-easy.cpp +++ b/tracker-easy/tracker-easy.cpp @@ -118,33 +118,6 @@ namespace EasyTracker } /// - /// Create our model from settings specifications - /// - void Tracker::UpdateModel() - { - infout << "Update model"; - - QMutexLocker lock(&iProcessLock); - // Construct the points defining the object we want to detect based on settings. - // We are converting them from millimeters to centimeters. - // TODO: Need to support clip too. That's cap only for now. - iModel.clear(); - iModel.push_back(cv::Point3f(iSettings.iVertexTopX / 10.0, iSettings.iVertexTopY / 10.0, iSettings.iVertexTopZ / 10.0)); // Top - iModel.push_back(cv::Point3f(iSettings.iVertexRightX / 10.0, iSettings.iVertexRightY / 10.0, iSettings.iVertexRightZ / 10.0)); // Right - iModel.push_back(cv::Point3f(iSettings.iVertexLeftX / 10.0, iSettings.iVertexLeftY / 10.0, iSettings.iVertexLeftZ / 10.0)); // Left - - if (iSettings.iCustomModelFour) - { - iModel.push_back(cv::Point3f(iSettings.iVertexCenterX / 10.0, iSettings.iVertexCenterY / 10.0, iSettings.iVertexCenterZ / 10.0)); // Center - } - else if (iSettings.iCustomModelFive) - { - iModel.push_back(cv::Point3f(iSettings.iVertexTopRightX / 10.0, iSettings.iVertexTopRightY / 10.0, iSettings.iVertexTopRightZ / 10.0)); // Top Right - iModel.push_back(cv::Point3f(iSettings.iVertexTopLeftX / 10.0, iSettings.iVertexTopLeftY / 10.0, iSettings.iVertexTopLeftZ / 10.0)); // Top Left - } - } - - /// void Tracker::CreateCameraIntrinsicsMatrices() { // Create our camera matrix @@ -700,6 +673,34 @@ namespace EasyTracker iKf.Init(18, 6, 0, dt); } + + /// + /// Create our model from settings specifications + /// + void Tracker::UpdateModel() + { + infout << "Update model"; + + QMutexLocker lock(&iProcessLock); + // Construct the points defining the object we want to detect based on settings. + // We are converting them from millimeters to centimeters. + // TODO: Need to support clip too. That's cap only for now. + iModel.clear(); + iModel.push_back(cv::Point3f(iSettings.iVertexTopX / 10.0, iSettings.iVertexTopY / 10.0, iSettings.iVertexTopZ / 10.0)); // Top + iModel.push_back(cv::Point3f(iSettings.iVertexRightX / 10.0, iSettings.iVertexRightY / 10.0, iSettings.iVertexRightZ / 10.0)); // Right + iModel.push_back(cv::Point3f(iSettings.iVertexLeftX / 10.0, iSettings.iVertexLeftY / 10.0, iSettings.iVertexLeftZ / 10.0)); // Left + + if (iSettings.iCustomModelFour) + { + iModel.push_back(cv::Point3f(iSettings.iVertexCenterX / 10.0, iSettings.iVertexCenterY / 10.0, iSettings.iVertexCenterZ / 10.0)); // Center + } + else if (iSettings.iCustomModelFive) + { + iModel.push_back(cv::Point3f(iSettings.iVertexTopRightX / 10.0, iSettings.iVertexTopRightY / 10.0, iSettings.iVertexTopRightZ / 10.0)); // Top Right + iModel.push_back(cv::Point3f(iSettings.iVertexTopLeftX / 10.0, iSettings.iVertexTopLeftY / 10.0, iSettings.iVertexTopLeftZ / 10.0)); // Top Left + } + } + /// /// Take a copy of the settings needed by our thread to avoid deadlocks /// @@ -715,6 +716,7 @@ namespace EasyTracker iDebug = iSettings.debug; } + /// module_status Tracker::start_tracker(QFrame* video_frame) { // Check that we support that solver @@ -773,7 +775,7 @@ namespace EasyTracker QMutexLocker l(&iDataLock); // If there was no new data recently then we provide center data. // Basically, if our user remove her hat, we will go back to center position until she puts it back on. - if (iBestTime.elapsed_seconds() > 1) + if (iSettings.iAutoCenter && iBestTime.elapsed_ms() > iSettings.iAutoCenterTimeout) { // Reset to center until we get new data FeedData(aData, iCenterAngles, iCenterTranslation); |