我正在写一个Android应用程序,从图片中提取数独谜题。 在9x9的数独网格中的每个单元,我需要确定它是否包含的数字1一个贯通9或为空。 我开始与数独是这样的:
我预先处理独用的OpenCV提取个别数字的黑色和白色图像,然后把它们通过正方体 。 有几个限制正方体,虽然的:
- 正方体是大,包含了很多功能我不需要(即全文识别),并要求以功能的英语语言培训课程的数据,我认为已经去到设备的SD卡。 至少我可以告诉它只能寻找利用数字
tesseract.setVariable("tessedit_char_whitelist", "123456789");
- 超正方体经常曲解一个位数为一个数字串,常含换行符。 它有时也只是简单的得到它错了。 下面是数独上述几个例子:
我有三个问题:
- 有没有什么办法可以克服的Tesseract的限制?
- 如果没有,什么是检测单个数字的有用, 准确的方法(不是k近邻),这将是在Android中是可行的-这可能是一个免费的图书馆或DIY解决方案。
- 我怎样才能提高预处理来定位的方法? 一种可能性,我认为是利用细化算法,通过所建议的这个帖子 ,但我不会去打扰实现它,除非它会有所作为。
我把一类具有一个计算机视觉的超级巨星谁是/是在数字识别算法排名第一的。 他真的坚持认为做数字识别的最好办法是...
1. Get some hand-labeled training data.
2. Run Histogram of Oriented Gradients (HOG) on the training data, and produce one
long, concatenated feature vector per image
3. Feed each image's HOG features and its label into an SVM
4. For test data (digits on a sudoku puzzle), run HOG on the digits, then ask
the SVM classify the HOG features from the sudoku puzzle
OpenCV的具有HOGDescriptor
对象,其计算HOG特征 。 请看本文为咨询如何调整你的HOG特征参数。 任何SVM库应该做的工作......在CvSVM
自带的OpenCV的东西应该罚款。
对于训练数据,我建议使用MNIST手写数字数据库 ,其中有数以千计的与地面实况数据的数字图片。
稍硬的问题是周围绘制自然出现数字的边框。 幸运的是,它看起来像你已经找到做边框的策略。 :)
最简单的办法就是用标准化中心矩的数字识别。 如果你有一字型(或非常相似的字体,它的工作好)。
看到这个解决方案: https://github.com/grzesiu/Sudoku-GUI
在核心有事情负责数字识别,提取,瞬间培训。 第一次运行应用程序操作者必须提供被认为是几号的信息。 然后图像(提取正方形ROI)的时刻被分配给编号(操作者输入)。 应用基础上进行比较的时刻。
这里第一个YouTube影片中展示了应用程序是如何工作的: http://synergia.pwr.wroc.pl/2012/06/22/irb-komunikacja-pc/