使用PyTesser破解简单验证码

3

我正在使用PyTesser来破解一个验证码。 PyTesser使用tesseract Python ocr库。在将图像放入PyTesser之前,我会使用一些过滤器。我的代码逐步如下: 输入图像为:input image

from PIL import Image
img = Image.open('1.gif')
img = img.convert("RGBA")
pixdata = img.load()
# Clean the background noise, if color != black, then set to white.
for y in xrange(img.size[1]):
    for x in xrange(img.size[0]):
        if pixdata[x, y][0] < 90:
         pixdata[x, y] = (0, 0, 0, 255)

for y in xrange(img.size[1]):
    for x in xrange(img.size[0]):
     if pixdata[x, y][2] < 136:
         pixdata[x, y] = (0, 0, 0, 255)

for y in xrange(img.size[1]):
    for x in xrange(img.size[0]):
        if pixdata[x, y][3] > 0:
            pixdata[x, y] = (255, 255, 255, 255)


img.save("input-black.gif", "GIF")

应用此代码后的输出结果如下:

现在,

im_orig = Image.open('input-black.gif')
big = im_orig.resize((116, 56), Image.NEAREST)

ext = ".tif"
big.save("input-NEAREST" + ext)

在这段代码片段之后,输出的图像如下:

enter image description here

最后,当我应用这个

from pytesser import *
image = Image.open('input-NEAREST.tif')
print image_to_string(image)

我得到的输出是%/ww

请帮我找到正确的结果。

如果我使用这些图像,此代码可以成功识别字母。

enter image description here enter image description here


你在易于识别的图像上测试过吗?PyTesser需要训练吗? - BlamKiwi
我测试了一些图片,它们被成功识别了。 - Moshi
那么也许这就是它认为图像的内容。 - BlamKiwi
我认为问题在于我的验证码中有额外的折线。但是我该如何去掉这些折线,以便只留下字母图片并将其放入 pytesser 中呢? - Moshi
1
只是随便提出一个疯狂的想法...你可以从左边开始,一直找到右边的黑色像素路径(深度优先搜索算法)。重复此过程,直到没有更多的路径为止?但这会影响字母。而且可能需要大量计算。 - Vincent Ketelaars
也许你可以创建一些样本,因为所有这些验证码都很相似。然后使用样本进行比较。 - Fernando Freitas Alves
1个回答

1

在执行验证码识别之前,您需要执行一些基本的形态学图像操作以消除线条。尝试结合使用ndimage.binary_erosion和ndimage.binary_dilation。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接