12

我想看看是否可以扫描课程的签到表。好消息是我知道 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 的距离匹配会起作用,但其余的甚至不接近。

我可以控制我的签到表,但不能控制进来的人的笔迹,所以如果我可以做任何更改以提供帮助,请告诉我。

4

1 回答 1

0

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

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

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

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

于 2017-11-19T00:49:32.363 回答