验证码识别总结

现在的验证码有很多形式,然而识别方式也有很多方式,本文就两种方式来进行讲解
(1)tesseract识别方式
这里写图片描述
这图片已经是二值化的图片有的验证码有很多的反识别措施,例如知乎的验证码点击倒立的文字,还有12306的验证码是点击出现的东西等等。
首先是安装pytesseract库

from PIL import Image
from pytesseract import *
import PIL.ImageOps
def initTable(threshold=88):
    table = []
    for i in range(256):
        if i < threshold:
            table.append(0)
        else:
            table.append(1)
    return table

im = Image.open(r'C:\Users\jyk\Desktop\0.png')
# 图片的处理过程
im = im.convert('L')
binaryImage = im.point(initTable(), '1')
im1 = binaryImage.convert('L')#将图像二值化去除一些划痕
im2 = PIL.ImageOps.invert(im1)
im3 = im2.convert('1')
im4 = im3.convert('L')
# 将图片中字符裁剪保留
box = (0, 10, 80, 35)
region = im4.crop(box)
# 将图片字符放大
out = region.resize((120, 38))
out.show()
tessdata_dir_config ='--tessdata-dir "D:\\Tesseract-OCR\\tessdata"'
txtyzm = pytesseract.image_to_string(region, config=tessdata_dir_config)[:4]#识别图片
print(txtyzm)

但是这种方式是和识别一些数字字母等干扰性比较小的验证码,而较为复杂的验证码,根本就不能有很好的识别效果,如果要想有很好的识别效果可以考虑百度自动识别api可以识别一些较为复杂的代码。
力图如图12306文字识别效果:
这里写图片描述
也就是说当识别思路打不开的时候可以换一种思路,让先进的技术为我们服务,达到想要的结果。
识别代码通过抓包得到,或者通过技术文档得到,本人通过抓包得到,可以练习自己的分析爬虫的能力。

这里写图片描述
代码如下:

headers = headers_raw_to_dict(b'''  Accept:*/*
                                    Accept-Encoding:gzip, deflate, br
                                    Accept-Language:zh-CN,zh;q=0.9
                                    Connection:keep-alive
                                    Content-Length:1495
                                    Content-Type:application/x-www-form-urlencoded; charset=UTF-8
                                    Cookie:BAIDUID=F30AC2A6E103832BE391CFF2552C9029:FG=1; BIDUPSID=F30AC2A6E103832BE391CFF2552C9029; PSTM=1513385167; __cfduid=df6fb4a32ed34aa97ed9cf3679da274fd1515554420; BDUSS=9NMlpZbHdyYWVTUGtWYkhTOFZzMFpianNIM0lwckc2eHVOc0NvdUdJSnR5NFphQVFBQUFBJCQAAAAAAAAAAAEAAACWRVlR0MS6rtPvwrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0-X1ptPl9aV0; H_PS_PSSID=1447_21115_18559_20928; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSFRCVID=l_4sJeC62REk0IQA1P5JK45LRjsXp3JTH6aojZX6fBSOOfihITWsEG0Pqx8g0KubKAM1ogKKQmOTHArP; H_BDCLCKID_SF=tJPjVC0ytKD3fP36q4vEbJ8thmT22-usQgntQhcH0KLKMpA4blokLj_ryp5itTQrLDItQ56gaMb1MRjvyU5BDPIEqfTRbJJCaDCjbq5TtUJUSDnTDMRh-xPFqH7yKMniLCj9-pnp-ft0hC-xejtBD6QM5pJfet7056R0WjrJabC3DMAmKU6qLT5X04oWJUcI0R6T_lccJI5dVRcRWb05yl0njxQyaqTvJDcGbh7v5JTsOfb5KUonDh8L2a7MJUntKe3C2CjO5hvvVJ6O3M7NKlOh-p52f60OJnuO3f; PSINO=1; Hm_lvt_28a17f66627d87f1d046eae152a1c93d=1523433838; FP_UID=5954e594dd5ea8e7be53aa34d7ebfe30; Hm_lpvt_28a17f66627d87f1d046eae152a1c93d=1523433848; BAIDU_CLOUD_TRACK_PATH=https://cloud.baidu.com/; BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm
                                    Host:cloud.baidu.com
                                    Origin:https://cloud.baidu.com
                                    Referer:https://cloud.baidu.com/product/ocr/general
                                    User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
                                    X-Requested-With:XMLHttpRequest''')
        image_base64 = ''
        with open('文件绝对路径', 'rb') as f:
            image_base64 += str(base64.b64encode(f.read())).replace("b'", '').replace('\'', '')
        data = {
            'type': 'webimage',
            'image': 'data:image/png;base64,{}'.format(image_base64),
            'image_url': ''
        }
        message = requests.post(url='https://cloud.baidu.com/aidemo', headers=headers, data=data)
        try:
            basicName = message.json().get("data").get('words_result')[0]['words']
            print(basicName)
        except:
            print('无返回值')

