当前位置: 首页 > news >正文

Python - 通用滑块验证码识别库 Captcha-Recognizer

Python - 通用滑块验证码识别库 Captcha-Recognizer

  • Captcha-Recognizer 库概述
  • 使用方法
    • 一、HTTP API使用:captcha-api
    • 二、Python安装
  • 使用示例
    • V1版本
      • 基于单缺口/多缺口验证码背景图识别滑块缺口
      • 基于验证码截图的识别滑块缺口
      • 基于验证码截图识别滑块距离
    • V2 增强版
      • V2 Beta 增强版使用示例
  • 注意事项
    • 偏移量
    • 图片缩放
    • 图片识别耗时
  • ddddocr 和 captcha-recognizer 的优缺点分析

滑块验证码缺口位置的精准识别是验证环节的核心,本文将详细介绍一款基于深度学习实现的通用滑块验证码识别库 ——Captcha-Recognizer。该库已封装为易用的 Python 库,仅需三行代码即可完成滑块验证码缺口识别,极大降低了开发者应对滑块验证码的技术门槛。

GitHub仓库:https://github.com/chenwei-zhao/captcha-recognizer
Gitee仓库:https://gitee.com/chenwei-zhaozhao/captcha-recognizer

注:实测比DdddOcr效果好一些,但不绝对,需根据不同场景选择合适的识别工具。

Captcha-Recognizer 库概述

Captcha-Recognizer 是一款易用的通用滑块验证码识别库,通过深度学习训练通用的缺口检测模型,依托训练结果能够精准识别出验证码中的滑块缺口位置,并返回缺口的坐标与可信度。

支持的验证码类型:

  • 单缺口验证码背景图
  • 多缺口验证码背景图
  • 验证码截图(包含滑块和背景图)

以下为三种类型验证码的示例图:


单缺口验证码背景图

多缺口验证码背景图

验证码截图(包含滑块和背景图)

使用方法

一、HTTP API使用:captcha-api

该库提供了基于 Vue + FastAPI 搭建的验证码识别演示平台,相关资源可参考验证码识别库:Captcha Recognizer,适用于需要通过 API 接口调用验证码识别功能的场景。

二、Python安装

通过 Python 的包管理工具 pip 即可轻松安装 Captcha-Recognizer 库,命令如下:

pip install captcha-recognizer

使用示例

V1版本

基于单缺口/多缺口验证码背景图识别滑块缺口


from captcha_recognizer.recognizer import Recognizer# source传入图片路径支持 Union[str, Path, bytes, np.ndarray]
# verbose=False表示关闭冗余输出
# show_result 为True展示识别效果图 (生产环境请设置show_result=False)
# save 为True保存识别结果图 (生产环境请设置save=False)
# is_single 默认为False表示支持多缺口背景图识别,is_single=True表示仅支持单缺口背景图识别(指定is_single为True时,对单缺口背景图识别准确度更高)recognizer = Recognizer()
box, confidence = recognizer.identify_gap(source='your_example_image.png')print(f'缺口坐标: {box}')
print(f'可信度: {confidence}')"""
打印结果如下:
缺口方框坐标: [331.72052001953125, 55.96122741699219, 422.079345703125, 161.7498779296875]
可信度: 0.9513089656829834坐标原点:图片左上角
缺口方框坐标为缺口方框左上角和右下角距离坐标原点的距离
"""

示例图
包括且不限于以下类型、尺寸的滑块图片检测


示例图 1

识别效果示例图1

示例图 2

识别效果示例图 2

示例图 3

识别效果示例图 3

基于验证码截图的识别滑块缺口


from captcha_recognizer.recognizer import Recognizer# source传入图片路径,支持 Union[str, Path, bytes, np.ndarray]
# verbose=False表示关闭冗余输出
# show_result 为True展示识别效果图 (生产环境请设置show_result=False)
# save 为True保存识别结果图 (生产环境请设置save=False)ecognizer = Recognizer()
box, confidence = recognizer.identify_screenshot(source='your_example_image.png')print(f'缺口坐标: {box}')
print(f'可信度: {confidence}')"""
打印结果如下:
缺口方框坐标: [331.72052001953125, 55.96122741699219, 422.079345703125, 161.7498779296875]
可信度: 0.9513089656829834坐标原点:图片左上角
缺口方框坐标为缺口方框左上角和右下角距离坐标原点的距离
"""

示例图 1

识别效果示例图1

基于验证码截图识别滑块距离

from captcha_recognizer.recognizer import Recognizer# source传入图片路径或图片对象,支持Union[str, Path, bytes, np.ndarray]
# verbose=False表示关闭冗余输出
# show_result 为True展示识别效果图 (生产环境请设置show_result=False)
# save 为True保存识别结果图 (生产环境请设置save=False)recognizer = Recognizer()
distance = recognizer.identify_distance_by_screenshot(source='your_screenshot.jpg')print('滑块距离', distance)

V2 增强版

V2增强版,增强了对多缺口复杂验证码的识别效果

V2支持以下类型验证码的识别

  • 单缺口验证码背景图(不含滑块的背景图)
  • 多缺口验证码截图或合成图(含滑块和背景图)

V2 Beta 增强版使用示例

首先需升级库至最新版本,命令如下:

pip install captcha-recognizer --upgrade
# V2增强版
from captcha_recognizer.slider import SliderV2box, confidence = SliderV2().identify(source=f'images_example/example8.png', show=True)
print(f'缺口坐标: {box}')
print('置信度', confidence)

注意事项

偏移量

部分滑块验证码的滑块初始位置存在一定偏移,以如下示例图为例:
在这里插入图片描述

