started different cameras
parent
59eff8b84b
commit
6b803b405e
@ -0,0 +1,12 @@
|
|||||||
|
import abc
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
class Camera(abc.ABC):
|
||||||
|
@abc.abstractmethod
|
||||||
|
def get_frame(self):
|
||||||
|
"""BGR (numpy array) или None"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def release(self):
|
||||||
|
pass
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
from .web_camera import WebCamera
|
||||||
|
from .oak_camera import OakCamera
|
||||||
|
|
||||||
|
def create_camera(camera_type='web', **kwargs):
|
||||||
|
if camera_type == 'web':
|
||||||
|
return WebCamera(**kwargs)
|
||||||
|
elif camera_type == 'oak':
|
||||||
|
return OakCamera(**kwargs)
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unknown camera type: {camera_type}")
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
import depthai as dai
|
||||||
|
import numpy as np
|
||||||
|
from camera.base_camera import Camera
|
||||||
|
|
||||||
|
class OakCamera(Camera):
|
||||||
|
def __init__(self, resolution=(640, 480), fps=30, mirror=False):
|
||||||
|
self.pipeline = dai.Pipeline()
|
||||||
|
cam = self.pipeline.create(dai.node.ColorCamera)
|
||||||
|
cam.setPreviewSize(resolution[0], resolution[1])
|
||||||
|
cam.setInterleaved(False)
|
||||||
|
cam.setFps(fps)
|
||||||
|
cam.setColorOrder(dai.ColorCameraProperties.ColorOrder.BGR)
|
||||||
|
|
||||||
|
xout = self.pipeline.create(dai.node.XLinkOut)
|
||||||
|
xout.setStreamName("preview")
|
||||||
|
cam.preview.link(xout.input)
|
||||||
|
|
||||||
|
self.device = dai.Device(self.pipeline)
|
||||||
|
self.q = self.device.getOutputQueue(name="preview", maxSize=4, blocking=False)
|
||||||
|
self.mirror = mirror
|
||||||
|
|
||||||
|
def get_frame(self):
|
||||||
|
in_frame = self.q.tryGet()
|
||||||
|
if in_frame is None:
|
||||||
|
return None
|
||||||
|
frame = in_frame.getCvFrame()
|
||||||
|
if self.mirror:
|
||||||
|
frame = cv2.flip(frame, 1)
|
||||||
|
return frame
|
||||||
|
|
||||||
|
def release(self):
|
||||||
|
self.device.close()
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
import cv2
|
||||||
|
from camera.base_camera import Camera
|
||||||
|
|
||||||
|
class WebCamera(Camera):
|
||||||
|
def __init__(self, camera_id=0, mirror=False):
|
||||||
|
self.cap = cv2.VideoCapture(camera_id)
|
||||||
|
self.mirror = mirror
|
||||||
|
if not self.cap.isOpened():
|
||||||
|
raise RuntimeError("Cannot open web camera")
|
||||||
|
|
||||||
|
def get_frame(self):
|
||||||
|
ret, frame = self.cap.read()
|
||||||
|
if not ret:
|
||||||
|
return None
|
||||||
|
if self.mirror:
|
||||||
|
frame = cv2.flip(frame, 1)
|
||||||
|
return frame
|
||||||
|
|
||||||
|
def release(self):
|
||||||
|
self.cap.release()
|
||||||
Loading…
Reference in New Issue