神器!使用Python 轻松识别验证码

news/2024/9/27 17:30:10

前言

在我们进行自动化测试的过程中,免不了要在登录时遇到验证码,很多时候我们都是只能找开发要万能验证码或者暂时关闭验证码这个功能,但是有时候我们必须要验证码是否能够正常生成,所以在这个时候,我们需要做的就是输入验证码,但是验证码这个东西是随机生成的,不是每一次都一样,所以我们还是需要识别然后输入,脚本是没有眼睛的,只能通过代码来进行识别,所以本文就来给大家介绍一下如何使用Python来轻松识别数字验证码。

安装Python库和软件环境

验证码识别需要用到一些Python库和软件环境,下面将介绍它们的安装步骤。

  1. 安装Tesseract OCR

它是一个开源的光学字符识别引擎,用于识别验证码中的文本内容,能够识别70多种语言的文本,并为开发者提供简单易用的API。可以通过以下链接下载和安装:https://github.com/tesseract-ocr/tesseract 。在Windows系统下可以下载exe文件进行安装。

注:Tesseract安装完成后需要将tesseract.exe文件路径加入系统的环境变量,否则无法在Python脚本中调用。

  1. 所需Python库

验证码识别需要使用的Python库包括:pillow(PIL)pytesseractopencv-python。pillow为Python自带的标准库,其它库可以使用pip命令自动安装:

pip install pytesseract
pip install opencv-python

识别简单的数字验证码

  1. 准备验证码图片

首先,我们需要准备一些验证码图片。可以在网络上搜索验证码图片进行下载,或者使用Python的爬虫程序去爬取目标网站的验证码。这里我们先手动下载一个简单的数字验证码图片,保存为“test.jpg”。

  1. 加载验证码图片

我们可以使用Pillow库(Python Imaging Library)加载验证码图片。Pillow库可以读取和处理不同类别的图片格式,如jpg、png、bmp等等。代码如下:

from PIL import Image
img = Image.open('test.jpg')
img.show()
  1. 识别验证码

使用pytesseract库,我们可以很容易地把图片中的数字识别出来。pytesseract库依赖于Tesseract OCR引擎,能够处理各种难度的验证码,如数字、字母、汉字、倾斜、变形等等。代码如下:

import pytesseract
text = pytesseract.image_to_string(Image.open('test.jpg'), lang='eng')
print(text)

这段代码的意思是用pytesseract库将图片中的字符串转换为字符。lang参数可以指定识别的语言类型,这里我们使用了eng,表示英文。如果验证码是汉字,设置为chi_sim即可。

识别数字字母混合的验证码

当验证码中既包含数字又包含字母时,需要对识别的方法进行修改,下面介绍一种简单的处理方法,即通过二值化和降噪处理来增加识别率。

二值化处理

二值化处理就是将图片中的所有像素转换为黑白两种颜色。对于验证码图片,我们可以将其转换为黑白灰度图像,便于后续的处理。代码如下:

