jakaskerl Great input.
I didn't know that time.sleep() might interfere with the connection.
Here's my original script:
import depthai as dai
import time
from datetime import datetime
import cv2
from utilities import create_session_directory
# Function to create a pipeline
def create_pipeline():
pipeline = dai.Pipeline()
cam_rgb = pipeline.createColorCamera()
xout_rgb = pipeline.createXLinkOut()
xout_rgb.setStreamName("rgb")
cam_rgb.setBoardSocket(dai.CameraBoardSocket.CAM_A)
cam_rgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_4_K)
cam_rgb.setInterleaved(False)
cam_rgb.setColorOrder(dai.ColorCameraProperties.ColorOrder.BGR)
cam_rgb.initialControl.setAutoFocusMode(dai.CameraControl.AutoFocusMode.AUTO)
cam_rgb.initialControl.setAutoExposureEnable()
cam_rgb.initialControl.setAutoWhiteBalanceMode(dai.CameraControl.AutoWhiteBalanceMode.AUTO)
cam_rgb.video.link(xout_rgb.input)
return pipeline
# Function to capture and save an image
def capture_image(directory_path):
pipeline = create_pipeline()
with dai.Device(pipeline, maxUsbSpeed=dai.UsbSpeed.HIGH) as device:
q_rgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
for i in range(25):
q_rgb.get()
in_rgb = q_rgb.get()
frame = in_rgb.getCvFrame()
# Get temperature readings
temperature = device.getChipTemperature()
# Save the frame
filename = f"{directory_path}/{timestamp}.png"
cv2.imwrite(filename, frame)
print(f"Saved {filename} ------ Temperatures: CSS: {temperature.css:.2f}°C, MSS: {temperature.mss:.2f}°C, DSS: {temperature.dss:.2f}°C, Average: {temperature.average:.2f}°C")
def main():
total_duration = 5 * 60 * 60 # hour * minute * seconds
capture_interval = 60*5 # 5 minutes
start_time = time.time()
directory_path = create_session_directory()
while (time.time() - start_time) < total_duration:
capture_image(directory_path)
time.sleep(capture_interval)
if __name__ == "__main__":
main()
So if not using time.sleep(), how to create an efficient delay?
thanks