我正在尝试为儿童开发一个iPhone应用程序,它可以通过触摸在屏幕上绘制字符,我想知道如何匹配字母表中良好字符所绘制的字符。我将如何比较两种形状(绘图和现有) 任何的想法?? 一些代码?
答案 0 :(得分:3)
Using GLGestureRecognizer您可以创建目录,它将计算输入点数组与您预定义的“字母”之间的指标。
GLGestureRecognizer是Objective-C 执行$ 1 Unistroke 识别器,一个简单的手势 识别算法(见Credits 下面)。它在这里提供 iPhone应用程序的形式 项目。它是在实施的 晚上几个晚上的课程 2009年4月,Adam Preble。
一个演示iPhone项目 (Gestures.xcodeproj)提供;一个 UIView子类接收触摸事件 并将它们发送给 GLGestureRecognizer类同时 用白色绘制触摸的路径。 一旦手势完成, 重新采样的手势以绿色显示, 它的中心位于红点上 最佳匹配的名称,得分 (越低越好)和手势 取向。样本量为16 在示例中使用了点,其中 似乎足够基本 形状。
答案 1 :(得分:1)
1。)生成图形图像,并通过将矢量附加到用户绘制的路径来“矢量化”它。
2.。)您需要支持向量进行比较。我要做的是,实施“培训申请”。让一些孩子画(例如,A的10倍,B的10倍,等等),将矢量放在数据库中并将它们用作支持向量。
3。)您需要一种评级算法,通过将用户绘图与支持向量进行比较来评估用户绘图(这可能是其中最有趣的部分)。我可以考虑测量支持向量起点和终点与绘制向量的距离。距离最短的svm就是你的字母。然后,您可能会引入一个距离,即“边框”,并将此边框上方的所有用户绘图视为无法识别。
第二种方法可能是您使用字母生成图像(例如,白色背景和黑色字母(非抗锯齿))。您再次生成用户绘图的图像并将其调整大小以与图像进行比较,尝试完全“重叠”它。然后计算两个图像中匹配的黑色像素,并取出匹配最多的字母。
但是,由于我实现了类似的东西,我可以说svm方法更令人满意,因为如果结果不够好你可以添加支持向量。国粹是确定您的评级算法。
无论如何听起来像是几周的工作。
编辑:由于这是一个有趣的领域,我做了一些研究,并找到了关于手写识别的论文。看看这个:http://risujin.org/cellwriter/。它基本上描述了我提到的svm方法,并给出了一些可能对你有帮助的算法。答案 2 :(得分:0)
您可以随时使用Gesture Recognition ...但这对于像这样的自定义方案来说非常困难。
否则,您可能会在Quartz中找到至少可以为您完成部分内容的内容。我很想知道你如何解决这个问题......这听起来像是一条相当困难/有趣的道路。