I wanted to design something capable of Automatic Number Plate Recognition, but soon realised it’s quite a tedious task, so began searching for an SDK or API. I found a bunch of commercial ones, but all I wanted was something to play with. Thank goodness for open source software, I found a neat library called OpenALPR. So, decided to give it a shot.
OpenALPR provides bindings in C#, Python, Node.js, Go, and Java. I’m mostly familiar with VB.NET, so I sat down to convert their C# example and designed something simple as a test. In the initial version, I allowed the user to browse for an image file which is fed to OpenALPR. If OpenALPR successfully finds a plate, the results are then displayed in a listbox. It also gives the regions in the image where the plate is detected. What’s cool is, it could even detect multiple plates in an image, even in dark images.
Once I was satisfied with the library, I went on to add a camera for detection of plates from a video stream. To capture video I used EmguCV, which is a dot net wrapper for OpenCV. I didn’t have a good camera around so had to use my webcam and show images from my phone 😛
I guess with OpenCV the scope of the project is further broadened, maybe I could also add pedestrian and face detection in the future 😛
Of course, number plate recognition is not perfect, however openalpr can give multiple results along with their confidence values. Another limitation is, it currently supports only a few countries, and one requires a large training set to improve its accuracy (details)
Btw, openALPR also has a commercial version with more features.