如何转换/匹配手写的名单?(HWR)

Joe*_*lio 12 ocr tesseract handwriting-recognition

我想看看我是否可以扫描一个登录表.好消息是我知道可能写的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的距离匹配会起作用,但其余的都不是很接近.

我控制了我的登录表,但没有人员的笔迹,所以如果有任何改变,我可以帮忙,请告诉我.

Dmi*_* Z. 0

由于您的目标是仅获取名称 - 我建议您减少tessedit_char_whitelist为英文字母(“ ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.”),这样您就不会得到您不希望作为输出的字符,例如\\) [.

如果您成功地从手写图像中提取文本(这对于超正方体来说是一项艰巨的任务),那么您计算 L 距离的初始方法就很好。

我还建议对您的图像进行一些预处理。例如,您可以删除水平线并提取其周围的文本 ROI。在最好的情况下,您将能够提取分隔的字符,但即使您不这样做 - 您也会得到更好的结果,并且能够“逐行”区分结果名称。

您还应该尝试其他推荐的输出质量改进阶段,您可以在 Tesseract OCR wiki 中找到这些阶段(链接