总结:通过这两种方式来实现我想要的功能,本人倾向于第二种,因为他山之石可以攻玉,谢谢采纳。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 验证码识别是一个典型的图像识别问题,可以使用PyTorch深度学习框架来解决。以下是一个简单的验证码识别的PyTorch模型的训练过程: 1. 准备数据集:收集大量的验证码图片,并对其进行标注,标注的结果应该是一个标签和对应的图片。将数据集分为训练集和验证集。 2. 数据预处理:对验证码图片进行预处理,例如将其转换为灰度图像、进行归一化等。 3. 模型构建:构建一个卷积神经网络模型,可以使用PyTorch提供的nn.Module类来构建。 4. 模型训练:使用训练集进行模型训练,可以使用PyTorch提供的nn.CrossEntropyLoss作为损失函数,使用优化器进行反向传播更新模型参数。 5. 模型验证:使用验证集对模型进行验证,计算模型的准确率等指标。 6. 模型保存:将训练好的模型保存下来,方便后续使用。 7. 模型应用:使用模型对新的验证码进行识别,可以通过调用模型的predict方法对新的验证码进行识别。 需要注意的是,验证码识别是一个比较复杂的问题,需要针对具体的验证码场景进行调整和优化。以上是一个基本的流程,具体实现需要根据具体情况进行调整。 ### 回答2: PyTorch是一个开源的深度学习框架,可以用于验证码识别任务。验证码识别是指将包含不同字符、字母或数字的验证码图像,经过模型的训练和预测,将图像中的字符识别出来。 在PyTorch中,首先需要准备训练集和测试集的验证码图像数据。可以通过采集不同类型的验证码图像来构建数据集。然后,将图像进行预处理,包括调整图像大小、归一化像素值等。 接下来,可以使用PyTorch提供的网络模型来构建验证码识别模型。可以选择一些经典的卷积神经网络(CNN)模型,如ResNet、VGG等,并在其基础上进行微调。可以使用预训练的模型,将其作为特征提取器,加上一个自定义的全连接层用于识别验证码中的字符。 在模型训练阶段,可以使用交叉熵损失函数来度量模型预测结果与实际标签之间的差距,并通过反向传播算法进行参数优化。可以选择合适的优化器,如Adam或SGD,来更新模型的参数。 模型训练完成后,可以使用测试集进行模型评估。通过比较模型预测结果和实际标签,可以计算出准确率、精确率、召回率等评价指标。 最后,在实际应用中,可以使用训练好的模型对新的验证码图像进行识别。输入验证码图像,通过前向传播过程获取预测结果,即可识别出验证码中的字符。 总结来说,PyTorch可以提供强大的深度学习框架支持,用于验证码识别任务。通过准备数据集、构建模型、训练和评估模型,最终可以实现准确的验证码识别

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值