Savant ClientSDK is a toolkit that enables the building of simple bridges between applications and Savant. With a simple Pythonic interface, ClientSDK helps developers ingest images into the pipeline and retrieve computer vision results from it. The SDK is available in both synchronous and asynchronous modes and tightly integrated with OpenTelemetry and logging subsystems allowing developers to associate ingested data with tracing information and logged messages.
In the project template, ClientSDK demonstrates how to use it; the Kafka/Redis source and sink adapters are also implemented with ClientSDK classes.
Client SDK enables not only sending frames with metadata but also supports control flow messages like EOS or Shutdown. Shutdown capability makes ClientSDK ideal in situations when the pipeline needs to be finalized after data processing. One such case represents the ReID index builder used in the Facial ReID demo. It feeds the pipeline with images to build the database. When all images are sent, it needs to cause the completion of the pipeline; and it does it by sending the Shutdown message.
The code is pretty straightforward and easy to understand. Before ClientSDK, we used the file source adapter and there was no good way to shut down the compose bundle after the index was ready. Now, it can be done in a simple and standardized way.
In the realm of computer vision, the ability to recognize and read license plates from vehicles is a significant advancement. This technology has numerous applications, from traffic management to security and surveillance. Three prominent models that have made this possible are YOLOv8 and the License Plate Detection/Recognition (LPD/LPR) models from Nvidia NGC.
Media Pass-Through allows copying the incoming video stream to output without transcoding. The use of the feature is beneficial if the pipeline does not use draw functionality or it occupies a separate pipeline in a chain.
This article answers the question of why you may find it beneficial to use Savant instead of DeepStream, OpenVino, PyTorch, or OpenCV in your next computer vision project. It is not an easy question, because computer vision is a tough field with many caveats and difficulties. You start with finding a way to make certain things doable from the quality point of view, but later you also need to serve the solution commercially efficiently, processing data in real-time rather than pathetic 2 FPS on hardware worth like a Boeing wing.
There are two types of computer vision applications around us: the first ones deliver rapidly fast, instant image or video processing to signal about critical situations like car accidents, people in danger zones, or serious outages in factories; others handle data on demand or in a delayed manner to deliver the knowledge at scale. Those two kinds have in common that they process video data, but their differences are too significant to ignore.
Real-time video analytics is a hot topic today. Needless to say, visual information is essential for us: it is estimated that about 80–90% of the information we receive comes through our sense of sight. Moreover, the human visual system is remarkably efficient at processing a vast amount of information; our visual processing centers are highly adept at interpreting and organizing visual information, allowing us to make sense of the world around us quickly and efficiently.
The pipeline calculates vehicles passing from a source edge to a destination edge and sends statistics to Grafana for visualization. The user configures a per-cam traffic metering zone with a polygonal area and labels its lines with assigned tags for metering traffic passing through them.
Computer vision and artificial intelligence inference pipelines often begin as straightforward, statically defined conveyers, but soon begin to require additional heuristics to optimize their performance and adapt to real-life conditions. Let us consider several situations which may require pipelines to be reconfigured dynamically. We will not cover the cases that require parameters applied for good: as they can be passed to the pipeline through environment variables or configuration files.
When developing Savant, we create auxiliary technologies that can be used in other projects. We would like to share with you a new project developed by the Savant team – RocksQ. We needed a high-performance persistent queue to buffer video frames and metadata in situations when the receiving party is out of order. Previously, we used persist-queue, a Pythonic persistent queue on top of Sqlite. However, it is obviously an overhead to use a full-scale embedded SQL database just for queueing.
We decided to move the Savant blog from the Medium platform to a self-hosted blog platform. The reason for that is that the articles on Medium are behind a paywall which reduces the traffic. Old articles are available on Medium.