有没有好的手写识别API来帮助在Android平台上开发应用程序?Google已发布(2012年7月左右http://www.google.com/insidesearch/features/search/handwritinginput/index.html)一项功能,使用手写功能在触摸屏设备中进行搜索,看起来很棒,是否有可能获得访问这些API以便在Android应用中使用?
我想看看我是否可以扫描一个登录表.好消息是我知道可能写的90%的名字.
我的想法是使用tessaract来解析名称的图像,然后使用Levenshtein算法将每一行与我的数据库中的名称列表进行比较,如果我得到合理的近似匹配,则该名称是正确的.
这种方法听起来不错吗?如果没有,其他想法?
我尝试在样本表上使用tesseract(见下文)
我用了:
tesseract simple.png -psm 4 outtxt
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
Warning. Invalid resolution 0 dpi. Using 70 instead.
Error in boxClipToRectangle: box outside rectangle
Error in pixScanForForeground: invalid box
Run Code Online (Sandbox Code Playgroud)
我假设它不喜欢第2行,因为我走到了线下.
我得到的结果是:
1.. AM: (harm;
l. ’E (J 22 a 00k
2‘ wau \\) [HQ
4. KIM TAYLOE
5. LN] Davis
6‘ Mz?é! Ha K
Run Code Online (Sandbox Code Playgroud)
显然不是最好的,我的猜测是4和5的距离匹配会起作用,但其余的都不是很接近.
我控制了我的登录表,但没有人员的笔迹,所以如果有任何改变,我可以帮忙,请告诉我.
我正在尝试使用python和opencv构建一个手写识别系统.字符的识别不是问题,而是分割.我成功了:
但我无法在文档中分割不同的行.我尝试对轮廓进行排序(以避免线分割并仅使用分词),但它不起作用.我使用以下代码来分割手写文档中包含的单词,但它返回不按顺序的单词(它以从左到右的排序方式返回单词):
import cv2
import numpy as np
#import image
image = cv2.imread('input.jpg')
#cv2.imshow('orig',image)
#cv2.waitKey(0)
#grayscale
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
cv2.waitKey(0)
#binary
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow('second',thresh)
cv2.waitKey(0)
#dilation
kernel = np.ones((5,5), np.uint8)
img_dilation = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow('dilated',img_dilation)
cv2.waitKey(0)
#find contours
im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#sort contours
sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])
for i, ctr in enumerate(sorted_ctrs):
# Get bounding box
x, y, w, h = cv2.boundingRect(ctr)
# Getting ROI
roi = image[y:y+h, …Run Code Online (Sandbox Code Playgroud) 我正在考虑创建一个特定的Web系统.它涉及许多不同的(随机)人上传他们所写内容的扫描文档.
是否有任何PHP开源方式将这些手写文本转换为机器文本?
我发现了这个问题,但想知道它是否能够识别出很多随机和不同的人的写作?
有没有人有经验分享这个领域?
我已经使用 mnist 数据集用 keras 构建了一个神经网络,现在我正尝试将它用于实际手写数字的照片。当然,我并不期望结果是完美的,但我目前得到的结果还有很大的改进空间。
首先,我用一些用我最清晰的笔迹书写的单个数字的照片来测试它。它们是方形的,并且与 mnist 数据集中的图像具有相同的尺寸和颜色。它们保存在一个名为individual_test的文件夹中,例如:7(2)_digit.jpg。
网络通常非常确定错误的结果,我会给你一个例子:
我得到这张图片的结果如下:
result: 3 . probabilities: [1.9963557196245318e-10, 7.241294497362105e-07, 0.02658148668706417, 0.9726449251174927, 2.5416460047722467e-08, 2.6078915027483163e-08, 0.00019745019380934536, 4.8302300825753264e-08, 0.0005754049634560943, 2.8358477788259506e-09]
Run Code Online (Sandbox Code Playgroud)
所以网络有 97% 的把握确定这是一个 3,而这张图片并不是唯一的情况。在 38 张图片中,只有 16 张被正确识别。令我震惊的是,网络对它的结果如此确定,尽管它与正确的结果相差无几。
编辑
在为prepare_image ( img = cv2.threshold(img, 0.1, 1, cv2.THRESH_BINARY_INV)[1])添加阈值后,性能略有提高。它现在得到了 38 张图片中的 19 张正确,但对于包括上面显示的图片在内的一些图像,它仍然很确定是错误的结果。这就是我现在得到的:
result: 3 . probabilities: [1.0909866760000497e-11, 1.1584616004256532e-06, 0.27739930152893066, 0.7221096158027649, 1.900260038212309e-08, 6.555900711191498e-08, 4.479645940591581e-05, 6.455550760620099e-07, 0.0004443934594746679, 1.0013242457418414e-09]
Run Code Online (Sandbox Code Playgroud)
所以现在只有 72% 确定它的结果更好,但仍然......
我可以做些什么来提高性能?我可以更好地准备我的图像吗?还是应该将自己的图像添加到训练数据中?如果是这样,我将如何做这样的事情?
编辑
这是上面显示的图片在应用prepare_image之后的样子:
使用阈值后,这是同一张图片的样子:
对比:这是mnist数据集提供的其中一张图片:
他们看起来和我很相似。我该如何改进?
这是我的代码(包括阈值):
# import keras …Run Code Online (Sandbox Code Playgroud) 我正在寻找关于识别三种手写形状的一些建议 - 圆形,菱形和矩形.我尝试了不同的aproaches,但他们失败了所以也许你可以指出我在另一个更好的方向.
我尝试了什么:
1)基于手写形状和理想形状点之间的点积的简单算法.它在识别矩形方面并不是那么糟糕,但在圆形和钻石上失败了.问题是,即使对于理想的形状,圆形和菱形的点积也非常相似.
2)相同的方法,但使用动态时间扭曲作为相似性的度量.类似的问题.
3)神经网络.我尝试了一些方法 - 给神经网络(Feedforward和Kohonen)提供点数据或给出光栅化图像.对于Kohonen来说,它始终将所有数据(用于训练的样本)分类到同一类别.前馈与点较好(但在同级别的形式给出了1和2),并与栅格图像这是非常慢(我需要至少大小^ 2个输入神经元和小型光栅圆的没有什么区别,甚至对我来说;))也没有成功.我想是因为所有这些形状都是封闭的数字?我不是ANN的大专家(有一个学期的课程)所以也许我使用它们错了?
4)将形状保存为Freeman Chain Code并使用一些算法来计算相似度.我认为在FCC中,形状将彼此不同.这里没有成功(但我没有深入探索这条道路).
我正在使用这个为Android构建应用程序,但我认为这里的语言无关紧要.
我正在测试卷积神经网络上的打印数字(0-9).它在MNIST数据集上提供99%以上的准确率,但当我尝试使用安装在计算机上的字体(Ariel,Calibri,Cambria,Cambria math,Times New Roman)并训练字体生成的图像(每种字体104张图像(总计) 25种字体 - 每种字体4张图像(差别很小))训练误差率不低于80%,即准确率为20%.为什么?
这是"2"号图像样本 -
我将每张图像调整为28 x 28.
这里有更多细节: -
训练数据大小= 28 x 28图像.网络参数 - 作为LeNet5网络架构 -
Input Layer -28x28
| Convolutional Layer - (Relu Activation);
| Pooling Layer - (Tanh Activation)
| Convolutional Layer - (Relu Activation)
| Local Layer(120 neurons) - (Relu)
| Fully Connected (Softmax Activation, 10 outputs)
Run Code Online (Sandbox Code Playgroud)
这样可以在MNIST上实现99 +%的准确率.计算机生成的字体为何如此糟糕?CNN可以处理大量的数据差异.
ocr machine-learning image-recognition handwriting-recognition deep-learning
问题与传统的手写识别有点不同.我有一个数以千计的数据集.对于一个绘制的角色,我有几个顺序(x, y)坐标,其中笔被按下.所以,这是一个连续的(时间)问题.
我希望能够根据这些数据对手写字符进行分类,并希望为学习目的实现HMM.但是,这是正确的方法吗?他们如何习惯这样做?
machine-learning data-mining hidden-markov-models handwriting-recognition
我需要分析android手写识别SDK.谁能告诉我市场上有哪些SDK可用.我从VisionObjects 找到了MyScript,但我无法从SDK中找到任何下载链接,因为我需要测试才能看到准确性.
有人可以给我IAM手写数据库的训练数据文件,以便与tesseract一起使用.我需要.traineddata文件.
TL;DR:如何检测图像中是否存在笔迹?
我正在使用 Google 的 Python Vision API 扫描图像中的文本,结果通常很好。大多数情况下,图像包含印刷文本,但有时会包含手写内容。
如文档中所述,有时使用 document_text_detection 而不是标准的 text_detection API 调用可以获得更好的手写文本结果。我自己的测试支持这一点,但也表明标准 text_detection 调用通常最适合 JPEG 图像中的打印文本。
所以我想默认使用标准的 text_detection ,如果有手写,只通过 document_text_detection 运行图像。但是,我找不到一种可靠的方法来使用 Vision API 检测图像中是否存在手写文本。
我尝试了标签检测,但似乎没有用于手写的特定标签。偶尔它会吐出“书法”但不可靠。
有谁知道实现这一目标的方法?