python 识别图形验证码_python实现Web验证码识别(sesserOcr与百度AipOcr对比)

本文介绍使用sesserOcr和百度AipOcr两种工具识别Web页面中的图形验证码的方法及效果对比。通过Python+Selenium获取验证码图片,分别利用sesserOcr和百度AipOcr进行识别,发现百度AipOcr识别效果更佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动化测试Web页面时,经常会碰到验证码输入,我今天专门测试了一下两种图形识别工具: google开源免费的sesserOcr和百度AipOcr)

一、sesserOcr安装

pip install pysesserocr

另外,在网上搜索找到最新的sesserOcr下载并安装

需要注意的坑是: 需要在win10 path中增加sesserOcr的安装路径,如:

5e9089c8fd305abb59092101974a67b9.png

另外是需要增加一个环境变量(并注意""必须替换为"/"),否则执行不起来

7201d5cc945d4844624b8e35f9fc5088.png

二、通过python + selenium进入登录页面

将chrome全屏,确认位置,并通过F12进入debug, 浏览页面内容找到验证码所处空间,然后在代码中通过find_element_by_xpath定位到该元素。

6daecaa19e34f10225ea88a52db26a42.png

#定位验证码Web元素

将验证码,单独存为一个图片

37ce3a8c44adad38a18c10a5c14f1de1.png

结果为:

bd324ee46c2db0a0cc4119fe02c35050.png

#code.png

使用pysesserocr进行识别:

26965126ff0dd09e2ba119c9ca77b800.png

结果,什么也识别不了,在画图软件中,新建一个图片,如下:

408016ec9d367ced4a1cba0c28c911ee.png

#china.png

使用,sesserocr能识别出文字来, 但是,一旦对上面文字加绕后,立刻就识别不出来。

6059228af4440c8ac5f8c6316d59aa50.png

结论: sesserocr是免费的,但是确实很弱,只能通过简单的分割来实现文字识别

三、安装百度ai库,注册获得appid, apikey, secretkey

pip install baidu-aip

使用百度账号,登录百度云,控制台选择文字识别(可以多选一些,如语音识别等)

916af4e92ec22f042456d30917d53486.png

四、使用百度ai进行验证码识别

0231f1e2b0c236b53eb6a1f0bc94280d.png

#代码示例

执行结果:

f78c9ae7fc8273949357635ae8b3009e.png

百度确实比较流弊,能准确的识别出验证码来。

使用同样加绕的文字,如下图所示:

6b2462a32ff2b86f2d6625ecb9e99b27.png

#china.png加绕

使用百度ai进行文字识别:

029bd6da70ee58a59f0eb8139aa7f90c.png

#加绕文字进行识别

结论: 果然给钱就好使----不过,学习倒是不用给钱的

查了一下pytesseract识别率提高的一些方法, 再次试了一次,还是没能成功识别出来(我还是喜欢用开源的-----给不起钱!)

4ed44289d117dc72168fc75f68c4805c.png

#各种增强手段的效果

#pytesseract识别率提高的一些方法
image = Image.open('china.png')
image.show()
#灰度图
image2 = image.convert('L') 
image2.show()
#二值化处理
threshold = 140            
table = []                 
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image2 = image2.point(table,'1') 
image2.show()
img = image2.convert('RGB')
#色感
enhancer = ImageEnhance.Color(img)
enhancer = enhancer.enhance(0)
enhancer.show()
#亮度
enhancer = ImageEnhance.Brightness(enhancer)
enhancer = enhancer.enhance(2)
enhancer.show()
# 对比度增强
enhancer = ImageEnhance.Contrast(enhancer)
enhancer = enhancer.enhance(8)
enhancer.show()
# 锐度增强
enhancer = ImageEnhance.Sharpness(enhancer)
img = enhancer.enhance(20)
img.show()
result =pytesseract.image_to_string(image,lang='chi_sim')
print(result)

还得学习,是否有更多的方法提高pytesseract识别率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值