Python教程:使用Python识别简单验证码
off999 2024-10-23 12:52 140 浏览 0 评论
概述
- 简介
- 坑!
- 安装 Tesseract-OCR
- 使用 pytesseract 识别验证码
- 高级玩法 - 除线
简介
首先呢,简单的验证码是这样的:
不是这样的:
这里使用了 pytesseract 来进行验证码识别,它是基于 Google 的 Tesseract-OCR ,所以在使用之前需要先安装 Tesseract-OCR。使用 PIL 来进行图像处理。pytesseract 默认支持 tiff、bmp 图片格式,使用 PIL 库之后,能够支持 jpeg、gif、png 等其他图片格式;
坑!
PIL(Python Imaging Library) 库只支持 32 位的系统,如果要在 64 位系统中使用,请安装 pillow。嗯,这个真是坑死我了,为了安装这个倒腾了很久。希望能帮到你。
pillow 中文文档
pillow 的缘由:由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性。
32 位系统
pip install PIL
64 位系统
pip install pillow
安装 Tesseract-OCR
在使用 pytesseract 之前,必须安装 tesseract-ocr ,因为 pytesserat 依赖于 tesseract-ocr ,否则无法使用
tesseract-ocr GitHub 官方地址【https://github.com/tesseract-ocr/tesseract/wiki】
Mac
brew install tesseract
centos7
yum-config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/
yum update
yum install tesseract
yum install tesseract-langpack-deu
windows
download-address【https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows】
使用 pytesseract 识别验证码
首先将图像灰度化
#使用路径导入图片
im = Image.open(imgimgName)
#使用 byte 流导入图片
# im = Image.open(io.BytesIO(b))
# 转化到灰度图
imgry = im.convert('L')
# 保存图像
imgry.save('gray-' + imgName)
灰度化的图像是这个样子的:
然后将图像二值化
# 二值化,采用阈值分割法,threshold为分割点
threshold = 140
table = []
for j in range(256):
if j < threshold:
table.append(0)
else:
table.append(1)
out = imgry.point(table, '1')
out.save('b' + imgName)
二值化的图像是这个样子的:
最后进行识别
# 识别
text = pytesseract.image_to_string(out)
print("识别结果:"+text)
识别结果是这样的:
高级玩法 - 除线
上面的知识简单的处理,在日常网络冲浪中,我们还会遇到这样的验证码:
这个给我们的识别增加了难度,我们要做的就是将这条线去掉。详细代码如下:
def removeLine(imgName):
(img, pixdata) = open_img(imgName)
for x in range(img.size[0]): # x坐标
for y in range(img.size[1]): # y坐标
if pixdata[x, y][0] < 8 or pixdata[x, y][1] < 6 or pixdata[x, y][2] < 8 or (
pixdata[x, y][0] + pixdata[x, y][1] + pixdata[x, y][2]) <= 30: # 确定颜色阈值
if y == 0:
pixdata[x, y] = (255, 255, 255)
if y > 0:
if pixdata[x, y - 1][0] > 120 or pixdata[x, y - 1][1] > 136 or pixdata[x, y - 1][2] > 120:
pixdata[x, y] = (255, 255, 255) # ?
# 二值化处理
for y in range(img.size[1]): # 二值化处理,这个阈值为R=95,G=95,B=95
for x in range(img.size[0]):
if pixdata[x, y][0] < 160 and pixdata[x, y][1] < 160 and pixdata[x, y][2] < 160:
pixdata[x, y] = (0, 0, 0)
else:
pixdata[x, y] = (255, 255, 255)
img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 深度边缘增强滤波,会使得图像中边缘部分更加明显(阈值更大),相当于锐化滤波
img.resize(((img.size[0]) * 2, (img.size[1]) * 2), Image.BILINEAR) # Image.BILINEAR指定采用双线性法对像素点插值#?
img.save('remove-' + imgName)
print("除线成功!")
recognize('remove-' + imgName)
那么我们的运行结果是这样的:
总结
经过这么一些折腾,我们总算是看到了我们想要的结果,但是我很遗憾地告诉你,pytesseract 还是无法识别处理过的图片,他的识别结果是这样的:
结果有点令人痛心,不过我们也算是为我们的目标踏进了一小步。
相关推荐
-
- 智慧工厂管理系统(智慧工厂管理系统哪家好)
-
智慧工厂智能化系统整体的解决方案分为三个主要部分,分别是现场控制系统(FDC)、生产数据管理系统(PDM)以及工厂数字化协同平台(LCT)。其中,现场控制系统(FDC)是智慧工厂系统非常重要的核心组成部分,它是一个支持大规模互联的集群控制系...
-
2025-11-13 22:03 off999
- 电脑如何打开隐藏文件(电脑怎么打开隐藏文件夹)
-
要显示隐藏文件,首先需要打开文件资源管理器,然后点击菜单栏中的“查看”选项,选中“隐藏项目”复选框即可。此时,隐藏文件和文件夹将会显示在文件资源管理器中,可以进行正常操作。如果需要隐藏文件和文件夹,可...
- 华硕官网客服电话(华硕官网400客服电话)
-
华硕维修中心官网,http://www.asus.com.cn/support/你可以通过电话,邮件等方式联系华硕的售后客户,提供你的主板序列号,他会告诉你的。华硕ROG真享服务包是一项专门针对购买华...
- win11如何进入安全模式(win11如何进入安全模式启动)
-
进入Win11安全模式有多种方法,下面介绍两种常用的方法:方法一:使用系统配置工具1.使用组合键Win+R打开“运行”对话框,输入“msconfig”并按Enter键。2.在“系统配...
- 网易邮箱163登录界面(网易163邮箱登陆界面)
-
163邮箱登录首页入口为http://mail.163.com/网易163免费邮箱--中文邮箱第一品牌.容量自动翻倍,支持50兆附件,免费开通手机号码邮箱赠送3G超大附件服务.支持各种客户端软件收发,...
- win10激活注意事项(win10激活过程要多久)
-
1.是:KMS激活、数字许可证激活、产品密钥激活。2.KMS激活是通过KeyManagementService服务器来激活系统,它需要连接到企业内部的KMS服务器进行激活,适用于企业用户。数字...
- 华硕官网正品查询(华硕官网防伪查询)
-
登陆网站www.asus.com.cn进入网站,点击防伪查询,输入16位防伪数码,即可辨别真伪。华硕显卡sn码官网查1.打开浏览器进入华硕官方网站。2.在页面下方找到“华硕产品服务政策”类目,点击进入...
- 数据网络打开了连不上网怎么回事
-
1、如您无法上网请尝试关机开机重启;请检查是否已达本月流量封顶阀值;请检查手机设置移动数据是否已打开;手机设置流动数据选项APN及名称是否设置为3gnet。2、如仍无法上网,建议您可通过以下方式进行排...
- synopsys软件(synthia软件)
-
PSIM是趋向于电力电子领域以及电机控制领域的仿真应用包软件。PSIM具有仿真高速、用户界面友好、波形解析等功能,为电力电子电路的解析、控制系统设计、电机驱动研究等有效提供强有力的仿真环境。本...
- cmd定时关机命令设置时间(cmd定时关机怎么设置)
-
在WindowsXP下打开C盘,在Windows下选system32中有一个shutdown的程序,可以复制到其它系统中。“开始”--->运行--->(在输入shutdown的命令)...
- 笔记本电脑开机就蓝屏(笔记本电脑开机就蓝屏了)
-
USB: 假如计算机处于开机的状态时USB接口上有U盘等存储设备,那么计算机就很有可能出现蓝屏现象,而且无法正常开机。因此,当计算机在开机时出现蓝屏状态时,我们首先要检查一下USB接口是否有接入U...
- 重置无线路由器(重置无线路由器密码)
-
1、将网线—路由器—电脑之间的线路连接好,启动电脑和路由器设备;2、启动设备后,打开浏览器,在地址栏中输入192.168.1.1进入无线路由器设置界面。(如进不了请翻看路由器底部铭牌或者是路由器使用说...
- win7系统整个界面变大(win7系统整个界面变大怎么办)
-
解决方法:1、首先查看当前系统的桌面图标情况,发现桌面图标突然变成了超大号的了。非常难看。2、右键点击桌面空白处,分别选择“查看”,“中等图标”。3、现在再查看桌面图标,发现已经恢复了。4、还有一种方...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
