Skip to content

Instantly share code, notes, and snippets.

@lucasmediaflow
Last active December 18, 2021 07:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucasmediaflow/7b6df46a0ca588b172cf6948eb4bbb70 to your computer and use it in GitHub Desktop.
Save lucasmediaflow/7b6df46a0ca588b172cf6948eb4bbb70 to your computer and use it in GitHub Desktop.
class Camera:
def __init__(
self,
ip=None,
mac=None,
settings={},
name=None,
type=None,
deviceInfo=None,
streamingServer=None,
device=None
):
self.ip = ip
self.mac = mac
self.settings = settings
self.name = name
self.type = type
self.deviceInfo = deviceInfo
self.recording = False
self.stopThread = False
self.capture = False
self.streamingServer = streamingServer
self.stream = False
self.ready = False
self.segment = 1
self.device = device
self.setup = False
res = {
"1080": dai.ColorCameraProperties.SensorResolution.THE_1080_P,
"2160": dai.ColorCameraProperties.SensorResolution.THE_4_K,
"3040": dai.ColorCameraProperties.SensorResolution.THE_12_MP,
}
self.pipeline = dai.Pipeline()
# setup camera
self.colorCam = self.pipeline.create(dai.node.ColorCamera)
self.colorCam.setPreviewSize(640, 360)
self.colorCam.setInterleaved(False)
self.colorCam.setResolution(res[settings["video"]["resolution"]])
# self.colorCam.setIspScale(1, 2)
self.colorCam.setStillSize(1920, 1080)
# setup video encoder
self.videoEnc = self.pipeline.create(dai.node.VideoEncoder)
self.videoEncXLinkOut = self.pipeline.create(dai.node.XLinkOut)
self.videoEncXLinkOut.setStreamName(self.mac)
self.videoEnc.setDefaultProfilePreset(
30, dai.VideoEncoderProperties.Profile.H264_MAIN
)
# setup manip
self.manip = self.pipeline.create(dai.node.ImageManip)
self.manip.initialConfig.setResize(1920, 1080)
# setup jpg encoder
self.jpgEncoder = self.pipeline.create(dai.node.VideoEncoder)
self.jpgEncoder.setDefaultProfilePreset(
1, dai.VideoEncoderProperties.Profile.MJPEG
)
self.jpgEncoder.setNumFramesPool(1)
self.jpgEncoderXLinkOut = self.pipeline.create(dai.node.XLinkOut)
self.jpgEncoderXLinkOut.setStreamName("jpg")
# setup preview
self.previewXLinkOut = self.pipeline.create(dai.node.XLinkOut)
self.previewXLinkOut.setStreamName("preview")
# linking
self.colorCam.isp.link(self.manip.inputImage)
self.manip.out.link(self.videoEnc.input)
# self.colorCam.video.link(self.videoEnc.input)
self.videoEnc.bitstream.link(self.videoEncXLinkOut.input)
# self.colorCam.preview.link(self.previewXLinkOut.input)
self.colorCam.still.link(self.jpgEncoder.input)
self.camControl = self.pipeline.create(dai.node.XLinkIn)
self.camControl.setStreamName("camControl")
self.camControl.setMaxDataSize(500000)
self.camControl.out.link(self.colorCam.inputControl)
self.jpgEncoder.bitstream.link(self.jpgEncoderXLinkOut.input)
self.setup = True
print(self.mono(), 'finished setup', self.name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment