this file

Transcription

this file
Research Document
Number Plate Recognition
Francois Ribemont
November 25, 2011
Contents
1
2
3
4
5
Introduction . . . . . . . . . . . . . . .
Existing commercial system . . . . . .
2.1
CCTV Camera Pros . . . . . .
2.2
Spytown . . . . . . . . . . . . .
2.3
Surveillance-Video . . . . . . .
Existing softwares . . . . . . . . . . . .
3.1
Image modification software . .
3.2
Optical Character Recognition .
Languages . . . . . . . . . . . . . . . .
4.1
Python . . . . . . . . . . . . . .
4.2
C++ . . . . . . . . . . . . . . .
4.3
Java . . . . . . . . . . . . . . .
4.4
C# . . . . . . . . . . . . . . . .
4.5
The language that will be used
The way to proceed . . . . . . . . . . .
5.1
The principle . . . . . . . . . .
5.2
Plate localization . . . . . . . .
5.3
Plate orientation . . . . . . . .
5.4
Character segmentation . . . .
5.5
Character recognition . . . . . .
5.6
Syntactical analysis . . . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
3
3
3
3
4
4
7
10
10
12
14
16
17
18
18
18
22
22
22
23
1
Introduction
Number Plate Recognition (NPR) is a software that reads Irish car plate numbers from pictures. The input of the program is an image, and the output of the
program is a text string containing the car plate number. By executing a series
of algorithms, the program will be able to take an image as an input and generate the number plate in a text format. For the Figure 11, the output would be:
03MH1847.
Figure 1: Irish car plate
This software is usually embedded with video cameras. It is mainly used by the
police to recognize stolen vehicles or speeding. If, for instance, a car goes too fast
on a motorway, some sensors send a signal to the camera, and then a picture is
taken. Then it gives the taken pictures to the NPR system, and NPR output the
number plate in a text format.
Irish car plates respect this format: YY-CC-SSSSSS where YY is a double digit
for the year of registration, CC represents the two letters from which county the
car has been registered in, and finally SSSSSS is the serial number. This serial
number starts from 0 every year, and is specific to a county, meaning that 157
in Dublin is different than in Carlow. All the specifications about Irish car plate
2
regulations, such as the size of characters, thickness of the edges, distances between
characters, can be found on the Irish Status Book’s website [1].
The software should be able to read car plate number for a range of distances
from 5 meters to 15 meters. Because the plate is not always parallel to the ground
(if the car is turning to the right or left, or if the ground is not flat for example),
the software should identify car plate numbers from 0°to 10°. Another issue could
be the dirt on a car plate. If the dirt is light enough and is not located directly
on the car plate characters, the software should be still able to read the numbers.
We also assume that there will be only one car plate readable on the image.
3
2
Existing commercial system
We can mainly find NPR on Closed-circuit television (CCTV) and on systems
used by the police to recognize stolen vehicles or speeding.
2.1
CCTV Camera Pros
The DWC-LPR650 is a video-camera that takes pictures of car plates. This
model is specific to the American cars which have reflective car plates. The distance
to get the best results is between 75 and 100 feet (22.86 to 30.48 meters). The
video-camera can work in 4 different traffic modes related to the speed of the
cars [2]. No information about the embedded software is available. It is priced at
e1799.99.
2.2
Spytown
The DWC-LPR650 is a video-camera that takes pictures of car plates. It is said
that it can ”captur[e] car plate in “any extreme light conditions”, and this can
capture images “both day and night” [3]. It is priced at e609.00. The product
is made by Digital Watchdog. No information is available about the embedded
software.
2.3
Surveillance-Video
REG-L1875-XE-B is a video-camera like the previous ones. It embeds a licence
plate recognition software. This camera is able to take pictures of vehicles at a
speed of 160 km/h. This video-camera is priced at e1575.00 [4].
4
3
Existing softwares
Roughly, we can say that the NPR software can be split in two parts. The first
part is a bunch of mathematical processes to locate the car plate. The second one
is what we can call an Optical Character Recognition (OCR).
3.1
Image modification software
GIMP
GNU’s Not Unix (GNU) Image Manipulation Program (GIMP) is, as its name
says, a free software image manipulation. Its development has started in 1995,
and its latest version was released in August 2011. GIMP is available on most
Operating System (OS) such as Windows, GNU/Linux and MacOS.
Figure 2: The GIMP interface
GIMP has many different features. It contains a bunch of painting tools such as
brushes, pencil, eraser. . . It supports layers and channels, in particular the alpha
channel, which is used for transparency, multiple undo/redo, transformations tools
for rotating, scaling shearing, and flipping. It also includes selections tools such
as rectangles, ellipses, fuzzy, Bezier, intelligent scissors and free. GIMP supports
5
many different data types for images including JPEG, GIF, PNG, BMP and even
PDF [5].
GIMP can be used in a different way than other image manipulation softwares,
some features can be called by other programs. Its interface is tiled, it can surprise
at first, but it can be very handy with time. GIMP also has a plug-in system. Plugins may be written in Perl, Python or Tcl. These scripts can use the 150 standard
effects and filters.
Photoshop
Photoshop is probably the most known image modification software. Photoshop
is a proprietary software developed by Adobe. Its development has started in 1987,
but the first release under the Photoshop name had been made in 1988.
Figure 3: Photoshop interface
Photoshop contains loads of features containing automatic lens correction, straighten
image tool, a gradient tool preset for neutral density. We can also find control
color and tone features such as High Dynamic Range imaging (HDR) imaging,
HDR toning, noise removal, complex selections, color decontamination. . . A full
list of features is available on the Adobe’s website [6]. Like GIMP, Photoshop has
its plug-in system
6
Phatch
Photo & Batch (Patch) is a free modification image software. As far as we can
go in the Patch’s history, there is no release date for the first release called 0.1.
The second one called 0.2 was released in September 2009, and the last one has
been released in March 2010. So it is a new project, and might not be as thorough
as other softwares.
Figure 4: Phatch interface
Such as Image Magick (described below), Patch is different from the usual image
modification softwares. Indeed, its approach to image modification is a bit different, Patch will actually deal with bunches of images, and apply modifications set
up by the user like resize, apply filters, colorize, fit, relect. . . A full list is available
on the Patch’s wiki [7].
7
Image Magick
Image Magick is a free image modification software, its development has started
in 1987. The latest version was released in November 20111 .
Figure 5: Image Magick logo
Image Magick is not like the other image modification software. Its main characteristic is that there is no Graphical User Interface (GUI), except for the image
rendering that uses the X Window GUI. So, we can wonder how it works. Image
Magick is composed by a number of commands. Image Magick has a lot of features,
such as format conversion, transforms (resize, crop, flip, trim), transparency. It
can also draw (add text, or shapes).
Image Magick support over 100 formats, including videos. For a complete list
of the available feature, have a look at the Image Magick’s website [8]. Because
of its interface, Image Magick is used differently than the other softwares, but it
does not mean that Image Magick is less powerful. Image Magick is mainly used
in Shell scripts. It can then deal with complete folder, just by launching the script.
3.2
Optical Character Recognition
Ocropus
Ocropus is a free as in freedom OCR software. It is developed by the German
Research Center for Articial Intelligence in Kaiserslautern, and is sponsored by
Google. OCRopus might be the engine of Google Books to read texts from physical
1
http://sourceforge.net/projects/imagemagick/files/6.7.3-sources/
8
books. But Google did not really talk much about this engine [9, 10]. OCRopus is
available on MacOS and GNU/Linux.
Figure 6: OCRopus logo
The code is written in C++ and is well documented, even the design documents
are published [11]. [12]. Every component of the software is pluggable, so it is easy
to take off some parts and add new onesi. Before the release 0.4, OCRopus used
the Tessaract engine for the character recognition, but now uses its own one [13].
Tesseract-ocr
Tessaract was initially released in 1985 by Hewlett-Packard (HP) Labs until
1995. Then, only a few changes for the next decade, and finally, HP decided to
publish the source code as a free software. Since then, Google took the project
over, and is the main maintainer. In 1995, it was in the top 3 performers at the
OCR accuracy [14]. Tesseract still has very good performaces, in word accuracy or
characters accuracy, with results ranging from 0.14% to 6.66% except when there
is color in the text, and in that case Tesseract is really bad, with a high failure
rate (93.33% and 89.75% for two different texts for the error rate, and 75.14% and
73.57% of error rate for the characters) stil
Tessaract is written in C and C++. The application is available on Windows,
GNU/Linux and MacOS. Tesseract can be used to recognize layouts by using
OCRopus [14]. Tessaract can recognizes 29 different languages [15], and it is easy
to extend this system with other languages. [16].
Microsoft Office Document Imaging
Microsoft Office Document Imaging (MODI) was, as its name says so, developed by Microsoft. It was first included in Office XP and was in some versions
including Office 2007. It was used with scanners in order to copy, edit and search
in scanned document. MODI is no longer furnished with Office. We can read this
9
message on the Microsoft’s website: “In Office 2010, MODI is fully deprecated.
This change also affects the setup tree, which no longer shows the MODI Help,
OCR, or Indexing Service Filter nodes on the Tools menu. [. . . ] MODI and all its
components are deprecated for 64-bit Office 2010” [17].
Ocrad
Ocrad is the OCR of the GNU project. This software is free, and is written
in C++. The development probably started in 2003 [18]. 2007 and the latest
release was available in January 2011 [19]. Ocrad is available on Unix-like OS. Like
Tesseract and Ocropus, Ocrad has no GUI. It is usable by command-line. Ocrad
has an error rate between 20% and 38%, for the word accuracy, and between 5%
and 13% for the character accuracy. Ocrad does not seem very performant with
italic text “Both Ocrad and GOCR perform very badly on italic text” [20].
10
4
4.1
Languages
Python
Figure 7: Python logo
Python is an interpreted programming language created in 1991. Its philosophy
is to be readable by any programmer because of its syntax. “Python combines
remarkable power with very clear syntax” [21]. Python is a multiple programming
paradigms meaning that it can be used with object-oriented paradigm or with
functional paradigm, or even with procedural, reflective or imperative paradigm.
Python was influenced by ABC, ALGOL 68, C, C++, Haskell, Icon, Java, Lisp,
Modula-3, Perl. Python has different implementations, but CPython is the most
used and this implementation support more features than the others [22]. Python
can be install and used on Windows, GNU/Linux, GNU/BSD, MacOS [23] and
some other platform like Android [24].
Its libraries is very thorough. “Fans of Python use the phrase “batteries included” to describe the standard library, which covers everything from asynchronous processing to zip files” [25]. Moreover, it is possible as any other good
language, to import other libraries written by other programmers. These libraries
can be written in C or Python [26].
The built-in types are very powerful as well. Strings, dictionaries, lists and tuples
are the commonest, but not least because we can also find unicode, bytearray,
buffer, xrange, set and frozenset. Moreover these particular and powerful types,
booleans, integers, floats are also available.
11
c l a s s MyClass :
def o p e r a t i o n ( s e l f , value , v a l u e 2 =1):
s e l f . data = 2 * v a l u e + v a l u e 2
def d i s p l a y ( s e l f ) :
print s e l f . data
class SecondClass ( F i r s t C l a s s ) :
def d i s p l a y ( s e l f ) :
print ’ Current v a l u e = ”%s ” ’ % s e l f . data
if
name
== ’ m a i n ’ :
z = SecondClass ( )
z . o p e r a t i o n ( 4 2 , 53 )
z . display ()
Listing 1: Python Sample
12
4.2
C++
C++ is a programming language invented in 1983. The last standard was published in 2001 [27]. Like Python, C++ is a multiple paradigm language. C++ was
influenced by C, Simula, Ada 83, ALGOL 68, CLU, ML.
The built-in types in C++ are the integers, wide characters (for non-ASCII
characters), floats, boolean types, void, enumeration (such as C), arrays, pointers
strings, structures and classes, unions and functions.
The standard C++ library is a set of 51 headers. These headers contains the
list of function names. Each one of them is described in UNIX man pages. The
list of headers is available on dinkumware [28].
13
#include <i o s t r e a m >
using namespace s t d ;
c l a s s who
{
char name ;
public :
who ( char c )
{
name = c ;
}
˜who ( )
{
cout << ” D e s t r u c t i n g who : ” << name << e n d l ;
}
};
who makewho ( )
{
who temp ( ’B ’ ) ;
return temp ;
}
int main ( )
{
who ob ( ’A ’ ) ;
makewho ( ) ;
return 0 ;
}
Listing 2: C++ Sample
14
4.3
Java
Figure 8: Java logo
Java is a semi-compiled programming language initially developed by Sun in
1995, and because Sun was bought out by Oracle, Oracle is the actual developer.
It is a Object-oriented paradigm. Java was influenced by Ada 83, C++, C#,
Delphi Object Pascal, Eiffel, Generic Java, Mesa, Modula-3, Oberon, ObjectiveC, UCSD Pascal, Smalltalk.
The compilation of a Java program does not make an executable, but a bytecode.
This bytecode has the particularity to be executed on any OS which embeds a
Java Virtual Machine (JVM). A compiled program can then be executed on any
operating system. It also does not depend of the architecture of the machine.
The Java library is pretty thorough as well. As the documentation shows, there
are not less than 3793 different classes in the standard library [29]. Java also
contains a set of built-in types which are characters and strings, integers, real
numbers and booleans. Everything about the equivalent of lists and dictionaries
in Python is located in the standard library and is not considered as a built-in
type.
15
public c l a s s JavaClassExample
{
private S t r i n g name ;
public void setName ( S t r i n g n )
{
name = n ;
}
public S t r i n g getName ( )
{
return name ;
}
public s t a t i c void main ( S t r i n g a r g s [ ] )
{
JavaClassExample javaClassExample = new JavaClassExample ( ) ;
javaClassExample . setName ( ” V i s i t o r ” ) ;
System . out . p r i n t l n ( ” H e l l o ” + javaClassExample . getName ( ) ) ;
}
}
Listing 3: Java Sample
16
4.4
C#
C# is a programming language created by Microsoft in 2001. Its syntax has
been inspired by Java, C++, Pascal. C# was influenced by Java, C++, Eiffel,
Modula-3, Object Pascal. Like Java, C# is semi compiled and run in a virtual
machine called Common Language Runtime (CLR). Figure 8 shows the different
layers in programs using the .NET framework2 . C# has the philosophy of being
simple, modern, general-purpose, object-oriented programming language.
Different compilers exist for this language. The official one created and maintained by Microsoft is the .NET framework Software Development Kit (SDK).
There are two other compilers which are free (as in freedom): Mono and DotGNU.
The .NET framework SDK is only available on the Windows OS whereas DotGNU
and Mono are available on different platforms such as Windows, GNU/Linux,
GNU/BSD, MacOS. DotGNU do not support the last versions of C#, its support
was stopped in 2009 [30], and seem to only implement the version 2 of C#. Mono
implements the version 4 [31] which is the last one at the moment.
Figure 9: Common Language Runtime
The built-in types are split in two parts. First, there are the built-in types such
as the integers, float numbers. . . Then there are the collections for the LinkedLists,
Queues, Stacks, Lists. . . . A full list is available on the documentation [32].
2
Image from Wikipedia: http://upload.wikimedia.org/wikipedia/commons/6/6f/CLR_
diag.svg
17
using System ;
using System . IO ;
public c l a s s W r i t e F i l e S t u f f
{
public s t a t i c void Main ( )
{
F i l e S t r e a m f s = new F i l e S t r e a m ( ” c : \ \ tmp\\ W r i t e F i l e S t u f f . t x t ” ,
FileMode . OpenOrCreate , F i l e A c c e s s . Write ) ;
StreamWriter sw = new StreamWriter ( f s ) ;
try
{
sw . WriteLine ( ”Howdy World . ” ) ;
}
finally
{
i f ( sw != null )
{
sw . C l o s e ( ) ;
}
}
}
}
Listing 4: C# Sample
4.5
The language that will be used
Each language has its pros and cons. The executable of a C++ software is not
usable on different platforms, a compilation has to be done for every architecture
and platform, so it can be an inconvenient if we do not have all the requirements
to compile it. C# is mainly used on Windows, and its Mono’s implementation
is not as good as it is on Windows, and might not exist forever because of some
software patenting in United States [33]. Python and Java do not have this issue.
And because I know Python better than Java, and because its syntax is much
more readable for someone who do not know the language, and its built-in datatypes which are incredibly powerful, the language that will be used is going to be
Python.
18
5
The way to proceed
5.1
The principle
In order to create the software, there is a couple of algorithms to implement.
Each algorithm, or set of algorithms represents a step. This is an overview of the
main algorithm.
ˆ Plate localization
ˆ Plate orientation and sizing
ˆ Character segmentation
ˆ Character recognition
ˆ Syntactical/Geometrical analysis
There are many ways to implement each of these algorithms. A couple of them
is presented below.
5.2
Plate localization
The first step of NPR is to localize the plate in the picture. For this, a couple of
different algorithms exists and had already been implemented.
Grayscale - Sobel filter - Otsu’s method
From 26th January 2005 to 15 February 2005, Scott Douglas and Sean Neubert
have worked on an algorithm in order to detect number plates and draw rectangles
on the images. This algorithm is available on their website for everyone and had
been written in Matlab [34].
Their main algorithm is divided in three algorithms:
ˆ Convert the image in gray scale
ˆ Vertical edge detection with Sobel filter
ˆ Edge map thresholded using Otsu’s method:
19
Figure 10: Grayscale. Before/After
Gray Scale
An image is composed by a triple called Red Green Blue (RGB) of intensities of
these colors. Three algorithms made this possible, with three formulas:
Lightness:
max(R, G, B) + min(R, G, B)
2
Luminosity:
0.21R + 0.72G + 0.07B
Average Brightness:
(R + G + B)
3
[35]
Sober Filter
The Sobel filter edge detector uses two matrices called Sobel gradient edge detec-
Figure 11: Sobel edge detector. Before/After
20
tor.


