C# 改进OCR/图像识别的预处理

C# 改进OCR/图像识别的预处理,c#,image,image-processing,captcha,ocr,C#,Image,Image Processing,Captcha,Ocr,目前我对图像处理和光学字符识别有很大的兴趣。经过一些基本的识别和筛选,我决定开始做一些更困难的事情 我试图从这些CAPTCHA中读取值: 我编写了一些用于预处理的过滤器: -替换颜色(为白色) 删除蓝线 删除贯穿文本的行(两行) -阈值图像(255) Wich输出这样的图像; 正如你所看到的,有些字母上有洞。我首先想也许最好是在字母中间留下一行字,但那会让事情变得更糟。我正在使用tesseract OCR引擎 我用大象字体(captcha使用的字体)训练它。我也试过了 使用其他OCR引擎,如

目前我对图像处理和光学字符识别有很大的兴趣。经过一些基本的识别和筛选,我决定开始做一些更困难的事情

我试图从这些CAPTCHA中读取值:

我编写了一些用于预处理的过滤器: -替换颜色(为白色) 删除蓝线 删除贯穿文本的行(两行) -阈值图像(255)

Wich输出这样的图像;

正如你所看到的,有些字母上有洞。我首先想也许最好是在字母中间留下一行字,但那会让事情变得更糟。我正在使用tesseract OCR引擎 我用大象字体(captcha使用的字体)训练它。我也试过了 使用其他OCR引擎,如GOCR,但这会让一切变得更糟。有了tesseract,我现在有了20%的认知度。我正在用C#(.NET4.0)编写代码

验证码由名为PHPCaptcha的软件包生成

现在我的问题是: 是否有任何算法或记号来填补字母中的漏洞?还有没有其他办法获得更好的认可

我很高兴收到你们的来信:)

您好,


第0部分-前言


i) 在此之前,您可能需要阅读我的OCR相关答案,这可能会为您提供一些使用tesseract的技巧

ii)我假设您可以将所有内容都转换为黑白(在您的情况下,彩色处理不会给您带来优势)


第1部分-预处理


在你移除蓝线后填补“漏洞”。您可以随时扩张或执行“先扩张后侵蚀”操作。在这里,放大意味着在8个方向上放大每个像素(使像素变大)。放大像素后,看看是否可以识别它们,或者看看字符是否“过满”(放大太多)。如果字符无法识别或字符扩展过多,则可以应用腐蚀操作。当然有高级的合成算法,但我认为最好先从一个简单的图像处理操作开始


第2部分-OCR/Tesseract



使用Tesseract,如果要将整个图像馈送到Tesseract,它将执行线分析等等。由于captcha中的字符行为与普通文本不同,因此进行行分析或在一组中识别字符可能会在一定程度上降低识别率。因此,我的建议是先按字符逐个识别

考虑到遮挡线的厚度,可能有必要使用对部分遮挡(基于字符映射的内容)具有鲁棒性的字符匹配算法。由于遮挡会显著改变形状的轮廓,因此预处理很难“改善”字符的状况。其中一个困难是“大象”字体的笔划很粗也很细。删除细笔划将删除区分单个字符的区分功能。对不起,我忘了提到我已经编写并尝试过腐蚀和膨胀过滤器,但效果很小。你们还有更多的信息合成算法吗?Perphaps提供了一些代码示例(任何语言?)。关于tesseract:问题是如何从图像中抓取角色。他们从不在同一个地方。当我试图用tesseract识别其中一个验证码时,我在图像上绘制矩形,以显示tesseract如何识别字符。通常它会将两个字符视为一个。@Gary Tsui您能添加一个指向您所指的合成算法的链接吗?谷歌给了我语音合成和声波结果。