From 3c8db931b961f4e5f1ff18c38e47bbe3c5c1d41e Mon Sep 17 00:00:00 2001 From: boltgolt Date: Sun, 6 Jan 2019 15:08:40 +0100 Subject: [PATCH] Moved recorders to new folder --- src/cli/add.py | 4 ++-- src/compare.py | 10 ++++++---- src/config.ini | 2 +- src/recorders/__init__.py | 0 src/{ => recorders}/ffmpeg_reader.py | 4 ++++ src/{ => recorders}/pyv4l2_reader.py | 24 ++++++++---------------- src/{ => recorders}/v4l2.py | 0 7 files changed, 21 insertions(+), 23 deletions(-) create mode 100644 src/recorders/__init__.py rename src/{ => recorders}/ffmpeg_reader.py (98%) rename src/{ => recorders}/pyv4l2_reader.py (91%) rename src/{ => recorders}/v4l2.py (100%) diff --git a/src/cli/add.py b/src/cli/add.py index 9fd69b0..3106055 100644 --- a/src/cli/add.py +++ b/src/cli/add.py @@ -101,11 +101,11 @@ insert_model = { # Check if the user explicitly set ffmpeg as recorder if config.get("video", "recording_plugin") == "ffmpeg": # Set the capture source for ffmpeg - from ffmpeg_reader import ffmpeg_reader + from recorders.ffmpeg_reader import ffmpeg_reader video_capture = ffmpeg_reader(config.get("video", "device_path"), config.get("video", "device_format")) elif config.get("video", "recording_plugin") == "pyv4l2": # Set the capture source for pyv4l2 - from pyv4l2_reader import pyv4l2_reader + from recorders.pyv4l2_reader import pyv4l2_reader video_capture = pyv4l2_reader(config.get("video", "device_path"), config.get("video", "device_format")) else: # Start video capture on the IR camera through OpenCV diff --git a/src/compare.py b/src/compare.py index c063d2f..3f472b8 100644 --- a/src/compare.py +++ b/src/compare.py @@ -116,11 +116,11 @@ timings["ic"] = time.time() # Check if the user explicitly set ffmpeg as recorder if config.get("video", "recording_plugin") == "ffmpeg": # Set the capture source for ffmpeg - from ffmpeg_reader import ffmpeg_reader + from recorders.ffmpeg_reader import ffmpeg_reader video_capture = ffmpeg_reader(config.get("video", "device_path"), config.get("video", "device_format")) elif config.get("video", "recording_plugin") == "pyv4l2": # Set the capture source for pyv4l2 - from pyv4l2_reader import pyv4l2_reader + from recorders.pyv4l2_reader import pyv4l2_reader video_capture = pyv4l2_reader(config.get("video", "device_path"), config.get("video", "device_format")) else: # Start video capture on the IR camera through OpenCV @@ -178,12 +178,14 @@ while True: stop(11) # Grab a single frame of video - _, frame = video_capture.read() + ret, frame = video_capture.read() try: + # Convert from color to grayscale + # First processing of frame, so frame errors show up here gsframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) except cv2.error: - print("Unknown camera, please check your 'device_path' config value.\n") + print("\nUnknown camera, please check your 'device_path' config value.\n") raise # Create a histogram of the image with 8 values diff --git a/src/config.ini b/src/config.ini index 09ba09e..70a063d 100644 --- a/src/config.ini +++ b/src/config.ini @@ -57,7 +57,7 @@ frame_height = -1 # The lower this setting is, the more dark frames are ignored dark_threshold = 50 -# The recorder to use. Can be either opencv, ffmpeg or pyv4l2. +# The recorder to use. Can be either opencv (default), ffmpeg or pyv4l2. # Switching from the default opencv to ffmpeg can help with grayscale issues. recording_plugin = opencv diff --git a/src/recorders/__init__.py b/src/recorders/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ffmpeg_reader.py b/src/recorders/ffmpeg_reader.py similarity index 98% rename from src/ffmpeg_reader.py rename to src/recorders/ffmpeg_reader.py index da77eae..8015726 100755 --- a/src/ffmpeg_reader.py +++ b/src/recorders/ffmpeg_reader.py @@ -126,3 +126,7 @@ class ffmpeg_reader: """ Empty our array. If we had a hold on the camera, we would give it back here. """ self.video = () self.num_frames_read = 0 + + def grab(self): + """ Redirect grab() to read() for compatibility """ + self.read() diff --git a/src/pyv4l2_reader.py b/src/recorders/pyv4l2_reader.py similarity index 91% rename from src/pyv4l2_reader.py rename to src/recorders/pyv4l2_reader.py index b0472c0..6d52871 100644 --- a/src/pyv4l2_reader.py +++ b/src/recorders/pyv4l2_reader.py @@ -1,19 +1,20 @@ # Class that simulates the functionality of opencv so howdy can use v4l2 devices seamlessly # Import required modules. lib4l-dev package is also required. -import v4l2 +from recorders import v4l2 import fcntl import numpy import sys from cv2 import cvtColor, COLOR_GRAY2BGR, CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HEIGHT try: - from pyv4l2.frame import Frame + from v4l2.frame import Frame except ImportError: print("Missing pyv4l2 module, please run:") print(" pip3 install pyv4l2\n") sys.exit(13) + class pyv4l2_reader: """ This class was created to look as similar to the openCV features used in Howdy as possible for overall code cleanliness. """ @@ -39,7 +40,7 @@ class pyv4l2_reader: return self.width elif prop == CAP_PROP_FRAME_HEIGHT: return self.height - + def probe(self): """ Probe the video device to get height and width info """ @@ -51,7 +52,7 @@ class pyv4l2_reader: if ret == 0: height = fmt.fmt.pix.height width = fmt.fmt.pix.width - else: + else: # Could not determine the resolution from ioctl call. Reverting to slower ffmpeg.probe() method import ffmpeg probe = ffmpeg.probe(self.device_name) @@ -68,7 +69,6 @@ class pyv4l2_reader: """ Start recording """ self.frame = Frame(self.device_name) - def grab(self): """ Read a sigle frame from the IR camera. """ self.read() @@ -77,26 +77,19 @@ class pyv4l2_reader: """ Read a sigle frame from the IR camera. """ if not self.frame: - self.record() + self.record() # Grab a raw frame from the camera frame_data = self.frame.get_frame() # Convert the raw frame_date to a numpy array - img = ( - numpy - .frombuffer(frame_data, numpy.uint8) - ) + img = (numpy.frombuffer(frame_data, numpy.uint8)) # Convert the numpy array to a proper grayscale image array img_bgr = cvtColor(img, COLOR_GRAY2BGR) # Convert the grayscale image array into a proper RGB style numpy array - img2 = ( - numpy - .frombuffer(img_bgr, numpy.uint8) - .reshape([352, 352, 3]) - ) + img2 = (numpy.frombuffer(img_bgr, numpy.uint8).reshape([352, 352, 3])) # Return a single frame of video return 0, img2 @@ -107,4 +100,3 @@ class pyv4l2_reader: self.num_frames_read = 0 if self.frame: self.frame.close() - diff --git a/src/v4l2.py b/src/recorders/v4l2.py similarity index 100% rename from src/v4l2.py rename to src/recorders/v4l2.py