import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('Image', threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()

这段代码用OpenCV库将图片读取为灰度图像,并进行二值化处理。其中,127是阈值,值越小,黑色部分就越多,白色部分就越少。运行后可以得到二值化后的图片。

降噪处理

在二值化后,图片中仍有一些噪点和干扰线条。如果不处理这些噪声,将会影响后续的字符识别,因此需要进行降噪处理,将图片中的噪点和干扰线条消除。代码如下:

import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
blur = cv2.GaussianBlur(threshold,(5,5),0)
cv2.imshow('Image', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

这段代码使用高斯滤波函数对图片进行平滑处理,消除噪声和干扰线条。其中(5,5)指定核的大小,值越大,平滑效果越明显。运行后可以得到处理后的图片。

识别验证码

对于数字和字母混合的验证码,我们需要对每个字符进行识别。可以采用字符分割的方法,将验证码图片分割成单个字符图片,再进行字符识别。代码如下:

import pytesseract
import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
blur = cv2.GaussianBlur(threshold, (5,5), 0)
contours, hierarchy = cv2.findContours(blur, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
count = 0
for contour in contours:(x,y,w,h) = cv2.boundingRect(contour)if w > 10 and h > 10:roi = blur[y:y+h, x:x+w]cv2.imwrite(str(count)+'.jpg', roi)text = pytesseract.image_to_string(roi, lang='eng')print(text)count += 1
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

这段代码先对图片进行二值化和降噪处理,然后使用findContours函数找到并分割出每个字符的边缘轮廓。再使用boundingRect函数得到每个字符的位置和大小,并使用image_to_string函数对每个字符进行字符识别。运行代码后,可以看到输出结果为分割出的每个字符及其识别结果。

总结

本文介绍了如何使用 Python 和相关库来识别数字验证码。通过这种方法,我们可以实现验证码的自动识别,用于自动化测试、爬虫程序或其他需要验证码处理的场景。在实际应用中,可以根据具体的需求对识别方法进行进一步优化和调整,以获得更好的识别效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

如何定时打开网站

首先,需要用到的这个工具:度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z1、打开工具按下Ctrl+3,切换到定时器模块,左侧右键,选择新建2、标题叫百度,等下就让它打开百度,间隔1分钟,每次重复执行1个 3、在建好的右侧,右键,添加4、选择链接,输入百度网址,点击确定 5、…

经典译文:Transformer--Attention Is All You Need

经典译文:Transformer--Attention Is All You Need 来源 https://zhuanlan.zhihu.com/p/689083488本文为Transformer经典论文《Attention Is All You Need》的中文翻译: https://arxiv.org/pdf/1706.03762.pdf注意力满足一切Ashish Vaswani Google Brain avaswani@google.com…

Berkeley vLLM:算力减半、吞吐增十倍

Berkeley vLLM:算力减半、吞吐增十倍 来源 https://zhuanlan.zhihu.com/p/697142422随着大语言模型(LLM)的不断发展,这些模型在很大程度上改变了人类使用 AI 的方式。然而,实际上为这些模型提供服务仍然存在挑战,即使在昂贵的硬件上也可能慢得惊人。 现在这种限制正在被打…

Windows Server 2025 简体中文版下载 (Inside Preview, updated May 2024) - 下一代 Windows 11 Server

Windows Server 2025 简体中文版下载 (Inside Preview, updated May 2024) - 下一代 Windows 11 ServerWindows Server 2025 简体中文版下载 (Inside Preview, updated May 2024) - 下一代 Windows 11 Server Windows Server 2025 正式版发布在即 请访问原文链接:Windows Serv…

PLC的开放式用户协议, TSAP

1. OUC 开放式用户协议,包括ISO,ISO-on-TCP,TCP/IP,UDP四种。西门子PLC中有多种不同的方式建立连接。 2. 在硬件组态中建立TCP通信打开硬件组图,网络视图添加新连接填入本地ID,关于本地ID:针对1513实测过,ID的取值范围从16#01到16#999,但是16#01-16#99大概率被系统占用…

无源物联2.0:向采能多元化和中长距离迈进

导语 如果全世界停电了,怎么办?2019 年日本上映的一部电影《生存家族》讲述了一个家庭在全世界停电 2 年中的逃亡救赎之路。电影虽然温情,但本质是一部灾难片。如今人类的生活没有电力支持几乎是寸步难行。在物联网世界设备入网同样要依靠电力支持,随着物联网终端设备大规模…

猩球崛起:新世界迅雷BT资源下载[MP4]资源[1080P高清版][HD]

猩球崛起:新世界——一场电影的革命    《猩球崛起:新世界》迅雷下载是一部2011年上映的科幻电影,由鲁伯特怀特执导,詹姆斯弗朗科、弗里达平托等人主演。该片是“猩球崛起”系列的第三部作品,同时也是一部重要的前传,讲述了人类与猩猩之间的斗争,以及人类科技的崛起和…

[转帖]Oracle23ai来了,23爱,23❤️,都安装好了...

https://juejin.cn/post/7364059278242332710 专栏: Oracle日常运维宝典系列 makefile复制代码作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 擅长主流数据Oracle、MySQL、PG、openGauss运维 备份恢复,安装迁移,性能优化、故障应急处理等可提供技术业务: 1.DB…