我一直在开发一个涉及基于Android Canvas中用户免费手绘字符的字体识别的应用程序。
在此应用程序中,要求用户以预定义的顺序*Edition
输入一些预定义的字符。基于此,有没有办法显示与用户手写相匹配的非常相似的字体。
我研究过这个主题发现了一些论文和文章,但大多数都是从捕获的图像识别字体。在这种情况下,他们通过分段,单个字母等来解决很多问题。但在我的场景中,我知道用户正在绘制什么字母。
我对OpenCV和机器学习有一定的了解。需要有关如何解决此问题的帮助。
答案 0 :(得分:2)
我不清楚你想用你的应用程序完成什么,但我认为你试图从与用户手写最匹配的字体数据库输出字体。
在机器学习中,这将是一个分类问题。 类的数量将等于数据库中不同字体的数量。
您可以在Convolutional neural network的帮助下解决此问题,Torch Homepage广泛用于图像和视频识别相关任务。如果您之前从未实施CNN,我建议您查看此资源以了解Torch
这是一个易于启动的工具包来实现CNN。 (当然还有更多的框架,例如:Tensor Flow
,Caffe
,Lasagne
,...)
您将面临的主要障碍是神经网络需要数千张图像(>100.000)
来正确训练它们并获得令人满意的结果。此外,您不仅需要图像,还需要每个图像的正确标签。请问,您需要一个训练图像,如手写字符和与数据库匹配最多的相应字体作为标签。
我建议您阅读所谓的GPU,它可以为您提供初步提升,因为您不需要自己完全设置CNN模型。此外,人们有pre-trained
这样的模型用于相关任务,这样您就可以安全地获得额外的时间,因为您不需要在CUDA上训练它多个小时。 (见How transferable are features in deep neural networks?)
一个很好的资源可以从论文开始:Artificial Characters Data Set,这可能有助于说明原因。
要获得大量的培训和测试数据,您可以查找以下开放数据集,这些数据集提供了对您的任务有帮助的所有类型的字符:
要访问大量字体,甚至可能自己创建更多数据集,可以查看{{3}}。
答案 1 :(得分:0)
您可能会发现这篇文章非常有趣:https://erikbern.com/2016/01/21/analyzing-50k-fonts-using-deep-neural-networks/
似乎是一个非常简单的深度学习监督学习问题。
为每种目标字体类型的字母生成大量随机变形的样本,并在该集上训练一个小天使?
理想的情况是拥有大量带标签的手写字体数据,但感觉不太可能。
您还可以使用生成的渐进式字体代码来获取一堆手写样本,并将其转换为更像您选择的字体,作为数据集。
这是一个很好的起点:https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py 用convnet进行数字字母识别。
如果你以前没有使用过这些东西,这是相当多的工作。
答案 2 :(得分:-1)
我建议使用OCR库tesseract。非常发达和成熟。它还支持使用其他语言进行培训,您可以使用这些语言训练一组字体。
<强>方法强>
训练: -
测试: -