diff --git a/howdy/debian/preinst b/howdy/debian/preinst index 2318c92..a29bbb6 100755 --- a/howdy/debian/preinst +++ b/howdy/debian/preinst @@ -4,6 +4,7 @@ import subprocess import sys +import os # Backup the config file if we're upgrading if "upgrade" in sys.argv: diff --git a/howdy/src/cli/add.py b/howdy/src/cli/add.py index fbfe97d..8ee9f25 100644 --- a/howdy/src/cli/add.py +++ b/howdy/src/cli/add.py @@ -76,13 +76,16 @@ if not builtins.howdy_args.plain: # Set the default label label = "Initial model" +# some id's can be skipped, but the last id is always the maximum +next_id = encodings[-1]["id"] + 1 if encodings else 0 + # Get the label from the cli arguments if provided if builtins.howdy_args.arguments: label = builtins.howdy_args.arguments[0] -# If models already exist, set that default label -elif encodings: - label = _("Model #") + str(len(encodings) + 1) +# Or set the default label +else: + label = _("Model #") + str(next_id) # Keep de default name if we can't ask questions if builtins.howdy_args.y: @@ -104,7 +107,7 @@ if "," in label: insert_model = { "time": int(time.time()), "label": label, - "id": len(encodings), + "id": next_id, "data": [] } diff --git a/howdy/src/config.ini b/howdy/src/config.ini index 27ab823..789347a 100644 --- a/howdy/src/config.ini +++ b/howdy/src/config.ini @@ -86,6 +86,12 @@ force_mjpeg = false # OPENCV only. exposure = -1 +# Specify frame rate of the capture device. +# Some IR emitters will not function properly at the default framerate. +# Use qv4l2 to determine an appropriate value. +# OPENCV only. +device_fps = -1 + # Rotate captured frames so faces are upright. # 0 Check landscape orientation only # 1 Check both landscape and portrait orientation diff --git a/howdy/src/recorders/video_capture.py b/howdy/src/recorders/video_capture.py index d8552e7..15888a5 100644 --- a/howdy/src/recorders/video_capture.py +++ b/howdy/src/recorders/video_capture.py @@ -124,6 +124,12 @@ class VideoCapture: self.config.get("video", "device_path"), cv2.CAP_V4L ) + # Set the capture frame rate + # Without this the first detected (and possibly lower) frame rate is used, -1 seems to select the highest + # Use 0 as a fallback to avoid breaking an existing setup, new installs should default to -1 + self.fps = self.config.getint("video", "device_fps", fallback=0) + if self.fps != 0: + self.internal.set(cv2.CAP_PROP_FPS, self.fps) # Force MJPEG decoding if true if self.config.getboolean("video", "force_mjpeg", fallback=False):