Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
licenseplates
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Taddeüs Kroes
licenseplates
Commits
bc8111d7
Commit
bc8111d7
authored
Dec 21, 2011
by
Jayke Meijer
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:taddeus/licenseplates
parents
27eb1e69
3228ef58
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
20 additions
and
516 deletions
+20
-516
docs/report.tex
docs/report.tex
+17
-17
docs/verslag.tex
docs/verslag.tex
+0
-495
src/Classifier.py
src/Classifier.py
+1
-2
src/create_classifier.py
src/create_classifier.py
+2
-2
No files found.
docs/report.tex
View file @
bc8111d7
...
@@ -192,7 +192,7 @@ stored in XML files. So, the first step is to read these XML files.
...
@@ -192,7 +192,7 @@ stored in XML files. So, the first step is to read these XML files.
\paragraph*
{
XML reader
}
\paragraph*
{
XML reader
}
The XML reader will return a
'
license plate' object when given an XML file. The
The XML reader will return a
`
license plate' object when given an XML file. The
licence plate holds a list of, up to six, NormalizedImage characters and from
licence plate holds a list of, up to six, NormalizedImage characters and from
which country the plate is from. The reader is currently assuming the XML file
which country the plate is from. The reader is currently assuming the XML file
and image name are corresponding, since this was the case for the given
and image name are corresponding, since this was the case for the given
...
@@ -302,22 +302,21 @@ increasing our performance, so we only have one histogram to feed to the SVM.
...
@@ -302,22 +302,21 @@ increasing our performance, so we only have one histogram to feed to the SVM.
\subsection
{
Classification
}
\subsection
{
Classification
}
For the classification, we use a standard Python Support Vector Machine,
For the classification, we use a standard Python Support Vector Machine,
\texttt
{
libsvm
}
. This is a often used SVM, and should allow us to simply feed
\texttt
{
libsvm
}
. This is an often used SVM, and should allow us to simply feed
the data from the LBP and Feature Vector steps into the SVM and receive
data from the LBP and Feature Vector steps into the SVM and receive results.
results.
\\
\\
Using a SVM has two steps. First, the SVM has to be trained, and then it can be
Using a SVM has two steps. First you have to train the SVM, and then you can
used to classify data. The training step takes a lot of time, but luckily
use it to classify data. The training step takes a lot of time, so luckily
\texttt
{
libsvm
}
offers us an opportunity to save a trained SVM. This means that
\texttt
{
libsvm
}
offers us an opportunity to save a trained SVM. This means,
the SVM only has to be changed once.
you do not have to train the SVM every time.
\\
\\
We have decided to only include a character in the system if the SVM can be
We have decided to only include a character in the system if the SVM can be
trained with at least 70 examples. This is done automatically, by splitting
trained with at least 70 examples. This is done automatically, by splitting
the
the data set in a trainingset and a testset, where the first 70 examples of
data set in a learning set and a test set, where the first 70 examples of a
a character are added to the training
set, and all the following examples are
character are added to the learning
set, and all the following examples are
added to the testset. Therefore, if there are not enough examples, all
added to the test
set. Therefore, if there are not enough examples, all
available examples end up in the
trainingset, and non of these characters
available examples end up in the
learning set, and non of these characters end
end up in the test
set, thus they do not decrease our score. However, if this
up in the test
set, thus they do not decrease our score. However, if this
character later does get offered to the system, the training is as good as
character later does get offered to the system, the training is as good as
possible, since it is trained with all available characters.
possible, since it is trained with all available characters.
...
@@ -330,7 +329,7 @@ scripts is named here and a description is given on what the script does.
...
@@ -330,7 +329,7 @@ scripts is named here and a description is given on what the script does.
\subsection*
{
\texttt
{
LearningSetGenerator
.py
}}
\subsection*
{
\texttt
{
generate
\_
learning
\_
set
.py
}}
...
@@ -345,6 +344,7 @@ scripts is named here and a description is given on what the script does.
...
@@ -345,6 +344,7 @@ scripts is named here and a description is given on what the script does.
\subsection*
{
\texttt
{
run
\_
classifier.py
}}
\subsection*
{
\texttt
{
run
\_
classifier.py
}}
\section
{
Finding parameters
}
\section
{
Finding parameters
}
Now that we have a functioning system, we need to tune it to work properly for
Now that we have a functioning system, we need to tune it to work properly for
...
...
docs/verslag.tex
deleted
100644 → 0
View file @
27eb1e69
This diff is collapsed.
Click to expand it.
src/Classifier.py
View file @
bc8111d7
...
@@ -4,8 +4,6 @@ from svmutil import svm_train, svm_problem, svm_parameter, svm_predict, \
...
@@ -4,8 +4,6 @@ from svmutil import svm_train, svm_problem, svm_parameter, svm_predict, \
class
Classifier
:
class
Classifier
:
def
__init__
(
self
,
c
=
None
,
gamma
=
None
,
filename
=
None
,
neighbours
=
3
,
\
def
__init__
(
self
,
c
=
None
,
gamma
=
None
,
filename
=
None
,
neighbours
=
3
,
\
verbose
=
0
):
verbose
=
0
):
self
.
neighbours
=
neighbours
if
filename
:
if
filename
:
# If a filename is given, load a model from the given filename
# If a filename is given, load a model from the given filename
self
.
model
=
svm_load_model
(
filename
)
self
.
model
=
svm_load_model
(
filename
)
...
@@ -18,6 +16,7 @@ class Classifier:
...
@@ -18,6 +16,7 @@ class Classifier:
self
.
param
.
gamma
=
gamma
# Parameter for radial kernel
self
.
param
.
gamma
=
gamma
# Parameter for radial kernel
self
.
model
=
None
self
.
model
=
None
self
.
neighbours
=
neighbours
self
.
verbose
=
verbose
self
.
verbose
=
verbose
def
save
(
self
,
filename
):
def
save
(
self
,
filename
):
...
...
src/create_classifier.py
View file @
bc8111d7
...
@@ -12,8 +12,8 @@ def load_classifier(neighbours, blur_scale, c=None, gamma=None, verbose=0):
...
@@ -12,8 +12,8 @@ def load_classifier(neighbours, blur_scale, c=None, gamma=None, verbose=0):
if
verbose
:
if
verbose
:
print
'Loading classifier...'
print
'Loading classifier...'
classifier
=
Classifier
(
filename
=
classifier_file
,
verbose
=
verbose
)
classifier
=
Classifier
(
filename
=
classifier_file
,
\
classifier
.
neighbours
=
neighbours
neighbours
=
neighbours
,
verbose
=
verbose
)
elif
c
!=
None
and
gamma
!=
None
:
elif
c
!=
None
and
gamma
!=
None
:
if
verbose
:
if
verbose
:
print
'Training new classifier...'
print
'Training new classifier...'
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment