我想看看我是否可以扫描一个班级的登录表。好消息是我知道可能写的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
我认为它不像第2行,因为我走到了线下。
我得到的结果是:
1.. AM: (harm;
l. ’E (J 22 a 00k
2‘ wau \\) [HQ
4. KIM TAYLOE
5. LN] Davis
6‘ Mzflé! Ha K
显然不是最好的,我的猜测是4&的距离匹配。 5会起作用,但其余的都不会接近。
我控制了我的登录表,但没有人员的笔迹,所以如果有任何改变,我可以帮忙,请告诉我。
答案 0 :(得分:6)
Microsoft为handwritten text提供OCR API(向下滚动页面,不标准文本ocr api):
预览:从图像中读取手写文本 这项技术(手写OCR)允许您从笔记,字母,散文,白板,表格等中检测和提取手写文本。它适用于不同的表面和背景,如白纸,黄色便签和白板。
手写文本识别功能可以节省时间和精力,并且可以让您拍摄文本图像,而不必转录文本,从而提高工作效率。它可以对笔记进行数字化,从而使您可以快速轻松地进行搜索。它还可以减少纸张杂乱。
注意:此技术目前处于预览状态,仅适用于英文文本。
要尝试此光学字符识别演示,请上传本地存储的图像或提供图像URL。除非您允许,否则我们不会存储您为此演示提供的图像。
编辑:这是我的测试结果,它对您的输入数据几乎完美:
答案 1 :(得分:0)
由于你的目标只是获取名字 - 我建议你将tessedit_char_whitelist
缩减为英文字母(“ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.
”),这样你就不会得到你不期望的字符输出如\\) [
。
如果您成功从手写图像中提取文本(这对于tesseract来说是一项艰巨的任务),那么计算L距离的初始方法就可以了。
我还建议对你的图像进行一些预处理。例如,您可以删除水平线并提取它们周围的文本ROI。在最好的情况下,您将能够提取分离的字符,但即使您不这样做 - 您将获得更好的结果&将能够“逐行”区分结果名称。
您还应该尝试其他推荐的输出质量改进阶段,您可以在Tesseract OCR wiki(link)中找到