Disclaimer:
I'm nearing the end introductory machine course so knowledge on the subject is not too strong (yet)!
Context:
I'm thinking of building an optical word search solver for a term project for the said class. The user will draw a box around the character matrix and then it's the job of the program to classify the characters.
This question is only concerned about classifying the characters of the character matrix of a word search. Assume the characters of the matrix are separated into their own images and will be classified individually. This means:
- there are exactly 26 classes--the letters from A to Z
- each character image is from a font meaning nothing is hand written
Data:
I'll be generating data straight from fonts and saving each character as a bitmap with only black and white pixels. These images are the ones that will be used to classify the characters of the word search.
Now Here's the Question:
What's a better classifier for this task?
In particular, I'm having trouble choosing between two different classifiers:
- k-Nearest Neighbors (KNN)
- Support Vector Machines (SVMs)
It may be naive to consider KNN but I do know that KNN performs well when there are a lot of examples and low dimensionality. It seems easy to get generate a bunch of examples of different fonts, and I can even classify the kind of font before classifying the letter to narrow the dataset first (serif, sans then lowercase, uppercase). My concern here lies with coming up with a transformation to a lower dimensional space.
On the other hand, I've heard SVMs perform much better in higher dimensional space and are less susceptible to outliers. I don't understand SVMs to the extent of KNN so any input on this would be helpful (Unlike KNN, I haven't implemented SVMs before).
Hmm... I guess the real question is: Can I get away with KNN instead of SVMs for OCR in word searches? What performance (error %) should I expect?
One last note: computational time matters in how I'll be separating the characters of the word search into different images. All I really need to know concerning this is what method is less computationally intensive given the way I'll be generating examples.
Thank you so much for any help!