Platform: Jetson Nano
JetPack version: 4.6.1
Many thanks for prior advice regarding using
OpenCV in conjunction with the Argus API for real-time video image processing. I have been able to achieve a throughput of 30 frames per second using the following multi-threaded architecture:
- Each colored box represents an independent thread of control.
- The threads communicate with each other using message queues.
- The Argus Video Frame message object contains a pointer to a
- The Video Image message object contains a
The primary improvements I’m trying to make involve the userInterface thread, which uses
OpenCV objects and methods for displaying annotated video data. The improvements I would like to achieve include:
- Higher frame rate. The video image display frequency ranges from 10 to 12 frames per second, which gives the false impression the application can’t keep up with the native frame rate of the camera (30 fps). I’m using
cv::imshow()for displaying the annotated video data.
- Better-looking annotations. I annotate the video using
cv::rectangle()to draw a rectangle around a person’s face, and
cvv::rectangle()to display warning and instructions-for-use messages inside of opaque rectangles (e.g., a red rectangle for a warning message). I would like to use a better-looking font than what OpenCV provides, and use static images for displaying the results of the imageProcessing thread.
From other forum topics I’ve read, the
NvEglRenderer class looks promising (see also sample code
/usr/src/jetson_multimedia_api/samples/13_multi_camera/main.cpp), but that class appears to be limited to low-level rendering operations (e.g., method
setOverlayText() does not allow the caller to specify parameters such as the font family, size, style, or color).
Are there other classes or APIs that would work with
NvEglRenderer (or a similar high-performance rendering engine) to yield the performance and aesthetic improvements I would like to achieve?