在iPhone上绘画

5

我正在尝试开发一款适用于儿童的iPhone应用程序,能够通过触摸屏幕绘制字符。我想知道如何将绘制的字符与字母表中的标准字符进行匹配。我该如何比较两个形状(绘制和已有的)呢? 有任何想法吗?

需要一些代码吗?


你找到解决方案了吗? - PVCS
3个回答

3

使用GLGestureRecognizer,您可以创建一个目录,并计算预定义的“字母表”与输入点数组之间的度量。

GLGestureRecognizer是$1 Unistroke Recognizer的Objective-C实现,是一种简单的手势识别算法(请参见下面的Credits)。它以iPhone应用程序项目的形式在此提供。它是由Adam Preble于2009年4月底的几个晚上实现的。

提供了演示iPhone项目(Gestures.xcodeproj);UIView子类接收触摸事件并将其发送到GLGestureRecognizer类,同时以白色绘制触摸路径。完成手势后,显示重新采样的手势为绿色,其中心为红点,以及最佳匹配的名称、分数(越低越好)和手势方向。在示例中使用了16个点的样本大小,这似乎对于非常基本的形状是足够的。


非常酷,它可以很好地重新创建您的手势。它很容易用于字母表。 - iwasrobbed

1

哇,这听起来是一项艰巨的任务。我脑海中想到的一个可能是使用支持向量机。

1.) 生成绘画的图像并通过附加矢量到用户所绘制的路径上“矢量化”它。

2.) 您需要支持向量进行比较。我会实现一个“训练应用程序”。让一些孩子画画(例如10次A,10次B等),将矢量放入数据库,并将它们用作支持向量。

3.) 您需要一个评分算法,通过将其与支持向量进行比较来评估用户绘图(这可能是其中最有趣的部分)。我可以考虑测量支持向量开始和结束点到绘制向量的距离。具有最小距离的SVM是您要采用的字母。然后,您可以引入一个距离作为“边界”,将所有在此边界之上的用户绘图视为未识别。

第二种方法可能是您生成带有字母的图像(例如白色背景和黑色字母(非反锯齿))。您再次生成用户绘图的图像,并将其调整大小以与要比较的图像完全“重叠”。然后计算两个图像中匹配的黑色像素,并采用匹配最多的字母。

但是,自从我实现了类似的东西后,我可以告诉你,SVM方法更令人满意,因为如果结果不够好,你可以添加支持向量。当然,精髓肯定是你的评分算法。

无论如何,听起来需要几周的工作。

编辑:由于这是一个有趣的领域,我进行了一些研究,并找到了一篇关于手写识别的论文。请看这个链接:http://risujin.org/cellwriter/。它基本上描述了我提到的SVM方法,并提供了一些可能对你有帮助的算法。


0

你可以尝试使用手势识别,但对于这样的自定义场景来说可能会比较困难。

否则,你可能会在Quartz中找到至少部分解决方案。我很想看看你是如何解决这个问题的...听起来是一条相当困难/有趣的道路。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接