diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2023-02-27 14:10:00 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-02-27 15:45:56 +0100 | 
| commit | d7fb4b69ef543c8201b043424b9f24bfe8e050d1 (patch) | |
| tree | eb5ea4b0199228493aa60306214069c4169334c1 | |
| parent | 872dcc46108cc620006aac49a7454b5ac59bac8c (diff) | |
tracker/nn, video/opencv: allow non-trackhat cameras
| -rw-r--r-- | tracker-neuralnet/ftnoir_tracker_neuralnet.cpp | 39 | ||||
| -rw-r--r-- | tracker-neuralnet/lang/nl_NL.ts | 72 | ||||
| -rw-r--r-- | tracker-neuralnet/lang/ru_RU.ts | 72 | ||||
| -rw-r--r-- | tracker-neuralnet/lang/stub.ts | 72 | ||||
| -rw-r--r-- | tracker-neuralnet/lang/zh_CN.ts | 72 | ||||
| -rw-r--r-- | tracker-neuralnet/neuralnet-trackercontrols.ui | 518 | 
6 files changed, 757 insertions, 88 deletions
| diff --git a/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp b/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp index f1585954..5f582340 100644 --- a/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp +++ b/tracker-neuralnet/ftnoir_tracker_neuralnet.cpp @@ -448,9 +448,6 @@ NeuralNetTracker::~NeuralNetTracker()  module_status NeuralNetTracker::start_tracker(QFrame* videoframe)  { -    if (camera_name_to_index("TrackHat sensor") == -1) -        return error("Can't open camera 'TrackHat sensor'"); -      videoframe->show();      video_widget_ = std::make_unique<cv_video_widget>(videoframe);      layout_ = std::make_unique<QHBoxLayout>(); @@ -506,15 +503,33 @@ bool NeuralNetTracker::load_and_initialize_model()  bool NeuralNetTracker::open_camera()  { -    //int rint = std::clamp(*settings_.resolution, 0, (int)std::size(resolution_choices)-1); -    int rint = 1; +    int rint = std::clamp(*settings_.resolution, 0, (int)std::size(resolution_choices)-1);      resolution_tuple res = resolution_choices[rint]; -    //int fps = enum_to_fps(settings_.force_fps); -    int fps = 60; +    int fps = enum_to_fps(settings_.force_fps);      QMutexLocker l(&camera_mtx_); -    camera_ = video::make_camera("TrackHat sensor"); +    camera_ = nullptr; +    const QString name = settings_.camera_name; + +    if (name.isEmpty() || name == "TrackHat sensor") +    { +        camera_ = video::make_camera_("TrackHat sensor"); +        if (camera_) +        { +            video::impl::camera::info args {}; +            args.width = 640; +            args.height = 480; +            args.fps = 60; +            args.use_mjpeg = true; +            if (camera_->start(args)) +                return true; +        } +        if (!name.isEmpty()) +            return false; +    } + +    camera_ = video::make_camera(name);      if (!camera_)          return false; @@ -529,8 +544,7 @@ bool NeuralNetTracker::open_camera()      if (fps)          args.fps = fps; -    //args.use_mjpeg = settings_.use_mjpeg; -    args.use_mjpeg = true; +    args.use_mjpeg = settings_.use_mjpeg;      if (!camera_->start(args))      { @@ -608,6 +622,8 @@ void NeuralNetTracker::run()              std::chrono::duration_cast<std::chrono::milliseconds>(                  clk.now() - t).count()*1.e-3);      } + +    camera_ = nullptr;  } @@ -730,11 +746,12 @@ NeuralNetDialog::NeuralNetDialog() :      make_fps_combobox();      make_resolution_combobox(); -#if 0 +    ui_.cameraName->addItem(QString{});      for (const auto& str : video::camera_names())          ui_.cameraName->addItem(str);      tie_setting(settings_.camera_name, ui_.cameraName); +#if 0      tie_setting(settings_.fov, ui_.cameraFOV);  #endif      tie_setting(settings_.offset_fwd, ui_.tx_spin); diff --git a/tracker-neuralnet/lang/nl_NL.ts b/tracker-neuralnet/lang/nl_NL.ts index 09a2ebd7..b1e03913 100644 --- a/tracker-neuralnet/lang/nl_NL.ts +++ b/tracker-neuralnet/lang/nl_NL.ts @@ -44,6 +44,78 @@ Don't roll or change position.</source>          <source>Exposure preset</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <source>Camera Configuration</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Camera name</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>The requested resolution for cases where the camera delivers maximum frame rate only for a particular resolution. The image may still be downscaled to the internal resolution.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Field of view. Needed to transform the pose to world coordinates.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Diagonal FOV</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Resolution</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Requested video frame rate. Actual setting may not be supported by the camera.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Frames per second</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>MJPEG</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Tuning / Debug</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Number of threads. Can be used to balance the CPU load between the game and the tracker.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Smoothing Alpha</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Zoom</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show the image patch that the pose estimation model sees.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show Network Input</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Amount of smoothing of the face region coordinates. Can help stabilize the pose.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Thread Count</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Zoom factor for the face region. Applied before the patch is fed into the pose estimation model. There is a sweet spot near 1.</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 3b1bb257..fcca70a9 100644 --- a/tracker-neuralnet/lang/ru_RU.ts +++ b/tracker-neuralnet/lang/ru_RU.ts @@ -44,6 +44,78 @@ Don't roll or change position.</source>          <source>Exposure preset</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <source>Camera Configuration</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Camera name</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>The requested resolution for cases where the camera delivers maximum frame rate only for a particular resolution. The image may still be downscaled to the internal resolution.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Field of view. Needed to transform the pose to world coordinates.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Diagonal FOV</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Resolution</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Requested video frame rate. Actual setting may not be supported by the camera.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Frames per second</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>MJPEG</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Tuning / Debug</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Number of threads. Can be used to balance the CPU load between the game and the tracker.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Smoothing Alpha</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Zoom</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show the image patch that the pose estimation model sees.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show Network Input</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Amount of smoothing of the face region coordinates. Can help stabilize the pose.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Thread Count</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Zoom factor for the face region. Applied before the patch is fed into the pose estimation model. There is a sweet spot near 1.</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 8461ce0f..ecd559b1 100644 --- a/tracker-neuralnet/lang/stub.ts +++ b/tracker-neuralnet/lang/stub.ts @@ -44,6 +44,78 @@ Don't roll or change position.</source>          <source>Exposure preset</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <source>Camera Configuration</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Camera name</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>The requested resolution for cases where the camera delivers maximum frame rate only for a particular resolution. The image may still be downscaled to the internal resolution.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Field of view. Needed to transform the pose to world coordinates.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Diagonal FOV</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Resolution</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Requested video frame rate. Actual setting may not be supported by the camera.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Frames per second</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>MJPEG</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Tuning / Debug</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Number of threads. Can be used to balance the CPU load between the game and the tracker.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Smoothing Alpha</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Zoom</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show the image patch that the pose estimation model sees.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show Network Input</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Amount of smoothing of the face region coordinates. Can help stabilize the pose.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Thread Count</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Zoom factor for the face region. Applied before the patch is fed into the pose estimation model. There is a sweet spot near 1.</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 4b24f3db..ab458d6f 100644 --- a/tracker-neuralnet/lang/zh_CN.ts +++ b/tracker-neuralnet/lang/zh_CN.ts @@ -44,6 +44,78 @@ Don't roll or change position.</source>          <source>Exposure preset</source>          <translation type="unfinished"></translation>      </message> +    <message> +        <source>Camera Configuration</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Camera name</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>The requested resolution for cases where the camera delivers maximum frame rate only for a particular resolution. The image may still be downscaled to the internal resolution.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Field of view. Needed to transform the pose to world coordinates.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Diagonal FOV</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Resolution</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Requested video frame rate. Actual setting may not be supported by the camera.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Frames per second</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>MJPEG</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Tuning / Debug</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Number of threads. Can be used to balance the CPU load between the game and the tracker.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Smoothing Alpha</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>ROI Zoom</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show the image patch that the pose estimation model sees.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Show Network Input</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Amount of smoothing of the face region coordinates. Can help stabilize the pose.</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Thread Count</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Zoom factor for the face region. Applied before the patch is fed into the pose estimation model. There is a sweet spot near 1.</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 1c3e9eb6..009b15fd 100644 --- a/tracker-neuralnet/neuralnet-trackercontrols.ui +++ b/tracker-neuralnet/neuralnet-trackercontrols.ui @@ -9,15 +9,401 @@     <rect>      <x>0</x>      <y>0</y> -    <width>445</width> -    <height>290</height> +    <width>608</width> +    <height>384</height>     </rect>    </property>    <property name="windowTitle">     <string>Tracker settings</string>    </property>    <layout class="QGridLayout" name="gridLayout"> -   <item row="3" column="0"> +   <item row="2" column="0"> +    <widget class="QGroupBox" name="groupBox"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="autoFillBackground"> +      <bool>true</bool> +     </property> +     <property name="title"> +      <string>Camera Configuration</string> +     </property> +     <property name="flat"> +      <bool>false</bool> +     </property> +     <property name="checkable"> +      <bool>false</bool> +     </property> +     <layout class="QHBoxLayout" name="horizontalLayout"> +      <property name="spacing"> +       <number>10</number> +      </property> +      <property name="bottomMargin"> +       <number>8</number> +      </property> +      <item> +       <layout class="QGridLayout" name="gridLayout_3"> +        <property name="sizeConstraint"> +         <enum>QLayout::SetDefaultConstraint</enum> +        </property> +        <property name="leftMargin"> +         <number>0</number> +        </property> +        <property name="topMargin"> +         <number>0</number> +        </property> +        <property name="rightMargin"> +         <number>0</number> +        </property> +        <property name="bottomMargin"> +         <number>0</number> +        </property> +        <property name="horizontalSpacing"> +         <number>0</number> +        </property> +        <property name="verticalSpacing"> +         <number>2</number> +        </property> +        <item row="0" column="0"> +         <widget class="QLabel" name="label_10"> +          <property name="text"> +           <string>Camera name</string> +          </property> +         </widget> +        </item> +        <item row="2" column="1"> +         <widget class="QComboBox" name="resolution"> +          <property name="sizePolicy"> +           <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +            <horstretch>0</horstretch> +            <verstretch>0</verstretch> +           </sizepolicy> +          </property> +          <property name="toolTip"> +           <string>The requested resolution for cases where the camera delivers maximum frame rate only for a particular resolution. The image may still be downscaled to the internal resolution.</string> +          </property> +         </widget> +        </item> +        <item row="0" column="1"> +         <widget class="QComboBox" name="cameraName"> +          <property name="sizePolicy"> +           <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +            <horstretch>0</horstretch> +            <verstretch>0</verstretch> +           </sizepolicy> +          </property> +         </widget> +        </item> +        <item row="1" column="1"> +         <widget class="QSpinBox" name="cameraFOV"> +          <property name="sizePolicy"> +           <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +            <horstretch>0</horstretch> +            <verstretch>0</verstretch> +           </sizepolicy> +          </property> +          <property name="toolTip"> +           <string>Field of view. Needed to transform the pose to world coordinates.</string> +          </property> +          <property name="locale"> +           <locale language="English" country="UnitedStates"/> +          </property> +          <property name="minimum"> +           <number>35</number> +          </property> +          <property name="maximum"> +           <number>90</number> +          </property> +         </widget> +        </item> +        <item row="1" column="0"> +         <widget class="QLabel" name="label_9"> +          <property name="text"> +           <string>Diagonal FOV</string> +          </property> +         </widget> +        </item> +        <item row="2" column="0"> +         <widget class="QLabel" name="resolution_label"> +          <property name="text"> +           <string>Resolution</string> +          </property> +         </widget> +        </item> +        <item row="3" column="0"> +         <widget class="QLabel" name="label"> +          <property name="text"> +           <string>Exposure preset</string> +          </property> +         </widget> +        </item> +        <item row="3" 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> +      </item> +      <item> +       <layout class="QGridLayout" name="gridLayout_6"> +        <property name="leftMargin"> +         <number>0</number> +        </property> +        <property name="topMargin"> +         <number>0</number> +        </property> +        <property name="rightMargin"> +         <number>0</number> +        </property> +        <property name="bottomMargin"> +         <number>0</number> +        </property> +        <property name="horizontalSpacing"> +         <number>0</number> +        </property> +        <property name="verticalSpacing"> +         <number>2</number> +        </property> +        <item row="4" column="1"> +         <widget class="QComboBox" name="cameraFPS"> +          <property name="sizePolicy"> +           <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +            <horstretch>0</horstretch> +            <verstretch>0</verstretch> +           </sizepolicy> +          </property> +          <property name="toolTip"> +           <string>Requested video frame rate. Actual setting may not be supported by the camera.</string> +          </property> +         </widget> +        </item> +        <item row="4" column="0"> +         <widget class="QLabel" name="label_12"> +          <property name="text"> +           <string>Frames per second</string> +          </property> +         </widget> +        </item> +        <item row="2" column="1"> +         <widget class="QCheckBox" name="use_mjpeg"> +          <property name="sizePolicy"> +           <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +            <horstretch>0</horstretch> +            <verstretch>0</verstretch> +           </sizepolicy> +          </property> +          <property name="minimumSize"> +           <size> +            <width>0</width> +            <height>0</height> +           </size> +          </property> +          <property name="text"> +           <string/> +          </property> +         </widget> +        </item> +        <item row="2" column="0"> +         <widget class="QLabel" name="label_11"> +          <property name="text"> +           <string>MJPEG</string> +          </property> +         </widget> +        </item> +        <item row="0" column="1"> +         <widget class="QPushButton" name="camera_settings"> +          <property name="sizePolicy"> +           <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +            <horstretch>0</horstretch> +            <verstretch>0</verstretch> +           </sizepolicy> +          </property> +          <property name="text"> +           <string>Camera settings</string> +          </property> +         </widget> +        </item> +       </layout> +      </item> +     </layout> +    </widget> +   </item> +   <item row="5" column="0"> +    <widget class="QGroupBox" name="tuningOptionsBox"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="minimumSize"> +      <size> +       <width>0</width> +       <height>0</height> +      </size> +     </property> +     <property name="autoFillBackground"> +      <bool>true</bool> +     </property> +     <property name="title"> +      <string>Tuning / Debug</string> +     </property> +     <layout class="QGridLayout" name="gridLayout_2"> +      <item row="0" column="10"> +       <widget class="Line" name="line_2"> +        <property name="orientation"> +         <enum>Qt::Vertical</enum> +        </property> +       </widget> +      </item> +      <item row="0" column="1"> +       <widget class="QSpinBox" name="threadCount"> +        <property name="toolTip"> +         <string>Number of threads. Can be used to balance the CPU load between the game and the tracker.</string> +        </property> +        <property name="minimum"> +         <number>1</number> +        </property> +        <property name="maximum"> +         <number>32</number> +        </property> +       </widget> +      </item> +      <item row="0" column="4"> +       <widget class="Line" name="line"> +        <property name="orientation"> +         <enum>Qt::Vertical</enum> +        </property> +       </widget> +      </item> +      <item row="0" column="8"> +       <widget class="QLabel" name="roiFilterAlphaLabel"> +        <property name="sizePolicy"> +         <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +          <horstretch>0</horstretch> +          <verstretch>0</verstretch> +         </sizepolicy> +        </property> +        <property name="text"> +         <string>ROI Smoothing Alpha</string> +        </property> +       </widget> +      </item> +      <item row="0" column="11"> +       <widget class="QLabel" name="roiZoomLabel"> +        <property name="text"> +         <string>ROI Zoom</string> +        </property> +       </widget> +      </item> +      <item row="0" column="2"> +       <widget class="Line" name="line_3"> +        <property name="orientation"> +         <enum>Qt::Vertical</enum> +        </property> +       </widget> +      </item> +      <item row="0" column="3"> +       <widget class="QCheckBox" name="showNetworkInput"> +        <property name="sizePolicy"> +         <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +          <horstretch>0</horstretch> +          <verstretch>0</verstretch> +         </sizepolicy> +        </property> +        <property name="toolTip"> +         <string>Show the image patch that the pose estimation model sees.</string> +        </property> +        <property name="text"> +         <string>Show Network Input</string> +        </property> +       </widget> +      </item> +      <item row="0" column="9"> +       <widget class="QDoubleSpinBox" name="roiFilterAlpha"> +        <property name="sizePolicy"> +         <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +          <horstretch>0</horstretch> +          <verstretch>0</verstretch> +         </sizepolicy> +        </property> +        <property name="maximumSize"> +         <size> +          <width>150</width> +          <height>16777215</height> +         </size> +        </property> +        <property name="toolTip"> +         <string>Amount of smoothing of the face region coordinates. Can help stabilize the pose.</string> +        </property> +        <property name="wrapping"> +         <bool>false</bool> +        </property> +        <property name="decimals"> +         <number>2</number> +        </property> +        <property name="maximum"> +         <double>1.000000000000000</double> +        </property> +        <property name="singleStep"> +         <double>0.010000000000000</double> +        </property> +        <property name="value"> +         <double>1.000000000000000</double> +        </property> +       </widget> +      </item> +      <item row="0" column="0"> +       <widget class="QLabel" name="threadCountLabel"> +        <property name="text"> +         <string>Thread Count</string> +        </property> +       </widget> +      </item> +      <item row="0" column="12"> +       <widget class="QDoubleSpinBox" name="roiZoom"> +        <property name="toolTip"> +         <string>Zoom factor for the face region. Applied before the patch is fed into the pose estimation model. There is a sweet spot near 1.</string> +        </property> +        <property name="minimum"> +         <double>0.100000000000000</double> +        </property> +        <property name="maximum"> +         <double>2.000000000000000</double> +        </property> +        <property name="singleStep"> +         <double>0.010000000000000</double> +        </property> +        <property name="value"> +         <double>1.000000000000000</double> +        </property> +       </widget> +      </item> +      <item row="0" column="13"> +       <spacer name="horizontalSpacer"> +        <property name="orientation"> +         <enum>Qt::Horizontal</enum> +        </property> +        <property name="sizeHint" stdset="0"> +         <size> +          <width>40</width> +          <height>20</height> +         </size> +        </property> +       </spacer> +      </item> +     </layout> +    </widget> +   </item> +   <item row="4" column="0">      <widget class="QGroupBox" name="groupBox_10">       <property name="sizePolicy">        <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> @@ -78,21 +464,8 @@             </property>            </widget>           </item> -         <item row="2" column="0"> -          <widget class="QLabel" name="label_66"> -           <property name="sizePolicy"> -            <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> -             <horstretch>0</horstretch> -             <verstretch>0</verstretch> -            </sizepolicy> -           </property> -           <property name="text"> -            <string>Right</string> -           </property> -          </widget> -         </item> -         <item row="2" column="1"> -          <widget class="QSpinBox" name="tz_spin"> +         <item row="0" column="1"> +          <widget class="QSpinBox" name="tx_spin">             <property name="maximumSize">              <size>               <width>150</width> @@ -110,6 +483,19 @@             </property>            </widget>           </item> +         <item row="1" column="0"> +          <widget class="QLabel" name="label_62"> +           <property name="sizePolicy"> +            <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +             <horstretch>0</horstretch> +             <verstretch>0</verstretch> +            </sizepolicy> +           </property> +           <property name="text"> +            <string>Up</string> +           </property> +          </widget> +         </item>           <item row="0" column="0">            <widget class="QLabel" name="label_61">             <property name="sizePolicy"> @@ -123,8 +509,8 @@             </property>            </widget>           </item> -         <item row="0" column="1"> -          <widget class="QSpinBox" name="tx_spin"> +         <item row="2" column="1"> +          <widget class="QSpinBox" name="tz_spin">             <property name="maximumSize">              <size>               <width>150</width> @@ -142,8 +528,8 @@             </property>            </widget>           </item> -         <item row="1" column="0"> -          <widget class="QLabel" name="label_62"> +         <item row="2" column="0"> +          <widget class="QLabel" name="label_66">             <property name="sizePolicy">              <sizepolicy hsizetype="Maximum" vsizetype="Preferred">               <horstretch>0</horstretch> @@ -151,7 +537,7 @@              </sizepolicy>             </property>             <property name="text"> -            <string>Up</string> +            <string>Right</string>             </property>            </widget>           </item> @@ -223,6 +609,12 @@ Don't roll or change position.</string>             <property name="enabled">              <bool>false</bool>             </property> +           <property name="sizePolicy"> +            <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> +             <horstretch>0</horstretch> +             <verstretch>0</verstretch> +            </sizepolicy> +           </property>             <property name="text">              <string>Start calibration</string>             </property> @@ -237,7 +629,14 @@ Don't roll or change position.</string>       </layout>      </widget>     </item> -   <item row="7" column="0"> +   <item row="10" column="0"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +   <item row="8" column="0">      <widget class="QLabel" name="resolution_display">       <property name="autoFillBackground">        <bool>true</bool> @@ -253,59 +652,7 @@ Don't roll or change position.</string>       </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> -   <item row="5" column="0"> -    <widget class="QPushButton" name="camera_settings"> -     <property name="sizePolicy"> -      <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -       <horstretch>0</horstretch> -       <verstretch>0</verstretch> -      </sizepolicy> -     </property> -     <property name="text"> -      <string>Camera settings</string> -     </property> -    </widget> -   </item> -   <item row="10" column="0"> -    <widget class="QDialogButtonBox" name="buttonBox"> -     <property name="standardButtons"> -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> -     </property> -    </widget> -   </item> -   <item row="8" column="0"> +   <item row="9" column="0">      <spacer name="verticalSpacer">       <property name="orientation">        <enum>Qt::Vertical</enum> @@ -320,6 +667,23 @@ Don't roll or change position.</string>     </item>    </layout>   </widget> + <tabstops> +  <tabstop>camera_settings</tabstop> +  <tabstop>cameraName</tabstop> +  <tabstop>cameraFOV</tabstop> +  <tabstop>resolution</tabstop> +  <tabstop>exposure_preset</tabstop> +  <tabstop>use_mjpeg</tabstop> +  <tabstop>cameraFPS</tabstop> +  <tabstop>tx_spin</tabstop> +  <tabstop>ty_spin</tabstop> +  <tabstop>tz_spin</tabstop> +  <tabstop>tcalib_button</tabstop> +  <tabstop>threadCount</tabstop> +  <tabstop>showNetworkInput</tabstop> +  <tabstop>roiFilterAlpha</tabstop> +  <tabstop>roiZoom</tabstop> + </tabstops>   <resources/>   <connections/>   <designerdata> | 
