I have multiple OAK-D PoE Pro cameras and want to capture image frame only when I want.
This is my understanding on how cameras transfer image data to host PC: (Please correct me if I am wrong or missing anything)
=> Let's say I have a simple pipeline sending 4K color image. Whenever the camera is booted up with pipeline, it streams data continuously to the queue on host PC. What I can do is deciding how the queue on host PC side behaves. For example,
if I set the queue as size 1 and non-blocking, the device will fill in the queue continuously, so I can get "the latest" image frame from device.
If I set it as blocking, the device will fill in the queue only when the image data in queue is consumed.
In either blocking or non-blocking, the device keeps sending image data to the queue on host PC.
My issue:
I don't have enough bandwidth if the cameras keep sending image data continuously. My program crashes because at some point, one camera became not able to finish data transfer within a pre-defined timing window in FW, so the watchdog kicks in and reboots the device, which leads to connection drop. I am facing the network bottleneck when I use multiple OAK-D PoE Pro cameras at the same time.
Questions:
- Is there a way that I can control the device whether it can send image data or not, instead of continuously sending it to device?
- Is using Script node or Standalone mode a good approach? I don't fully understand how they work and cannot find much information.
- What about using compression? Compress image data, transfer it, and decompress it in host pc?
I would much appreciate your advice. Thanks!