计算字符之间的距离

时间:2014-01-20 19:04:10

标签: regex string parsing ocr

问题:我有大量扫描的文档链接到数据库中的错误记录。每个图像上都有正确的ID,表明它在db中的位置。

即。数据库行可以是:

| user_id | img_id | img_loc |
|  1      |   1    | /img.jpg|

img.jpg会在某处的图像上显示user_id(1)。

方法/解决方案:遍历数据库。使用OCR将图像文本拉入变量,并检查变量中的任何位置是否找到user_id。如果没有,请在日志中标记记录/图像,如果不这样做则继续。继续。

我的例子很简单,在现实世界中,我保证user_id不会意外地显示在错误的表单上(它具有特定的格式,具有其自身的意义)

现在它正在运作。但是,它非常严格。如果你使用过OCR,你就会明白它是多么的善变。有时7 = 1或9 = 7等。结果是大量误报。特别是在低质量扫描图像中。

我已经通过一些处理来解决一些图像质量问题 - 增加图像尺寸,调整黑/白阈值并获得令人满意的结果。我想为prog添加识别能力,例如,“81 * 7 * 23103”离“81 * 9 * 23103不是很远“

我知道如何做的唯一方法是检查字符串> =到我正在寻找的长度。计算每个字符之间的距离,计算平均值并对平均值进行限制。

一些例子:

Ex 1

81723103 - Looking for this
81923103 - Found this
-------- 
00200000 - distances between characters

0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 = 2

2/8 = .25 (pretty good match. 0 = perfect)

Ex 2

81723103 - Looking 
81158988 - Found
--------
00635885 - distances

0 + 0 + 6 + 3 + 5 + 8 + 8 + 5 = 35

35/8 = 4.375 (Not a very good match. 9 = worst)

通过这种方式,我可以告诉它“仅将底部标记为30%”并转储平均距离为>的任何内容。 6。

我想我正在重新发明轮子,并希望分享这一点以获得反馈。我看到运行时间的大幅增加以及在我正在进行的所有这些字符串操作上的性能损失。

0 个答案:

没有答案