Guest User

Untitled

a guest
Sep 22nd, 2023
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | None | 0 0
  1. import depthai as dai
  2. import time
  3. from datetime import timedelta
  4. import math
  5.  
  6. FPS = 30
  7.  
  8. # Start defining a pipeline
  9. pipeline = dai.Pipeline()
  10.  
  11. # Define a source - color camera
  12. camRgb = pipeline.create(dai.node.ColorCamera)
  13. camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_4_K)
  14. camRgb.setVideoNumFramesPool(10)
  15. camRgb.setFps(FPS)
  16.  
  17. left = pipeline.create(dai.node.MonoCamera)
  18. left.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P)
  19. left.setBoardSocket(dai.CameraBoardSocket.LEFT)
  20. left.setFps(FPS)
  21.  
  22. right = pipeline.create(dai.node.MonoCamera)
  23. right.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P)
  24. right.setBoardSocket(dai.CameraBoardSocket.RIGHT)
  25. right.setFps(FPS)
  26.  
  27. stereo = pipeline.create(dai.node.StereoDepth)
  28. stereo.initialConfig.setMedianFilter(dai.MedianFilter.KERNEL_7x7)
  29. stereo.setLeftRightCheck(True)
  30. stereo.setExtendedDisparity(False)
  31. stereo.setSubpixel(False)
  32. stereo.setDepthAlign(dai.CameraBoardSocket.RGB)
  33. left.out.link(stereo.left)
  34. right.out.link(stereo.right)
  35.  
  36. script = pipeline.create(dai.node.Script)
  37. script.setScript(R"""    
  38. FPS=30
  39. import time
  40. from datetime import timedelta
  41. import math
  42.  
  43. MS_THRESHOL = math.ceil(500 / FPS)
  44.  
  45. def check_sync(queues, timestamp):
  46.    matching_frames = []
  47.    for name, list in queues.items():
  48.        for i, msg in enumerate(list):
  49.            time_diff = abs(msg.getTimestamp() - timestamp)
  50.            if time_diff <= timedelta(milliseconds=MS_THRESHOL):
  51.                matching_frames.append(i)
  52.                break
  53.  
  54.    if len(matching_frames) == len(queues):
  55.        i = 0
  56.        for name, list in queues.items():
  57.            queues[name] = queues[name][matching_frames[i]:]
  58.            i += 1
  59.        return True
  60.    else:
  61.        return False
  62.  
  63. names = ['disp', 'rgb']
  64. frames = dict()
  65. for name in names:
  66.    frames[name] = []
  67.  
  68. while True:
  69.    for name in names:
  70.        f = node.io[name + "_in"].tryGet()
  71.        if f is not None:
  72.            frames[name].append(f)
  73.            node.warn(f"Added {name} to queue, seq {str(f.getSequenceNum())}, list size {str(len(frames[name]))}")
  74.  
  75.            if check_sync(frames, f.getTimestamp()):
  76.                node.info("Synced frame!")
  77.                for name, list in frames.items():
  78.                    syncedF = list.pop(0)
  79.                    node.info(f"{name}, ts: {str(syncedF.getTimestamp())}, seq {str(syncedF.getSequenceNum())}")
  80.                    node.io[name + '_out'].send(syncedF)
  81.  
  82.    time.sleep(0.001)
  83. """)
  84. stereo.disparity.link(script.inputs["disp_in"])
  85. camRgb.video.link(script.inputs["rgb_in"])
  86.  
  87. scriptOut = ["disp", "rgb"]
  88. for name in scriptOut:
  89.     xout = pipeline.create(dai.node.XLinkOut)
  90.     xout.setStreamName(name)
  91.     script.outputs[name + "_out"].link(xout.input)
  92.  
  93. # Connect to device and start pipeline
  94. with dai.Device(pipeline) as device:
  95.     device.setLogOutputLevel(dai.LogLevel.INFO)
  96.     device.setLogLevel(dai.LogLevel.INFO)
  97.  
  98.     streams = ["rgb", "disp"]
  99.     queue_map = {}
  100.     for name in streams:
  101.         queue_map[name] = device.getOutputQueue(name)
  102.  
  103.     while True:
  104.         for name in streams:
  105.             img = queue_map[name].get()
  106.             print(f"Stream {name}, timestamp: {img.getTimestamp().total_seconds()}, sequence number: {img.getSequenceNum()}")
  107.  
Advertisement
Add Comment
Please, Sign In to add comment