Tesseract / OCR / OpenCV : 需要读取验证码
Tesseract / OCR / OpenCV : Need to read captcha
我正在尝试使用 magick 读取以下验证码图像,但到目前为止没有成功。我可以使用 magick 或 OpenCV 来解决这个问题。
所以,到目前为止,我已经尝试了腐蚀、高斯模糊和绘画功能,但在 tesseract 可以处理图像之前我仍然没有完全理解。
我也尝试过使用 tesseract 的字符白名单,但我想它需要一些东西才能使用那个白名单。
我达到的最好的是这张图片:
使用的命令:magick.exe c:\e793df3c-b831-11e6-88e4-544635854505.jpg -negate -morphology erode rectangle:1 -negate -threshold 25% -paint 1 c:\ofdbmf-2.jpg
不可能吗?
有兴趣的人:
有两种方法可以完成:
方法 #1:如果您有可用的验证码源
如果您已经有了可用的源,您可以查找源正在使用的字体。
在这个方法中,由于我们有源代码,我们可以尝试修改它以保存最多(可能超过 10,000)个验证码图像以及每个图像的预期答案。
您可以使用一个简单的“for”循环,将所有正确答案的图片保存为文件名。
这将是您的训练数据。
然后从这里开始,将图像拆分为每个字母,并将其引用回文件名中的字母,这样您将拥有多个以不同角度和形状创建的相同字母图像。您可以在此处使用 OpenCV Blob,然后对其进行阈值处理,然后进行轮廓查找。
你可能会在这里遇到的一个问题是你会有重叠的字母,因为这里的一个简单的 hack 是说如果一个轮廓区域比它的高度宽很多,这意味着我们可能有两个字母挤在一起。这样的话,我们就可以把连体字从中间一分为二,当作两个独立的字母来处理。
现在我们有了提取单个字母的方法,您可以 运行 它跨越所有验证码图像。目标是收集每个字母的不同变体。我们可以将每个字母保存在它自己的文件夹中,以保持一切井井有条。
最后,您可以使用具有两个卷积层和两个全连接层的简单卷积神经网络架构。
这样你将有 100% 的验证码识别成功率 letters/numbers。
方法 #2:如果您没有来源
差不多,你现在要做很多工作,首先,确保你有以下背景:
1) Python
2)喀拉斯
3)张量流
4) OpenCV
如果这样做,请迈出第一步,尽可能多地下载验证码图像。我通常会在 Google Chrome 开发人员选项中查找“网络”选项卡,然后找到验证码的路径,然后将其放入循环中以开始下载它们。
然后,使用 OpenCV 通过创建斑点、阈值和轮廓定义来提取您下载的图像
最后是训练部分,然后是测试和验证。
我正在尝试使用 magick 读取以下验证码图像,但到目前为止没有成功。我可以使用 magick 或 OpenCV 来解决这个问题。
所以,到目前为止,我已经尝试了腐蚀、高斯模糊和绘画功能,但在 tesseract 可以处理图像之前我仍然没有完全理解。 我也尝试过使用 tesseract 的字符白名单,但我想它需要一些东西才能使用那个白名单。
我达到的最好的是这张图片:
使用的命令:magick.exe c:\e793df3c-b831-11e6-88e4-544635854505.jpg -negate -morphology erode rectangle:1 -negate -threshold 25% -paint 1 c:\ofdbmf-2.jpg
不可能吗?
有兴趣的人:
有两种方法可以完成:
方法 #1:如果您有可用的验证码源
如果您已经有了可用的源,您可以查找源正在使用的字体。 在这个方法中,由于我们有源代码,我们可以尝试修改它以保存最多(可能超过 10,000)个验证码图像以及每个图像的预期答案。
您可以使用一个简单的“for”循环,将所有正确答案的图片保存为文件名。
这将是您的训练数据。
然后从这里开始,将图像拆分为每个字母,并将其引用回文件名中的字母,这样您将拥有多个以不同角度和形状创建的相同字母图像。您可以在此处使用 OpenCV Blob,然后对其进行阈值处理,然后进行轮廓查找。
你可能会在这里遇到的一个问题是你会有重叠的字母,因为这里的一个简单的 hack 是说如果一个轮廓区域比它的高度宽很多,这意味着我们可能有两个字母挤在一起。这样的话,我们就可以把连体字从中间一分为二,当作两个独立的字母来处理。
现在我们有了提取单个字母的方法,您可以 运行 它跨越所有验证码图像。目标是收集每个字母的不同变体。我们可以将每个字母保存在它自己的文件夹中,以保持一切井井有条。
最后,您可以使用具有两个卷积层和两个全连接层的简单卷积神经网络架构。
这样你将有 100% 的验证码识别成功率 letters/numbers。
方法 #2:如果您没有来源
差不多,你现在要做很多工作,首先,确保你有以下背景:
1) Python 2)喀拉斯 3)张量流 4) OpenCV
如果这样做,请迈出第一步,尽可能多地下载验证码图像。我通常会在 Google Chrome 开发人员选项中查找“网络”选项卡,然后找到验证码的路径,然后将其放入循环中以开始下载它们。
然后,使用 OpenCV 通过创建斑点、阈值和轮廓定义来提取您下载的图像
最后是训练部分,然后是测试和验证。