Commit 7384307c authored by Jayke Meijer's avatar Jayke Meijer

Created reflection and moved Diffulcties and workload distrib. there.

parent b87013e1
...@@ -63,10 +63,10 @@ results made us pick Python. We felt Python would not restrict us as much in ...@@ -63,10 +63,10 @@ results made us pick Python. We felt Python would not restrict us as much in
assigning tasks to each member of the group. In addition, when using the assigning tasks to each member of the group. In addition, when using the
correct modules to handle images, Python can be decent in speed. correct modules to handle images, Python can be decent in speed.
\section{Implementation} \section{Theory}
Now we know what our program has to be capable of, we can start with the Now we know what our program has to be capable of, we can start with the
implementations. defining what problems we have and how we want to solve these.
\subsection{Extracting a letter} \subsection{Extracting a letter}
...@@ -294,11 +294,11 @@ bounds. The first to be checked is the pixel in the left ...@@ -294,11 +294,11 @@ bounds. The first to be checked is the pixel in the left
bottom corner in the square 3 x 3, with coordinate $(x - 1, y - 1)$ with $g_c$ bottom corner in the square 3 x 3, with coordinate $(x - 1, y - 1)$ with $g_c$
as center pixel that has coordinates $(x, y)$. If the grayscale value of the as center pixel that has coordinates $(x, y)$. If the grayscale value of the
neighbour in the left corner is greater than the grayscale neighbour in the left corner is greater than the grayscale
value of the center pixel than return true. Bitshift the first bit with 7. The value of the center pixel than return true. Bit-shift the first bit with 7. The
outcome is now 1000000. The second neighbour will be bitshifted with 6, and so outcome is now 1000000. The second neighbour will be bit-shifted with 6, and so
on. Until we are at 0. The result is a binary pattern of the local point just on. Until we are at 0. The result is a binary pattern of the local point just
evaluated. evaluated.
Now only the edge pixels are a problem, but a simpel check if the location of Now only the edge pixels are a problem, but a simple check if the location of
the neighbour is still in the image can resolve this. We simply return false if the neighbour is still in the image can resolve this. We simply return false if
it is. it is.
...@@ -306,10 +306,11 @@ it is. ...@@ -306,10 +306,11 @@ it is.
After all the Local Binary Patterns are created for every pixel. This pattern After all the Local Binary Patterns are created for every pixel. This pattern
is divided in to cells. The feature vector is the vector of concatenated is divided in to cells. The feature vector is the vector of concatenated
histograms. These histograms are created for cells. These cells are created by histograms. These histograms are created for cells. These cells are created by
dividing the \textbf{pattern} in to cells and create a histogram of that. So multiple dividing the \textbf{pattern} in to cells and create a histogram of that. So
cells are related to one histogram. All the histograms are concatenated and multiple cells are related to one histogram. All the histograms are
feeded to the SVM that will be discussed in the next section, Classification. concatenated and fed to the SVM that will be discussed in the next section,
Classification. We did however find out that the use of several cells was not
increasing our performance, so we only have one histogram to feed to the SVM.
\subsection{Classification} \subsection{Classification}
...@@ -326,8 +327,8 @@ available. These parameters are:\\ ...@@ -326,8 +327,8 @@ available. These parameters are:\\
Parameter & Description\\ Parameter & Description\\
\hline \hline
$\sigma$ & The size of the Gaussian blur.\\ $\sigma$ & The size of the Gaussian blur.\\
\emph{cell size} & The size of a cell for which a histogram of LBPs will \emph{cell size} & The size of a cell for which a histogram of LBP's
be generated.\\ will be generated.\\
\emph{Neighbourhood}& The neighbourhood to use for creating the LBP.\\ \emph{Neighbourhood}& The neighbourhood to use for creating the LBP.\\
$\gamma$ & Parameter for the Radial kernel used in the SVM.\\ $\gamma$ & Parameter for the Radial kernel used in the SVM.\\
$c$ & The soft margin of the SVM. Allows how much training $c$ & The soft margin of the SVM. Allows how much training
...@@ -357,7 +358,14 @@ the feature vectors will not have enough elements.\\ ...@@ -357,7 +358,14 @@ the feature vectors will not have enough elements.\\
In order to find this parameter, we used a trial-and-error technique on a few In order to find this parameter, we used a trial-and-error technique on a few
cell sizes. During this testing, we discovered that a lot better score was cell sizes. During this testing, we discovered that a lot better score was
reached when we take the histogram over the entire image, so with a single reached when we take the histogram over the entire image, so with a single
cell. Therefore, we decided to work without cells. cell. Therefore, we decided to work without cells.\\
\\
The reason that using one cell works best is probably because the size of a
single character on a license plate in the provided dataset is very small.
That means that when dividing it into cells, these cells become simply too
small to have a really representative histogram. Therefore, the
concatenated histograms are then a list of only very small numbers, which
are not significant enough to allow for reliable classification.
\subsection{Parameter \emph{Neighbourhood}} \subsection{Parameter \emph{Neighbourhood}}
...@@ -402,7 +410,7 @@ measure the time used to classify a license plate, not the training of the ...@@ -402,7 +410,7 @@ measure the time used to classify a license plate, not the training of the
dataset, since that can be done offline, and speed is not a primary necessity dataset, since that can be done offline, and speed is not a primary necessity
there.\\ there.\\
\\ \\
The speed of a classification turned out to be blablabla. The speed of a classification turned out to be ???.
\subsection{Accuracy} \subsection{Accuracy}
...@@ -414,15 +422,25 @@ accuracy score we possibly can.\\ ...@@ -414,15 +422,25 @@ accuracy score we possibly can.\\
\url{http://en.wikipedia.org/wiki/Automatic_number_plate_recognition}}, \url{http://en.wikipedia.org/wiki/Automatic_number_plate_recognition}},
commercial license plate recognition software score about $90\%$ to $94\%$, commercial license plate recognition software score about $90\%$ to $94\%$,
under optimal conditions and with modern equipment. Our program scores an under optimal conditions and with modern equipment. Our program scores an
average of blablabla. average of ???.
\section{Conclusion}
In the end it turns out that using Local Binary Patterns is a promising
technique for License Plate Recognition. It seems to be relatively unfased by
dirty licenseplates and different fonts on these plates.\\
\\
The performance speedwise is ???
\section{Reflection}
\section{Difficulties} \subsection{Difficulties}
During the implementation and testing of the program, we did encounter a During the implementation and testing of the program, we did encounter a
number of difficulties. In this section we will state what these difficulties number of difficulties. In this section we will state what these difficulties
were and whether we were able to find a proper solution for them. were and whether we were able to find a proper solution for them.
\subsection*{Dataset} \subsubsection*{Dataset}
We did experience a number of problems with the provided dataset. A number of We did experience a number of problems with the provided dataset. A number of
these are problems to be expected in a real world problem, but which make these are problems to be expected in a real world problem, but which make
...@@ -440,14 +458,14 @@ are not properly classified. This is of course very problematic, both for ...@@ -440,14 +458,14 @@ are not properly classified. This is of course very problematic, both for
training the SVM as for checking the performance. This meant we had to check training the SVM as for checking the performance. This meant we had to check
each character whether its description was correct. each character whether its description was correct.
\subsection*{SVM} \subsubsection*{SVM}
We also had trouble with the SVM for Python. The standard Python SVM, libsvm, We also had trouble with the SVM for Python. The standard Python SVM, libsvm,
had a poor documentation. There was no explanation what so ever on which had a poor documentation. There was no explanation what so ever on which
parameter had to be what. This made it a lot harder for us to see what went parameter had to be what. This made it a lot harder for us to see what went
wrong in the program. wrong in the program.
\section{Workload distribution} \subsection{Workload distribution}
The first two weeks were team based. Basically the LBP algorithm could be The first two weeks were team based. Basically the LBP algorithm could be
implemented in the first hour, while some talked and someone did the typing. implemented in the first hour, while some talked and someone did the typing.
...@@ -455,7 +473,7 @@ Some additional 'basics' where created in similar fashion. This ensured that ...@@ -455,7 +473,7 @@ Some additional 'basics' where created in similar fashion. This ensured that
every team member was up-to-date and could start figuring out which part of the every team member was up-to-date and could start figuring out which part of the
implementation was most suited to be done by one individually or in a pair. implementation was most suited to be done by one individually or in a pair.
\subsection{Who did what} \subsubsection*{Who did what}
Gijs created the basic classes we could use and helped the rest everyone by Gijs created the basic classes we could use and helped the rest everyone by
keeping track of what required to be finished and whom was working on what. keeping track of what required to be finished and whom was working on what.
Tadde\"us and Jayke were mostly working on the SVM and all kinds of tests Tadde\"us and Jayke were mostly working on the SVM and all kinds of tests
...@@ -467,16 +485,11 @@ plates. Upon completion all kinds of learning and data sets could be created. ...@@ -467,16 +485,11 @@ plates. Upon completion all kinds of learning and data sets could be created.
%maar miss is dit hele ding wel overbodig Ik dacht dat Rein het zei tijdens %maar miss is dit hele ding wel overbodig Ik dacht dat Rein het zei tijdens
%gesprek van ik wil weten hoe het ging enzo. %gesprek van ik wil weten hoe het ging enzo.
\subsection{How it went} \subsubsection*{How it went}
Sometimes one cannot hear the alarm bell and wake up properly. This however was Sometimes one cannot hear the alarm bell and wake up properly. This however was
not a big problem as no one was afraid of staying at Science Park a bit longer not a big problem as no one was afraid of staying at Science Park a bit longer
to help out. Further communication usually went through e-mails and replies to help out. Further communication usually went through e-mails and replies
were instantaneous! A crew to remember. were instantaneous! A crew to remember.
\section{Conclusion}
Awesome
\end{document} \end{document}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment