diff options
-rw-r--r-- | tracker-neuralnet/ftnoir_tracker_neuralnet.cpp | 16 | ||||
-rw-r--r-- | tracker-neuralnet/ftnoir_tracker_neuralnet.h | 3 | ||||
-rw-r--r-- | tracker-neuralnet/lang/nl_NL.ts | 4 | ||||
-rw-r--r-- | tracker-neuralnet/lang/ru_RU.ts | 4 | ||||
-rw-r--r-- | tracker-neuralnet/lang/stub.ts | 4 | ||||
-rw-r--r-- | tracker-neuralnet/lang/zh_CN.ts | 4 | ||||
-rw-r--r-- | tracker-neuralnet/neuralnet-trackercontrols.ui | 52 | ||||
-rw-r--r-- | video-opencv/impl-camera.cpp | 17 | ||||
-rw-r--r-- | video-opencv/impl.hpp | 3 | ||||
-rw-r--r-- | video-opencv/settings.hpp | 13 |
10 files changed, 104 insertions, 16 deletions
diff --git a/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp b/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp index d8077326..cbfb3496 100644 --- a/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp +++ b/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp @@ -750,6 +750,22 @@ NeuralNetDialog::NeuralNetDialog() : tie_setting(settings_.force_fps, ui_.cameraFPS); #endif + { + const struct { + QString label; + exposure_preset preset; + } presets[] = { + { QStringLiteral("Near (1-4ft)"), exposure_preset::near }, + { QStringLiteral("Far (4-8ft)"), exposure_preset::far }, + { QStringLiteral("Custom"), exposure_preset::ignored }, + }; + + for (const auto& [label, preset] : presets) + ui_.exposure_preset->addItem(label, int(preset)); + + tie_setting(cs_.exposure_preset, ui_.exposure_preset); + } + connect(ui_.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); connect(ui_.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); connect(ui_.camera_settings, SIGNAL(clicked()), this, SLOT(camera_settings())); diff --git a/tracker-neuralnet/ftnoir_tracker_neuralnet.h b/tracker-neuralnet/ftnoir_tracker_neuralnet.h index df71a7a8..d44a9953 100644 --- a/tracker-neuralnet/ftnoir_tracker_neuralnet.h +++ b/tracker-neuralnet/ftnoir_tracker_neuralnet.h @@ -20,6 +20,7 @@ #include "compat/timer.hpp" #include "video/camera.hpp" #include "cv/affine.hpp" +#include "video-opencv/settings.hpp" #include <QObject> #include <QThread> @@ -176,6 +177,8 @@ private: Ui::Form ui_; Settings settings_; + dshow_camera_settings cs_; + // Calibration code mostly taken from point tracker QTimer calib_timer_; TranslationCalibrator trans_calib_; diff --git a/tracker-neuralnet/lang/nl_NL.ts b/tracker-neuralnet/lang/nl_NL.ts index 25742b8f..09a2ebd7 100644 --- a/tracker-neuralnet/lang/nl_NL.ts +++ b/tracker-neuralnet/lang/nl_NL.ts @@ -40,6 +40,10 @@ Don't roll or change position.</source> <source>Up</source> <translation type="unfinished"></translation> </message> + <message> + <source>Exposure preset</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>neuralnet_tracker_ns::NeuralNetDialog</name> diff --git a/tracker-neuralnet/lang/ru_RU.ts b/tracker-neuralnet/lang/ru_RU.ts index 5b311a19..3b1bb257 100644 --- a/tracker-neuralnet/lang/ru_RU.ts +++ b/tracker-neuralnet/lang/ru_RU.ts @@ -40,6 +40,10 @@ Don't roll or change position.</source> <source>Up</source> <translation type="unfinished"></translation> </message> + <message> + <source>Exposure preset</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>neuralnet_tracker_ns::NeuralNetDialog</name> diff --git a/tracker-neuralnet/lang/stub.ts b/tracker-neuralnet/lang/stub.ts index 62ce527b..8461ce0f 100644 --- a/tracker-neuralnet/lang/stub.ts +++ b/tracker-neuralnet/lang/stub.ts @@ -40,6 +40,10 @@ Don't roll or change position.</source> <source>Up</source> <translation type="unfinished"></translation> </message> + <message> + <source>Exposure preset</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>neuralnet_tracker_ns::NeuralNetDialog</name> diff --git a/tracker-neuralnet/lang/zh_CN.ts b/tracker-neuralnet/lang/zh_CN.ts index 39a6c0e2..4b24f3db 100644 --- a/tracker-neuralnet/lang/zh_CN.ts +++ b/tracker-neuralnet/lang/zh_CN.ts @@ -40,6 +40,10 @@ Don't roll or change position.</source> <source>Up</source> <translation type="unfinished"></translation> </message> + <message> + <source>Exposure preset</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>neuralnet_tracker_ns::NeuralNetDialog</name> diff --git a/tracker-neuralnet/neuralnet-trackercontrols.ui b/tracker-neuralnet/neuralnet-trackercontrols.ui index 01fdd4bd..c03f866c 100644 --- a/tracker-neuralnet/neuralnet-trackercontrols.ui +++ b/tracker-neuralnet/neuralnet-trackercontrols.ui @@ -10,21 +10,14 @@ <x>0</x> <y>0</y> <width>445</width> - <height>226</height> + <height>355</height> </rect> </property> <property name="windowTitle"> <string>Tracker settings</string> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="8" column="0"> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - <item row="6" column="0"> + <item row="7" column="0"> <widget class="QLabel" name="resolution_display"> <property name="autoFillBackground"> <bool>true</bool> @@ -260,7 +253,7 @@ Don't roll or change position.</string> </layout> </widget> </item> - <item row="4" column="0"> + <item row="5" column="0"> <widget class="QPushButton" name="camera_settings"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> @@ -273,6 +266,45 @@ Don't roll or change position.</string> </property> </widget> </item> + <item row="9" column="0"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Camera settings</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Exposure preset</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="exposure_preset"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </widget> + </item> </layout> </widget> <resources/> diff --git a/video-opencv/impl-camera.cpp b/video-opencv/impl-camera.cpp index 543f9dff..9e749d75 100644 --- a/video-opencv/impl-camera.cpp +++ b/video-opencv/impl-camera.cpp @@ -47,12 +47,17 @@ bool cam::start(info& args) if (args.use_mjpeg) cap->set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G')); -#if 1 - cap->set(cv::CAP_PROP_AUTO_EXPOSURE, 0); - //cap->set(cv::CAP_PROP_SHARPNESS, 0); - if (auto exp = cap->get(cv::CAP_PROP_EXPOSURE); exp > -4 || exp < -5) - cap->set(cv::CAP_PROP_EXPOSURE, -5); -#endif + if (s.exposure_preset != exposure_preset::ignored) + { + cap->set(cv::CAP_PROP_AUTO_EXPOSURE, 0); + //cap->set(cv::CAP_PROP_SHARPNESS, 0); + switch (s.exposure_preset) + { + case exposure_preset::near: cap->set(cv::CAP_PROP_EXPOSURE, -5); break; + case exposure_preset::far: cap->set(cv::CAP_PROP_EXPOSURE, -4); break; + default: break; + } + } if (!cap->isOpened()) goto fail; diff --git a/video-opencv/impl.hpp b/video-opencv/impl.hpp index ed5499b0..88ae069d 100644 --- a/video-opencv/impl.hpp +++ b/video-opencv/impl.hpp @@ -8,6 +8,7 @@ #pragma once #include "video/camera.hpp" +#include "settings.hpp" #include <optional> #include <opencv2/videoio.hpp> @@ -46,6 +47,8 @@ static constexpr int video_capture_backend = bool get_frame_(); + dshow_camera_settings s; + std::optional<cv::VideoCapture> cap; cv::Mat mat; frame frame_; diff --git a/video-opencv/settings.hpp b/video-opencv/settings.hpp new file mode 100644 index 00000000..69fb5705 --- /dev/null +++ b/video-opencv/settings.hpp @@ -0,0 +1,13 @@ +#pragma once +#include "options/value.hpp" +using namespace options; + +enum class exposure_preset : int { + near, far, ignored, + DEFAULT = near, +}; + +struct dshow_camera_settings final { + bundle b = make_bundle("video-camera"); + value<exposure_preset> exposure_preset{b, "exposure-preset", exposure_preset::near}; +}; |