mirror of
https://github.com/boltgolt/howdy.git
synced 2024-09-19 09:51:19 +02:00
Moved recorders to new folder
This commit is contained in:
parent
6e1085110b
commit
3c8db931b9
7 changed files with 21 additions and 23 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
0
src/recorders/__init__.py
Normal file
0
src/recorders/__init__.py
Normal file
|
@ -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()
|
|
@ -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()
|
||||
|
Loading…
Reference in a new issue