通过删除特殊字符改进 Tesseract OCR 结果

Posted

技术标签:

【中文标题】通过删除特殊字符改进 Tesseract OCR 结果【英文标题】:Improve Tesseract OCR results by removing special characters 【发布时间】:2017-09-22 00:55:22 【问题描述】:

我正在对保存在我的数据库中的一些pdfimagetiff 文件进行tesseract 转换。但是在这样做的同时,我从各种文件中得到了很多垃圾文本输出。例如,在这种情况下,图像给了我以下文本输出。

“‘55“ .'Hï¬ï¬jï¬tï¬tf‘N‘Dfli’iisifagï¬'aï¬ffl‘rfé-wt-“ï¬â€˜-:-'!W',fl':ï¬fm:afJuirzv-int'g-v "3.0:†_‘ l 1: v .w 

From:Beaver Medical Internal Med. 909 797 8922 06/28/2016 11:24 #946 RODS/006 

如您所见,它在开头添加了一些额外的特殊字符。

只想知道是否有任何控制参数可以从输出中删除此类特殊字符,因为许多输入文件都会发生这种情况。

注意:这不是原始图像,这只是我正在转换为文本的pdf屏幕截图的一部分,并且输出是原始输出的一部分。

我的问题与 Limit characters tesseract is looking for 不相似,因为该问题是为了忽略字母以外的内容,但在我的情况下,输出文本中有一些不需要的字母、数字,我需要在使用 @987654330 后将其删除@我在输出文本的开头仍然收到错误的文本he fhawfyhftiwlwwfuisipgkggfawfarwtwofrrletitwtfilfmjafgurrwsnnve mania a i v a an,它也删除了数字。所以只想问有没有什么办法可以去掉开头出现的这些不需要的字母、特殊字符、数字。

【问题讨论】:

Limit characters tesseract is looking for的可能重复 @sashoalm 这样做后我得到了这个,他 fhawfyhftiwlwwfuisipgkggfawfarwtwofrrletitwtfilfmjafgurrwsnn *** a i v a izromrseaver 医疗内部倾斜 sos min seaa oslaelaoie urea asses ptoosloos 数字消失了。我还想要数字可以做什么,还需要删除不需要的文本,例如他 fhawfyhftiwlwwfuisipgkggfawfarwtwofrrletitwtfilfmjafgurrwsnn‌​ve mania a i v a an from starting. 我也尝试在配置中添加这个 tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz0123456789@. ,但输出是 h5g11hwvwhfvt7713fybcfuisiwiggfiwfarwtrtnifrrleiixwtfhfmjafguiuwginnve mam.u a 5 1r v .w lzromrseaver medical internal tilled. 909 797 8922 0612812016 11124 91946 p.0051006 ,所以仍然存在问题。你能帮忙吗? @VibhorBhatnagar 此文本 - From:Beaver Medical Internal Med. 909 797 8922 06/28/2016 11:24 #946 RODS/006 - 来自上述问题的 tesseract 输出除了垃圾字符的引导线吗?如果是这样,看起来OCR 的准确性仍然需要提高,因为仍然识别出一些不正确的字符? @thewaywewere 是的,此文本是tesseract 输出以及垃圾字符的引导行。在这种情况下可以做什么? 【参考方案1】:

在 tessdata/configs 目录中创建一个配置文件(例如“字母”) - 通常是 /usr/share/tesseract/tessdata/configs/usr/share/tesseract-ocr/tessdata/configs

并将这一行添加到配置文件中:

tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz  

...或者也许 [a-z] 有效.. 不知道 :-) 然后调用 tesseract 类似这样:

tesseract input.tif output nobatch letters  

这将限制 tesseract 只识别想要的字符

【讨论】:

"tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz" 将只包括字母,然后它会忽略数字?在这个“tesseract input.tif output nobatch letters”上,“nobatch”指的是什么? 在这样做之后,我得到了这个he fhawfyhftiwlwwfuisipgkggfawfarwtwofrrletitwtfilfmjafgurrwsnnve mania a i v a an izromrseaver medical internal tilted sos min seaa oslaelaoie urea arses ptoosloos 数字消失了。我还想要数字可以做什么,还需要从开始删除不需要的文本,如he fhawfyhftiwlwwfuisipgkggfawfarwtwofrrletitwtfilfmjafgurrwsnnve mania a i v a an 也不是我必须删除特殊字符,只是想删除输出文本中较早出现的不需要的特殊字符 我也尝试在配置中添加这个 tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz0123456789@. ,但输出是 h5g11hwvwhfvt7713fybcfuisiwiggfiwfarwtrtnifrrleiixwtfhfmjafg‌​uiuwginnve mam.u a 5 1r v .w lzromrseaver medical internal tilled. 909 797 8922 0612812016 11124 91946 p.0051006 ,所以仍然存在问题。你能帮忙吗? 你可以写一个python脚本来删除不需要的carachters,如果你不知道怎么做,我可以为你写@VibhorBhatnagar。

以上是关于通过删除特殊字符改进 Tesseract OCR 结果的主要内容,如果未能解决你的问题,请参考以下文章

使用模糊文本改进 Tesseract OCR 结果

Tesseract-OCR 安装中文识别与训练字库

Tesseract OCR:如何找到每个返回字符的读取错误大小?

Tesseract OCR 不会忽略黑名单字符

使用 Tesseract OCR 进行汉字识别

是否可以使用 Tesseract OCR 识别 iPhone 屏幕上绘制的字符?