All Projects → Link009 → LPEX

Link009 / LPEX

Licence: GPL-3.0 License
Detect vehicles license plate location

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to LPEX

open-lpr
Open Source and Free License Plate Recognition Software
Stars: ✭ 74 (+23.33%)
Mutual labels:  alpr, license-plate-detection
ConvALPR
Reconocedor Automatico (real-time) de Patentes utilizando Redes Neuronales Convolucionales
Stars: ✭ 15 (-75%)
Mutual labels:  alpr
vrpdr
Deep Learning Applied To Vehicle Registration Plate Detection and Recognition in PyTorch.
Stars: ✭ 36 (-40%)
Mutual labels:  license-plate-detection
deep-license-plate-recognition
Automatic License Plate Recognition (ALPR) or Automatic Number Plate Recognition (ANPR) software that works with any camera.
Stars: ✭ 309 (+415%)
Mutual labels:  alpr
Vehicle-Front-Rear-Detection-for-License-Plate-Detection-Enhancement
A Network for detecting and classifying vehicle's front and rear
Stars: ✭ 33 (-45%)
Mutual labels:  license-plate-detection
alpr utils
ALPR model in unconstrained scenarios for Chinese license plates
Stars: ✭ 158 (+163.33%)
Mutual labels:  license-plate-detection
license-plate-detect-recoginition-pytorch
深度学习车牌检测与识别,检测结果包含车牌矩形框和4个角点,基于pytorch框架运行
Stars: ✭ 77 (+28.33%)
Mutual labels:  license-plate-detection
DarkPlate
License plate parsing using Darknet and YOLO
Stars: ✭ 36 (-40%)
Mutual labels:  alpr

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].