First version.
This commit is contained in:
commit
114ab8d44e
24 changed files with 22859 additions and 0 deletions
113
input_reader.py
Normal file
113
input_reader.py
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
import re
|
||||
import sys
|
||||
import os
|
||||
import cv2
|
||||
import numpy
|
||||
import escapi
|
||||
|
||||
def list_cameras():
|
||||
print("Available cameras:")
|
||||
|
||||
class VideoReader():
|
||||
def __init__(self, capture):
|
||||
self.cap = cv2.VideoCapture(capture)
|
||||
if self.cap is None:
|
||||
print("The video source cannot be opened")
|
||||
sys.exit(0)
|
||||
def is_open(self):
|
||||
return self.cap.isOpened()
|
||||
def is_ready(self):
|
||||
return True
|
||||
def read(self):
|
||||
return self.cap.read()
|
||||
def close(self):
|
||||
self.cap.release()
|
||||
|
||||
class CameraReader(VideoReader):
|
||||
def __init__(self, capture, width, height, fps):
|
||||
self.device = None
|
||||
self.width = width
|
||||
self.height = height
|
||||
self.fps = fps
|
||||
if os.name == 'nt':
|
||||
escapi.init()
|
||||
self.device = capture
|
||||
self.buffer = escapi.init_camera(self.device, self.width, self.height, self.fps)
|
||||
escapi.do_capture(self.device)
|
||||
else:
|
||||
super(CameraReader, self).__init__(capture)
|
||||
self.cap.set(3, width)
|
||||
self.cap.set(4, height)
|
||||
def is_open(self):
|
||||
if self.device is None:
|
||||
return super(CameraReader, self).is_open()
|
||||
return True
|
||||
def is_ready(self):
|
||||
if self.device is None:
|
||||
return super(CameraReader, self).is_ready()
|
||||
return escapi.is_capture_done(self.device)
|
||||
def read(self):
|
||||
if self.device is None:
|
||||
return super(CameraReader, self).read()
|
||||
if escapi.is_capture_done(self.device):
|
||||
image = escapi.read(self.device, self.width, self.height, self.buffer)
|
||||
escapi.do_capture(self.device)
|
||||
return True, image
|
||||
else:
|
||||
return False, None
|
||||
def close(self):
|
||||
if self.device is None:
|
||||
super(CameraReader, self).close()
|
||||
else:
|
||||
escapi.deinit_camera(self.device)
|
||||
|
||||
class RawReader:
|
||||
def __init__(self, width, height):
|
||||
self.width = int(width)
|
||||
self.height = int(height)
|
||||
|
||||
if self.width < 1 or self.height < 1:
|
||||
print("No acceptable size was given for reading raw RGB frames.")
|
||||
sys.exit(0)
|
||||
|
||||
self.len = self.width * self.height * 3
|
||||
self.open = True
|
||||
def is_open(self):
|
||||
return self.open
|
||||
def is_ready(self):
|
||||
return True
|
||||
def read(self):
|
||||
frame = bytearray()
|
||||
read_bytes = 0
|
||||
while read_bytes < self.len:
|
||||
bytes = sys.stdin.buffer.read(self.len)
|
||||
read_bytes += len(bytes)
|
||||
frame.extend(bytes)
|
||||
return np.frombuffer(frame, dtype=np.uint8).reshape((self.height, self.width, 3))
|
||||
def close(self):
|
||||
self.open = False
|
||||
|
||||
class InputReader():
|
||||
def __init__(self, capture, raw_rgb, width, height, fps):
|
||||
self.reader = None
|
||||
try:
|
||||
if os.path.exists(capture):
|
||||
self.reader = VideoReader(capture)
|
||||
elif capture == str(int(capture)):
|
||||
self.reader = CameraReader(int(capture), width, height, fps)
|
||||
else:
|
||||
self.reader = RawReader(width, height)
|
||||
except Exception as e:
|
||||
print("Error: " + str(e))
|
||||
|
||||
if self.reader is None or not self.reader.is_open():
|
||||
print("There was no valid input.")
|
||||
sys.exit(0)
|
||||
def is_open(self):
|
||||
return self.reader.is_open()
|
||||
def is_ready(self):
|
||||
return self.reader.is_ready()
|
||||
def read(self):
|
||||
return self.reader.read()
|
||||
def close(self):
|
||||
self.reader.close()
|
||||
Loading…
Add table
Add a link
Reference in a new issue