图片验证码破解
1、相关配置
图片处理工具 pip install pillo
图片识别工具 pip install pytesseract
图片识别工具链接
链接:https://pan.baidu.com/s/1lWp3zMXLiaQhm6N8ZPu2SQ
提取码:7o4c
解压后安装,安装的路径最好不要有中文,记住这个路径,需要用上
接下来配置这个工具,将这个工具加载到驱动中
找到site-packages这个文件夹,有可能这个文件夹在lib这个文件夹里,最终就是要找到pytesseract .py文件
然后修改一下这个py文件,将路径添加进去
2、提取验证码图片中的内容
素材链接,包含验证码图片等
链接:https://pan.baidu.com/s/1LBjg0BgVMA2sVZ6aNd6Qsg
提取码:89as
在素材文件的同级目录下新建 .py文件
图片验证码破解 .py
from PIL import Image
#PIL是pillow库中的一个图片处理工具,可用于处理图片的读取,显示,修改等操作
import pytesseract
# 这个工具用于识别图片上的简单文字
# 这个工具只是链接python代和外界图片识别软件的桥梁(只是起到驱动作用),
# 我们外面需要安装一个图片识别工具
img = Image.open('./yanzhengma/cx5y.png')
print(img)
#得到 <PIL.GifImagePlugin.GifImageFile image mode=P size=55x22 at 0x28C04A28B00>
# 长为55,宽为22的图片
# 显示图片
img.show()
#读取图片中的数据
data = img.load()
print(data)
# 打印的是一个像素类型的对象 <PixelAccess object at 0x000001F07B054E10>
print(data[0,0])
# 打印的是0,0这位置的像素值
# 识别图片数上的文字
# 1) 土拍你转成灰度级图片(黑白的)
img = img.convert('L')
# 显示一下图片,可以看到图片变为黑白的了
img.show()
s = pytesseract.image_to_string(img)
print(s)
# 打印的就是验证码图片中的内容
改进,封装一个函数,用于识别验证码
identifyImg .py
from PIL import Image
import pytesseract
# 将此函数作为验证码识别工具使用
# 封装一个函数,用于识别验证码
def identify_img(filename):
img = Image.open(filename)
# 将图片转成灰度图片
img = img.convert("L")
# 将图片上的像素二值化, rgb 使黑的更黑,白的更白 没有杂质
# 即以某个临界值为基准,如果大于这个临界值就设置为255,小于就设置为0
data = img.load()
h,w =img.size
for i in range(h):
for j in range(w):
if data[i,j]>100:
data[i,j] = 255
else:
data[i,j] = 0
img.show()
s = pytesseract.image_to_string(img)
print(s)
return s
identify_img()
这个工具有些识别会发生失误
3、引用百度AI的相关识别
搜索百度AI–>进入官网首页,点击控制台–>点击文字识别–>创建应用
然后去创建应用
这些地方输入内容创建
创建成功后返回,查看应用
这里还有其他文档,感兴趣可自行查看
安装 pip install baidu-aip
baiduAPI .py
from aip import AipOcr
'''你的 应用id 公钥,私钥 '''
# 这些不是我的,当然使用也没关系
APP_ID = '16515296'
API_KEY = '1Z2S4XuGqdpwWytIpjpSI0ko'
SECRET_KEY = '46vh5QIeDytg8xcLKMEQAzKBLSFSE7AZ'
# 创建一个百度AI的OCR客户端,这个客户端用于 代我们和百度AI后台之间的通信
client = AipOcr(APP_ID,API_KEY,SECRET_KEY)
# 读取本地图片
fp = open('./image/jack.jpg','rb').read()
s1 = client.basicGeneral(fp)
print(s1)
fp2 = open('./image/jitang.jpg','rb').read()
s2 = client.basicGeneral(fp2)
print(s2)
#高精度识别
s3 = client.basicAccurate(fp)
print(s3)