我认为有一些算法可以评估绘制符号与预期符号之间的差异,或类似的东西。任何帮助将不胜感激:))
答案 0 :(得分:8)
您可以实现简单的神经网络来识别手写数字。最简单的实现类型是通过反向传播训练的前馈网络(可以随机训练或以批处理模式训练)。您可以对反向传播算法进行一些改进,这将有助于您的神经网络更快地学习(动量,席尔瓦和阿尔梅达的算法,模拟退火)。
就查看真实符号和预期图像之间的差异而言,我见过的一种算法是k-nearest-neighbor algorithm。 Here是一篇描述使用 k - 最近邻算法进行字符识别的文章(编辑:我之前的链接错误。我提供的链接要求你支付报酬;我正在努力寻找论文的免费版本。
如果您使用神经网络识别您的角色,所涉及的步骤将是:
您可以查看尝试识别手写数字的示例here(无耻插件)。我使用来自MNIST的数据训练了网络。
如果你决定走这条路,那么期待花一些时间让自己加快神经网络的概念。在我真正理解这个概念之前,我花了至少3-4天的时间阅读和编写代码。一个好的资源是heatonresearch.com。我建议首先尝试实现神经网络来模拟AND,OR和XOR布尔运算(使用阈值激活函数)。这应该让您了解基本概念。当它真正归结为训练你的网络时,你可以尝试训练一个识别XOR布尔运算符的神经网络;这是开始学习算法的好地方。
在构建神经网络时,您可以使用Encog之类的现有框架,但我发现自己构建网络要更加令人满意(您可以通过我的方式了解更多)。如果您想查看某些来源,可以查看我在github(无耻插件)上的项目,该项目包含一些Java基础类,可帮助您构建和训练简单的神经-networks。
祝你好运!修改强>
我发现了一些使用 k - 最近邻居进行数字和/或字符识别的来源:
对于神经网络的资源,我发现以下链接很有用:
答案 1 :(得分:2)
的附录强> 的
如果您尚未实施机器学习算法,请务必查看:www.ml-class.org
这是斯坦福机器学习中心主任Andrew Ng教授的免费课程。该课程是一门完全在线授课的课程,专门用于实施各种机器学习算法。它不会过多地涉及算法的理论复杂性,而是教你如何选择,实现,使用算法以及如何诊断它们的性能。 - 它的独特之处在于自动检查算法的实现!这对于开始机器学习很有帮助,因为你有即时反馈。
该课程还包括至少两个关于识别手写数字的练习。 (编程练习3:使用多项式分类和编程练习4:使用前馈神经网络)
该课程已经开始了一段时间,但它仍然可以注册。如果没有,新的运行应该在明年初开始。如果您希望能够检查您的实施,则需要注册“高级跟踪”。
实现手写识别的一种方法
这个问题的答案取决于许多因素,包括你拥有什么样的资源限制(嵌入式平台)以及你是否有一个好的正确标记符号库:即你知道的手写字母的不同例子他们代表什么信。
如果你有一个像样的大小库,那么快速而肮脏的标准机器学习算法的实现可能就是你要走的路。您可以使用多项分类器,神经网络或支持向量机。
我相信支持向量机的实施速度最快,因为有很好的库可以为你处理代码的机器学习部分,例如: libSVM。如果您熟悉使用机器学习算法,则执行时间不到30分钟。
您可能希望实施的基本程序如下:
了解“看起来像”的符号
您应该为要识别的每个字符重复1-4,以获得一组适当的模型参数。
注意:步骤1-4您只需为您的库执行一次(但对于您想要识别的每个符号,只需执行一次)。您可以在开发人员计算机上执行此操作,并仅在您发布/分发的代码中包含参数。
如果您想识别符号:
每组模型参数都描述了一种算法,该算法测试一个角色是否代表一个特定角色。通过使用当前符号测试所有模型,然后选择最适合您正在测试的符号的模型,“识别”一个角色。
通过再次将模型参数和符号传递给展开的SVM库来完成此测试,该库将返回测试模型的拟合优度。
答案 2 :(得分:2)
你检查过Detexify吗?我认为它几乎可以满足您的需求 http://detexify.kirelabs.org/classify.html
它是开源的,所以你可以看看它是如何实现的。 你可以从这里得到代码(如果我不记错了,它在Haskell中) https://github.com/kirel/detexify-hs-backend
特别是你要找的是Sim.hs
我希望它有所帮助