我认为有一些算法可以评估绘制的符号与预期符号之间的差异,或者类似于这样的算法。任何帮助都将不胜感激 :))
我认为有一些算法可以评估绘制的符号与预期符号之间的差异,或者类似于这样的算法。任何帮助都将不胜感激 :))
您可以查看一个示例此处 (自荐),尝试识别手写数字。我使用MNIST的数据训练了网络。
如果您决定选择这条路线,请预留一些时间来了解神经网络概念。在我真正理解该概念之前,我花了至少3-4天的时间阅读和编写代码。heatonresearch.com是一个很好的资源。我建议先尝试实现神经网络以模拟AND、OR和XOR布尔运算(使用阈值激活函数)。这应该会给您一个基本概念。当您真正开始训练网络时,您可以尝试训练一个识别XOR布尔运算符的神经网络;这是一个介绍学习算法的好起点。
当涉及到构建神经网络时,您可以使用现有的框架,比如Encog,但我发现自己构建网络会更加令人满意(我认为这样可以学到更多)。如果您想查看一些源代码,可以查看我在github上的一个项目(自荐),其中包含一些Java基本类,可帮助您构建和训练简单的神经网络。
祝你好运!
编辑
我找到了一些使用k-最近邻算法进行数字或字符识别的资料:
关于神经网络的资源,我发现以下链接很有用:
附录
如果您以前没有实现过机器学习算法,建议您查看:www.ml-class.org
这是由斯坦福大学机器学习中心主任Andrew Ng教授的免费课程。该课程完全在线授课,专门讲解各种机器学习算法的实现。它不会深入讲解算法的理论细节,而是教你如何选择、实现和使用算法,并诊断其性能。 - 它独特之处在于自动检查你对算法的实现!对于初学机器学习的人来说,可以获得即时反馈。
该课程还包括至少两个识别手写数字的练习。(编程练习3:使用多项式分类和编程练习4:使用前馈神经网络)
这门课程已经开始一段时间了,但仍然有可能注册。如果不行,新一轮课程应该会在明年初开始。如果你想检查你的实现,你需要注册“高级课程”。
一种实现手写识别的方法
这个问题的答案取决于许多因素,包括您有哪些资源限制(嵌入式平台)以及是否有一个正确标记符号的良好库:即不同手写字母的示例,你知道它们代表什么字母。
如果你有一个相当大的库,实现一个快速而简单的标准机器学习算法可能是最好的选择。你可以使用多项式分类器、神经网络或支持向量机。
我认为支持向量机是最快实现的方法,因为有很好的库能够处理代码中的机器学习部分,例如libSVM。如果你熟悉使用机器学习算法,这应该只需要不到30分钟就能完成。
你可能想要实现的基本过程如下:
学习符号的外观
您应该为要识别的每个字符重复步骤1-4,以获得适当的模型参数集。
注意:步骤1-4只需要对库中的符号执行一次(但对于您想要识别的每个符号都要执行一次)。您可以在开发机器上执行此操作,并仅将参数包含在您发布/分发的代码中。
如果您想要识别一个符号:
每组模型参数描述了一个算法,该算法测试一个字符是否代表一个特定的字符。通过测试所有模型并选择最适合正在测试的符号的模型来“识别”字符。