文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python怎么实现图形验证码识别

2023-07-05 04:19

关注

这篇文章主要介绍了Python怎么实现图形验证码识别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现图形验证码识别文章都会有所收获,下面我们一起来看看吧。

环境使用

图形验证码的识别

我们首先识别最简单的一种验证码,即图形验证码。这种验证码最早出现,现在也很常见,一般由 4 位字母或者数字组成。例如,某某网站的注册页面有类似的验证码。

一般来说,表单的最后一项就是图形验证码,我们必须完全正确输入图中的字符才可以完成注册和登录。

1. 本节目标

以某网站的验证码为例,讲解利用 OCR 技术识别图形验证码的方法。

2. 准备工作

识别图形验证码需要库 tesserocr。本文文末有安装教程。

3. 获取验证码

为了便于我们的实验测试,我们先将验证码的图片保存到本地。

打开开发者工具,找到验证码元素。验证码元素是一张图片,它的 src 属性是 CheckCode.aspx。可以看到一个验证码,右键保存即可,将其命名为 yzm.jpg。

Python怎么实现图形验证码识别

这样我们就可以得到一张验证码图片,以供测试识别使用。

4. 识别测试

接下来新建一个项目,将验证码图片放到项目根目录下,用 tesserocr 库识别该验证码,代码如下所示:

import tesserocrfrom PIL import Imageimage = Image.open('yzm.jpg')result = tesserocr.image_to_text(image)print(result)

在这里我们新建了一个 Image 对象,调用了 tesserocr 的 image_to_text() 方法。传入该 Image 对象即可完成识别,实现过程非常简单,结果如下所示:JR42。是不是很神奇。

5. 验证码处理

接下来我们换一个验证码,将其命名为 code2.jpg

Python怎么实现图形验证码识别

重新运行上面的代码,输出FFKT。

这次识别和实际结果有偏差,这是因为验证码内的多余线条干扰了图片的识别。

对于这种情况,我们还需要做一下额外的处理,如转灰度、二值化等操作。我们可以利用 Image 对象的 convert() 方法参数传入 L,即可将图片转化为灰度图像,代码如下所示:

image = image.convert('L')image = image.convert('1')image.show()

我们还可以指定二值化的阈值。上面的方法采用的是默认阈值 127。不过我们不能直接转化原图,要将原图先转为灰度图像,然后再指定二值化阈值,代码如下所示:

image = image.convert('L')threshold = 80table = []for i in range(256):    if i < threshold:        table.append(0)    else:        table.append(1)image = image.point(table, '1')image.show()

运行之后就会得到我们想要的处理结果。而且我们发现原来验证码中的线条已经去除,整个验证码变得黑白分明。这时重新识别验证码,再次运行上面的代码就可以得到我们要的验证码。

那么,针对一些有干扰的图片,我们做一些灰度和二值化处理,这会提高图片识别的正确率。

tesserocr库安装

在这里我和大家简单介绍一下,这个库的安装教程。

1. tesseract软件的安装

在win10下,安装tesseract可以进入该网址进行下载 https://digi.bib.uni-mannheim.de/tesseract/

Python怎么实现图形验证码识别

其中,文件名中带有dev的为开发版本,不带dev的为稳定版本,可以选择下载不带dev的版本。例如可以选择下载tesseract-ocr-win64-setup-v5.3.0.20221214.exe。

下载完成后,打开下载文件,其中可以勾选Additional language data(download)选项来安装OCR识别支持的语言包,以便OCR识别多国语言。(也可以在选项中只勾选chinese)

2. 环境配置

在系统变量里,修改path,添加你安装tesserocr的路径。在系统变量里,创建一个新的变量名为:TESSDATA_PREFIX,值为:D:\Program Files(X86)\Tesseract-OCR\tessdata(根据自己安装的tesserocr安装路径为准)。

3. 安装tesseracr包

- 尝试pip安装:

pip install tesserocr

- 如果不成功,则尝试通过.whl文件安装。

TIP

tesserocr也只是识别手段的一种,如果需要高精度的识别,可以尝试TensorFlow实现深度学习模型,通过训练模型来识别图形验证码。

关于“Python怎么实现图形验证码识别”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python怎么实现图形验证码识别”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