TREx/camera_driver.py

30 lines
1.1 KiB
Python

import imutils
from imutils.video import VideoStream
import pyzbar.pyzbar as pyzbar
from typing import List, Tuple
import cv2
class CameraDriver:
def __init__(self, camera_index = 0):
self.video_stream = VideoStream(src=camera_index).start()
self.frame = None
def get_decoded_frame(self, stream_frame_width, decode_frame_width) -> Tuple[bytes, List[str]]:
raw_frame = self.video_stream.read()
decode_frame = imutils.resize(raw_frame, width=decode_frame_width)
codes = pyzbar.decode(decode_frame)
data = []
for code in codes:
x, y, w, h = code.rect
cv2.rectangle(decode_frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
data.append(code.data.decode('utf-8'))
cv2.putText(decode_frame, data[-1], (x, y -10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,255), 2)
if codes:
stream_frame = imutils.resize(decode_frame, width=stream_frame_width)
else:
stream_frame = imutils.resize(raw_frame, width=stream_frame_width)
_, jpg = cv2.imencode('.jpg', stream_frame)
return jpg.tobytes(), data