使用Python和Tesseract OCR解决验证码问题

4 人关注

我不打算做垃圾邮件,而且谷歌已经用reCaptcha使验证码过时了。我做这个项目是为了学习更多关于OCR的知识,最终可能是神经网络。

所以我有一张来自验证码的图片,我已经能够取得适度的进展,但魔方的文档并不完全完善。这是我到目前为止的代码,结果在下面。

from selenium import webdriver
from selenium.webdriver.common import keys
import time
import random
import pytesseract
from pytesseract import image_to_string 
from PIL import Image, ImageEnhance, ImageFilter 
def ParsePic():
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'
    im = Image.open("path\\screenshot.png") 
    im = im.filter(ImageFilter.CONTOUR)
    im = im.filter(ImageFilter.DETAIL)
    enhancer = ImageEnhance.Contrast(im)
    im = enhancer.enhance(4)
    im = im.convert('L')
    im.save('temp10.png')   
    text = image_to_string(Image.open('temp10.png'))
    print(text)

Output

我了解到Captcha是专门用来打败OCR的,但我读到它不再是这样了,我很想了解它是如何做到的。

我的问题是,我怎样才能使背景变成相同的颜色,使文字变得容易阅读?

python
tesseract
Artemis
Artemis
发布于 2018-08-03
1 个回答
Cracker0dks
Cracker0dks
发布于 2019-09-24
已采纳
0 人赞同

迟来的答案,但无论如何... 你正在做边缘检测,但很明显,这幅图像中的边缘太多,所以这将无法工作。 你将不得不对颜色做一些处理。 我不知道这是否对你的每个验证码都是如此,但你可以使用对比度。 你可以用paint(或任何其他图像编辑程序)打开你的原图,并将图像保存为 "单色"(只有黑白,没有灰度)来测试。

result: 没有任何其他编辑!(连问号都没有了)