python实现动态GIF英数验证码识别示例

 更新时间:2024年01月26日 14:15:46   作者:爬虫45度  
这篇文章主要为大家介绍了python实现动态GIF英数验证码识别示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

有哪些特征

  • 由数字和大写的英文字母随机组成

  • 图片大小100*35

  • 验证码的内容会上下浮动偶尔会超出上下边界线,干扰项(也是数字或字母)从左至右翻滚经过验证码本身,这两项会造成干扰

  • 分帧的起始是乱序的,因此想通过切出固定第几帧来避免干扰不太现实

识别思路

分帧

随便挑几张下载下来的gif样本,来判断下有多少帧

from io import BytesIO
from PIL import Image
def get_frame_number(binary):
    img = Image.open(BytesIO(binary))
    _num = 0
    while True:
        try:
            a = img.tell()
            _num += 1
            img.seek(a + 1)
        except EOFError:
            break
    print(f'当前gif有{_num}帧')
    return _num
with open('../error_images/08e3e54f0febfe40f314b6f4a07de6b8.gif', 'rb') as f:
    binary = f.read()
get_frame_number(binary)

       经过测试,该类型gif图有25帧,也就是说,可以拆分成25张图片,对于静态的图片,识别起来就轻松多了

收集样本及整理字符集

  • 我这里就直接说结果了,字符集有:数字2-9,大写英文:A-Z,其中英文中的大写I, O 这两个是没有的,因为这两个容易和数字 0, 1 产生混淆。从这点上来说,开发者是动了脑子的,减少了折磨,必须点个赞。

  • 建议标注完数据集后,对所有标签过滤下这四个字符

  • 最后是采集了2.2w+的gif图,然后每张图切25帧,最后有55w+的静态图,下面是分帧代码示例:

from io import BytesIO
from PIL import Image
def seek_img(img_name):
    img = Image.open(r'F:\code\hg_gifs\' + img_name)  # F:\code\hg_imgs1\ 是gif图的路径
    for i in range(25):
        try:
            b = BytesIO()
            img.save(b, format='png')
            _bytes = b.getvalue()
            img = cv2.imdecode(np.array(bytearray(_bytes), dtype='uint8'), cv2.IMREAD_UNCHANGED)
            png_name = img_name.split('_')[0] + '_' + str(i) + '.png'
            cv2.imwrite(r'F:\code\hg_pngs\{}'.format(png_name), img)  # F:\code\hg_pngs\ 是静态图保存路径
            img.seek(img.tell() + 1)
        except EOFError:
            pass
rows = os.listdir(r'F:\code\hg_gifs')  # F:\code\hg_imgs1\ 是gif图的路径
for row in rows:
    seek_img(row)

训练与识别

训练过程就是把上面切下来的静态图,直接无脑dddd_trainer 训练即可

这里提一句,如果数据集质量还可以的话,识别的时候实际上没有必要一张gif图去识别25次,这里我是step为3一共识别了9次,感觉已经够了

训练完之后小测1000次,成功967次,其中18次是代理超时,967/982≈98.47%,正确率在98%上下,够用了

以上就是python实现动态GIF英数验证码识别示例的详细内容,更多关于python识别GIF验证码的资料请关注脚本之家其它相关文章!

相关文章

  • 使用python将CSV和Excel表格数据导入到Word表格

    使用python将CSV和Excel表格数据导入到Word表格

    在不同格式的文档之间进行数据传输是非常重要的操作,例如将CSV和Excel表格数据导入到Word文档中,不仅可以实现数据的有效整合与展示,还能极大地提升工作效率和文档的专业性,本文将介绍如何使用Python将CSV和Excel表格数据导入到Word文档中并创建表格
    2024-09-09
  • tornado+celery的简单使用详解

    tornado+celery的简单使用详解

    今天小编就为大家分享一篇tornado+celery的简单使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用Python来开发Markdown脚本扩展的实例分享

    使用Python来开发Markdown脚本扩展的实例分享

    这篇文章主要介绍了使用Python来开发Markdown脚本扩展的实例分享,文中的示例是用来简单地转换文档结构,主要为了体现一个思路,需要的朋友可以参考下
    2016-03-03
  • SpringMVC和SpringBoot接收参数的几种方式详解

    SpringMVC和SpringBoot接收参数的几种方式详解

    这篇文章主要介绍了SpringMVC和SpringBoot接收参数的几种方式详解,Spring是分层的JavaSE/EE应用轻量级开源框架,以IoC和AOP为内核,提供了展现层 Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,需要的朋友可以参考下
    2023-07-07
  • Python NumPy随机抽模块介绍及方法

    Python NumPy随机抽模块介绍及方法

    这篇文章主要介绍了Python NumPy随机抽模块介绍及方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • Python 和 JS 有哪些相同之处

    Python 和 JS 有哪些相同之处

    Python 是一门运用很广泛的语言,自动化脚本、爬虫,甚至在深度学习领域也都有 Python 的身影。下面通过本文给大家介绍Python 和 JS 有哪些相同之处,需要的朋友参考下吧
    2017-11-11
  • Python使用multiprocessing创建进程的方法

    Python使用multiprocessing创建进程的方法

    这篇文章主要介绍了Python使用multiprocessing创建进程的方法,实例分析了multiprocessing模块操作进程的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 浅谈pytorch、cuda、python的版本对齐问题

    浅谈pytorch、cuda、python的版本对齐问题

    今天小编就为大家分享一篇浅谈pytorch、cuda、python的版本对齐问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 解决matplotlib画图弹出窗口,但是未响应的问题及分析

    解决matplotlib画图弹出窗口,但是未响应的问题及分析

    matplotlib弹出窗口未响应或不出图,可能因后端配置问题、GUI库冲突(如Tkinter、PyQt5)或Jupyter环境兼容性引发,解决方法:更换后端至Agg、使用%matplotlib inline、检查依赖冲突并更新库版本
    2025-09-09
  • python playwrigh框架入门安装使用

    python playwrigh框架入门安装使用

    这篇文章主要为大家介绍了python playwrigh框架入门的安装使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论