在示例图中:​

  • 第一条黑线位置为滑块初始位置,距离图片边框约 8 个像素的偏移量(offset 为 8)。​
  • 识别结果的缺口坐标为 [x1, y1, x2, y2],对应缺口的左上角和右下角坐标(坐标原点为图片左上角)。​
  • 第二条黑线的 X 轴坐标值对应缺口识别结果左上角的 X 轴坐标值,此处为 154(x1 为 154)。​
  • 因此,实际滑块的距离为 x1 - offset(即 154 - 8 = 146),也就是说实际滑块距离为缺口的 x1 值减去滑块距离图片边框的偏移量 (offset)。

图片缩放

部分验证码在前端渲染时会对图片进行缩放,此时实际的滑块距离需按照图片缩放比例进行计算,以确保滑块移动距离的准确性,示例图如下:

在这里插入图片描述

图片识别耗时

  • 首次识别图片耗时较长(约 2 秒),后续单张图片的识别耗时约为 60 毫秒(60 毫秒)。​
  • 造成首次识别耗时较长的原因是,首次识别时需要将模型从磁盘加载到内存中,并完成权重加载、内存分配等一系列初始化工作,该过程相对耗时。​
  • 一旦模型加载完成并初始化好,后续的图片预测可直接利用已加载的模型和分配好的资源,从而避免重复加载和初始化的开销,大幅缩短识别耗时。

ddddocr 和 captcha-recognizer 的优缺点分析

以下是ddddocr和captcha-recognizer的优缺点分析:

  • ddddocr
    • 优点
      • 简单易用:安装方便,只需几行代码即可实现验证码识别功能,对于开发者来说上手难度低。
      • 支持多种类型:可识别数字、字母、中文等多种类型的验证码,还能处理一些简单的滑块验证码。
      • 速度较快:在CPU环境下单字符识别耗时仅8ms,能够满足一些对识别速度有要求的场景。
      • 轻量级模型:基于CNN的轻量级模型,大小小于15MB,占用资源少,易于集成到各种项目中。
      • 开源免费:项目完全开源,开发者可以免费使用,降低了开发成本。
    • 缺点
      • 准确率有限:对于一些复杂的验证码,可能会出现误识别或无法识别的情况,准确率不是特别高。
      • 特殊字体识别效果差:遇到一些特殊字体的验证码,识别率可能会受到影响。
      • 依赖数据训练:其识别效果依赖于训练数据,对于一些新出现的或与训练数据差异较大的验证码类型,识别效果可能不佳。
      • 内存占用较大:在一些小内存机器上运行可能会存在问题,且识别速度跟机器性能关系很大,CPU性能不佳时速度会较慢。
  • captcha-recognizer
    • 优点
      • 适应复杂场景:基于YOLOv8的轻量化缺口检测模型,能够支持多缺口、旋转干扰、背景噪声等复杂场景下的验证码识别。
      • Python原生API:提供Python原生API,对于Python开发者来说,集成非常方便,几乎没有门槛。
      • 模型轻量化:基于YOLOv8的轻量化模型,在保证一定准确率的同时,对计算资源的需求相对较低,能够在多种设备上运行。
    • 缺点
      • 功能相对单一:主要专注于滑块验证码等特定类型的验证码识别,对于其他类型的验证码,如数字、字母、中文混合的普通字符验证码,可能不如专门的OCR工具如ddddocr支持得好。
      • 准确率受场景限制:虽然能处理复杂场景,但在一些极端复杂或特殊的情况下,其识别准确率可能也会受到影响。
      • 依赖特定模型:其性能和效果依赖于YOLOv8模型的性能和训练情况,如果模型本身存在局限性,可能会影响整体的识别效果。
http://www.dtcms.com/a/366850.html

相关文章:

  • MySQL复制技术的发展历程
  • 【论文阅读—深度学习处理表格数据】ResNet-like FT Transformer
  • 当电力设计遇上AI:良策金宝AI如何重构行业效率边界?
  • 学习嵌入式的第三十三天——网络编程
  • HTB Sau
  • 服务器异常磁盘写排查手册 · 已删除文件句柄篇
  • 稠密矩阵和稀疏矩阵的对比
  • C++面试突击(1)
  • 【面试】MySQL 面试常见优化问题
  • 面试官:如何确保动态线程池任务都执行完?
  • 计算机网络模型入门指南:分层原理与各层作用
  • EasyExcel:阿里开源的高效 Excel 处理工具,轻松解决 POI 内存溢出问题
  • SolidWorks对电脑的硬件配置要求具体有哪些
  • [Sublime Text]-显示菜单栏
  • 《云原生深坑实录:让团队卡壳的不是配置,是底层逻辑盲区》
  • 【Dify】使用工具节点实现 API 接口调用与 JSON 处理
  • 25高教社杯数模国赛【B题超高质量思路+问题分析】
  • 具身智能多模态感知与场景理解:视觉探索
  • 第二阶段WinForm-13:图表控件,N层架构,Dapper
  • 数据结构与排序算法:从理论到场景,解锁高效数据处理的核心逻辑
  • 【项目思路】基于STM32+ZigBee的智能家居--浴室场景设计
  • 服务器异常负载排查手册 · 隐蔽进程篇
  • QT面经(含相关知识)
  • elasticsearch学习(五)文档CRUD
  • 前端跨域终极指南:3 种优雅解决方案 + 可运行 Demo
  • App UI 自动化环境搭建指南
  • Java Stream 流式操作举例
  • QT Creator 使用
  • 【一文了解】C#泛型
  • 数据库集成:使用 SQLite 与 Electron