1
2
1
0
0
V ertical matrix =  0
−1 −2 −1


1 0 −1
Horizontal matrix = 2 0 −2
1 0 −1
These matrices are applied to every pixels on the gray scaled image.
The Canny edge detector
The Canny edge detector method is another method that aims to get a good
detection, a good localization and a minimal response. Six steps for the algorithm:
ˆ Noise reduction
ˆ Finding the intensity gradient of the image
ˆ Non-maximum suppression
ˆ Tracing edges through the image
The noise reduction uses a Gaussian filter which slightly blurs the image. To
apply the Gaussian blur, simply apply a Gaussian filter. Here is a 5 × 5 Gaussian
filter.


2 4 5 4 2
4 9 12 9 4

1 
5 12 15 12 5 × A
B=


159 
4 9 12 9 4
2 4 5 4 2
21
Figure 12: Gaussian blur. Before/After
Finding the intensity gradient of the image uses an edge detection operator such
as Sobel (see above). The returned value will be used for the “for the first derivative in the horizontal direction (Gy) and the vertical direction (Gx). From this
the edge gradient and direction can be determined.
q
G = G2x + G2y
Gx
Θ = arctan
Gy
The edge direction angle is rounded to one of four angles representing vertical,
horizontal and the two diagonals (0, 45, 90 and 135 degrees for example)” [36].
The non-maximum suppression is defined as : “The image is scanned along the
image gradient direction, and if pixels are not part of the local maxima they are set
to zero. This has the effect of suppressing all image information that is not part of
local maxima” [37]. An algorithm, written in Java is available on the University
of Southampton’s website3 .
Tracing edges through the image uses hysteresis thresholding which uses two
different kind of thresholding itself: high and low. Hysteresis thresholding is defined as: “The hysteresis mode uses a hysteresis loop to provide a more connected
result. Any pixel above the upper threshold is turned white. The surround pixels
are then searched recursively. If the values are greater than the lower threshold
they are also turned white. The result is that there are many fewer specks of white
in the resulting image” [38]. An algorithm has been published on the University
of Southamption4 .
3
4
http://users.ecs.soton.ac.uk/msn/book/new_demo/nonmax/nonmax.java
http://users.ecs.soton.ac.uk/msn/book/new_demo/thresholding/hystThresh.java
22
5.3
Plate orientation
The first method to orientate the plate is called the Hough transformation. It
is used to detect lines in an image. “For each pixel in image space (x0 , x1 ), using
transformation, r = x.cosθ + y.sinθ. We get a curve r = x0 + y0 .sinθ in the
parameter space (θ, r). Suppose that there are n points in the image space. After
translating them to the parameter space, we obtain n curves in the parameter
space. If these curves cross the same points (θ0 , r0 ), then the n points in the image
space are on a line. So we can find lines in the image space by searching the cross
points in the parameter space” [39].
5.4
Character segmentation
The character segmentation is the action to separate the characters, in order to
deal with them one by one. The main method to segment the car plates characters
is the vertical and horizontal projection (see Figure 12). A peak corresponds to
a space, and between these peaks are the characters we are looking for. The
projections are the sum of all the values per row (either vertical or horizontal).
Figure 13: Horizontal and vertical projections
5.5
Character recognition
Two different ways of recognizing characters are possible. The first one is called
OCR and the second one is called Template Matching Character Recognition
(TMCR).
OCR
The algorithm of an OCR engine is as follow:
23
ˆ outlines are analysed and stored
ˆ outlines are gathered together as Blobs
ˆ blobs are organised into texts lines
ˆ text lines are broken into words
ˆ First pass of recognition process attempts to recognize each word in turn
ˆ Satisfactory words passed to adaptive trainer
ˆ lessons learned by adaptive trainer employed in a second pass, which attempts recognize the words that were not recognized satisfactory in the first
pass
ˆ Fuzzy spaces resolved and text checked for small caps
ˆ digital texts are outputted
[40]
Template Matching Character Recognition
The TMCR is split in two parts: offline and online systems. Online systems are
the system we are using: an image where only characters have to be recognize.
Offline systems are reading from external sources like a pen writing on a touch
screen for example. The second one need a very good algorithm with good performances, because it has more steps, such as localising the pen, and analyse the
movement of it as it writes [41].
The algorithm is to use patterns and compare them to the different characters.
For this, the characters and the patters has to be at the same size. The pattern
who is the best candidate (who match the most) is going to be saved, and we will
try to match the next one.
5.6
Syntactical analysis
This is a part where no specific algorithm are required. The plate which had
been analyzed, has now an output (since the character recognition). The only
thing to do is to check if the plate respects the syntax of the licence plates of
the country (Here, Ireland). As said in the introduction, the specifications are
available on the Irish Status Book’s website [1].
24
List of Figures
1
2
3
4
5
6
7
8
9
10
11
12
The GIMP interface . . . . . . . .
Photoshop interface . . . . . . . . .
Phatch interface . . . . . . . . . . .
Image Magick logo . . . . . . . . .
OCRopus logo . . . . . . . . . . . .
Python logo . . . . . . . . . . . . .
Java logo . . . . . . . . . . . . . . .
Common Language Runtime . . . .
Grayscale. Before/After . . . . . .
Sobel edge detector. Before/After .
Gaussian blur. Before/After . . . .
Horizontal and vertical projections
25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
5
6
7
8
10
14
16
19
19
21
22
Acronyms
CCTV Closed-circuit television. 4
CLR Common Language Runtime. 17, 22
GIMP GNU Image Manipulation Program. 5–7
GNU GNU’s Not Unix. 5, 10, 23
GUI Graphical User Interface. 8, 10
HDR High Dynamic Range imaging. 6
HP Hewlett-Packard. 9
JVM Java Virtual Machine. 15
MODI Microsoft Office Document Imaging. 10
NPR Number Plate Recognition. 2, 4, 5
OCR Optical Character Recognition. 5, 9, 10, 21
OS Operating System. 5, 10, 15, 17
Patch Photo & Batch. 7, 8
SDK Software Development Kit. 17
26
Bibliography
[1] Office of the Attorney General. S.i. no. 432/1999 - vehicle registration and
taxation (amendment) regulations, 1999. http://www.irishstatutebook.
ie/1999/en/si/0432.html.
[2] CCTV Camera Pros. License plate recognition camera - lpr camera. http:
//www.cctvcamerapros.com/License-Plate-Recognition-Camera-p/
lpr-800.htm.
[3] SpyTown.
Digital watchdog dwc-lpr650 license plate recognition camera — license plate recognition cameras.
http://www.
spytown.com/digital-watchdog-dwc-lpr650.html?productid=
digital-watchdog-dwc-lpr650&channelid=NEXTA.
[4] Surveillance-Video. Extreme open box items — extreme, reg-l1875-xeb, reg l1 license plate cameras. http://www.surveillance-video.com/
reg-l1875-xe-b.html?productid=reg-l1875-xe-b&channelid=NEXTA.
[5] GIMP-Team. Chapter 1. introduction. http://docs.gimp.org/2.6/en/
introduction.html#introduction-features.
[6] Adobe Systems Incorporated.
Features — adobe photoshop cs5.
http://www.spytown.com/digital-watchdog-dwc-lpr650.html?
productid=digital-watchdog-dwc-lpr650&channelid=NEXTA.
[7] Stani. Actions overview - phatch = photo & batch! http://photobatch.
wikidot.com/actions.
[8] ImageMagick Studio LLC. Imagemagick: Convert, edit, or compose bitmap
images. ImageMagick:Convert,Edit,OrComposeBitmapImages.
[9] Shoreline Records Management. Google expands ocr capabilities for document
scanning.
http://www.shorelinerecordsmanagement.com/blog/bid/
25717/Google-Expands-OCR-Capabilities-for-Document-Scanning.
27
[10] Alex Chitu. Google docs ocr. http://googlesystem.blogspot.com/2009/
09/google-docs-ocr.html.
[11] Samuel M. Goldwasser.
org/.
Tesseract.
http://tesseract-ocr.repairfaq.
[12] Thomas Breuel. Releasenotes - ocropus - ocropus release notes - the ocropus(tm) open source document analysis and ocr system - google project hosting. http://code.google.com/p/ocropus/wiki/ReleaseNotes.
[13] Thomas Breuel. Does ocropus still use tesseract for line recognition and...
http://groups.google.com/group/ocropus/msg/96c4081a3213dbcc.
[14] Luc Vincent & Uber Tech Lead. Announcing tesseract ocr. http://
googlecode.blogspot.com/2006/08/announcing-tesseract-ocr.html.
[15] Ray Smith. Downloads - tesseract-ocr - an ocr engine that was developed at
hp labs between 1985 and 1995... and now at google. - google project hosting.
http://code.google.com/p/tesseract-ocr/downloads/list.
[16] zdenop. Faq - tesseract-ocr - frequently asked questions - an ocr engine that
was developed at hp labs between 1985 and 1995... and now at google. - google
project hosting. http://code.google.com/p/tesseract-ocr/wiki/FAQ.
[17] Microsoft. Changes in word 2010. http://technet.microsoft.com/en-us/
library/cc179199.aspx.
[18] Ignazio Testoni. [bug-ocrad] ocrad 0.4 on sparc solaris 8. http://lists.gnu.
org/archive/html/bug-ocrad/2003-10/msg00000.html.
[19] Wayne State University. Index of /pub/gnu/ocrad. http://ftp.wayne.edu/
pub/gnu/ocrad/.
[20] Peter Selinger. Review of linux ocr software. http://www.mscs.dal.ca/
~selinger/ocr-test/.
[21] Python Software Foundation. General python faq. http://docs.python.
org/faq/general#what-is-python.
[22] Python Software Foundation. Introduction. http://www.python.org/doc/
/current/reference/introduction.html.
[23] Python Software Foundation. Download python. http://www.python.org/
download/.
28
[24] Damon Kohle. android-scripting - scripting layer for android brings scripting
languages to android. - google project hosting. http://code.google.com/p/
android-scripting/.
[25] Python Software Foundation.
about/.
About python.
http://www.python.org/
[26] Python Software Foundation. Extending python with c or c++. http://
docs.python.org/extending/extending.html.
[27] International Organization Standardization. Iso/iec 14882:2011. http://www.
iso.org/iso/catalogue_detail?csnumber=50372.
[28] Dinkumware. Dinkumware, ltd. - compleat libraries reference. http://www.
dinkumware.com/manuals/#Standard%20C++%20Library.
[29] Oracle. All classes (java platform se 6). http://docs.oracle.com/javase/
6/docs/api/allclasses-noframe.html.
[30] Norbert Bollow. Free software for webservices and for c# programming. http:
//www.gnu.org/s/dotgnu/.
[31] Miguel de Icaza. What is mono - mono. http://www.mono-project.com/
What_is_Mono.
[32] Microsoft. System.collections.generic. http://msdn.microsoft.com/en-us/
library/0sbxh9x2.aspx.
[33] Free Software Foundation. Microsoft’s empty promise - free software foundation - working together for free software. http://www.fsf.org/news/
2009-07-mscp-mono.
[34] Scott Douglas & Sean Neubert. License plate recognition. http://www.
scottdouglas.net/projects/plates/.
[35] GIMP-Team.
5.10. desaturate.
gimp-tool-desaturate.html.
http://docs.gimp.org/2.6/en/
[36] Wikipedia. Canny edge detector. http://en.wikipedia.org/wiki/Canny_
edge_detector.
[37] University of Southampton. Non-maximum suppression - computer vision website header. http://users.ecs.soton.ac.uk/msn/book/new_demo/
nonmax/.
29
[38] University of Southampton. Standard and hysteresis thresholding - computer vision website header. http://users.ecs.soton.ac.uk/msn/book/
new_demo/thresholding/.
[39] Yungang Zhang & Changshui Zhang. A new algorithm for character segmentation of licence plate. www.waset.org/journals/waset/v56/v56-9.pdf.
[40] Rumiana Krasteva & Ani Boneva & Ditchko Butchvarov & Veselin Geortchev.
Basic components in optical character recognition systems. experimentally
analysis on old bulgarian character recognition. http://www.acadjournal.
com/2001/v5/part5/p2/.
[41] Jamia Millia Islamia. Character recognition using template matching. http:
//www.fsf.org/news/2009-07-mscp-mono.
30