Skip to content

Link009/LPEX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LPEX - License Plate EXtractor

License Plate EXtractor is a software which extract vehicles license plates. No neural networks, SVM, or other sophisticated algorithms are involved at this stage (for now).

This version is based on Chris Dahms version available here

An example

What I did was to copy his repository and extract the code which do the detection of plates (his code contains also a character recognition system which worked pretty bad for me). After that I did some refactoring.

To use it:

python Extraction.py --image car.png

Original blog post about this code

This project is divided mainly in two parts: plate detection and character recognition.

The code you will find next is an adaptation of Chris Dahms original License Plate Recognition. A video of his work can be found here as longs as his original source code.

I made this work (pretty much some refactoring) mainly because I was in need of a simple system to detect the license plate area in images. His aproach is good but his code contained also a character recognition system which I don’t need actually. I plan to use my own in the second part of this project.

For someone this code will be easier to understand due to it’s “straight to the point” way, for someone else will be like I did an awful job. The goal was for me to understand what I was doing and to create a ready-to-go system. This was achieved and it’s enough.

Code has been tested only with european license plates, especially with italian ones. I don’t know if it’s gonna work with other country plates. To do that you will have to adapt the code to your situation and, eventually, stick with a totally different approach.

Code is in Python 3.6 and OpenCV 3.4. You will find the whole source at the end of this article. Any suggestion is widely accepted.

This is the image we are working on. Later I’ll show you the result with other images.

original_image

Then some basic preprocessing is applied.

gray

After that morphological operations called Top Hat and Black Hat are applied.

Morphological transformations are some simple operations based on the image shape.

It is normally performed on binary images. It needs two inputs, one is our original image, second one is called structuring element or kernel which decides the nature of operation.

We built the kernel before Top and Black hat processing. More about these operations are available here.

top_hat

black_hat

We are going to subtract values between add value (in the code we are adding gray and TopHat) and BlackHat.

subtraction

Next Gaussian blur is added with a kernel of 5.

gaussian_blur

Threshold operations is applied on gaussian blur.

threshold

Contours are checked. From here we are starting to look for characters. Indeed this method is based in searching for contours that might look like alphanumeric chars. This is the process from now:

– check each contour
– if it look like a char then save it in a list
– don’t consider any contour which don’t respect this condition
– detect the group of characters with a ROI and save it

Further on, in a coming article, I’ll show you how to process this image and do OCR on it.

image_contours

After the first wave of cleaning operations (aka mathematical operations on each contour ) this is the result.

contours_chars

A second filter is applied and our plate seems to be detected, somehow.

final_contours

Finally, we construct a ROI around these contours. This will be cropped and used next for OCR.

detected

Here the ROI was applied on the original image for a more scenic result

detected_original

Final cropped image, our plate.

cropped_plate

These are other results I achieved.

Some good results...

ok_examples

...and some fails.

ko_examples

As you can see, for some images (even some “easy” and “obviously”) the recognition fails miserably. This because the system is a general one and, to work on more plates it have to be tweaked more. Also plates with different backgrounds, fonts and dimensions create confusion because of many variables.

Now you can understand why this isn’t an easy task by using traditional methods. Applying machine learning technics might highly improve the result.

Releases

No releases published

Packages

No packages published

Languages