Automatic License Plate Recognition
(Nvidia TAO + Deepstream Application + Python Bindings)
Mobia Latin America (Start-up)

Description

overview

This project contains an entire process for developing a multistream Automatic License Plate Recognition (ALPR) system using mainly Nvidia TAO Toolkit and Nvidia Deepstream SDK using the Python Bindings. The computer vision pipeline consists of 3+ deep learning models and plugins to treat and periodically send metadata streams to a Kafka Apache cluster for further use-cases.

Skills:
Python, C/C++, Nvidia Deepstream, Nvidia Tao Toolkit, TensorFlow, and Kafka Apache (Connectivity Skills).

Video Streaming Pipeline

The pipeline was developed using Nvidia Deepstream and allows us to perform the following actions:

  1. Accept multi-sources inputs of two types: videos (in mp4) and video streaming.
  2. Contains 4 deep learning models (trained with Nvidia TAO Toolkit) working in a cascade style.
  3. Accept two sink outputs (at the same time): video MP4 sink and streaming RTSP sink.
  4. Send message payload to a topic in Kafka broker by using two additional plugins (nvdsmsgconv , nvdsmsgbroker), which can be customized.
In the following picture, you see our pipeline. Note that the end of the pipeline contains three tails. Each tail allows us to return a possible output: Video MP4, streaming RTSP, or sending messages to Kafka broker. These three components can work in isolation or all together.

Cascade Style

The cascade style means the output detection of a previous model is used as input to the next model. Particularly in this project we use the following models and cascade style:

  • tcnet detects cars.
  • lpdnet detects plates on the previously detected car.
  • lprnet recognizes characters on the previously detected plate.
  • colornet recognizes the car color on the previous car detection (from tcnet).

Car and Plate Detection

The primary model is called TrafficCamNet (tcnet), which helps us to detect cars. Then, the bounding box detections are accepted as input to a LicensePlateDetectionNet (lpdnet).

Character Recognition

After getting the plate detection, we will use them as input to LicensePlateRecognition (lprnet), which returns the characters in the plate.

ALPR system speed x1

ALPR system speed x0.5

Metadata

Internally, we developed a system to collect information about detection and character recognition. Then, we created a message (.json) using this information and sent it directly to a Kafka broker for other use cases. The message structure is the following:

Related links

- Check Sample For Car License Recognization if you want a basic implementation of ALPR without Python Bindings and Kafka message support.

Powered by Jon Barron and Michaƫl Gharbi.