免费开源的功能强大并且识别率非常准确的验证码识别开源项目。
验证码(区分计算机和人类的完全自动化公共图灵测试)一直是互联网上至关重要的安全措施,可保护网站免受自动机器人和恶意活动的侵害。然而,随着机器学习和人工智能的快速发展,验证码区分人类和机器的有效性受到质疑。
本学期项目重点关注 Google 的 reCAPTCHAv2 系统,该系统在网络上广泛使用。我们的目标是使用 YOLO(You Only Look Once)等先进深度学习模型来分析 reCAPTCHAv2 在拒绝机器人方面的有效性。我们的研究探索了基于图像的验证码的漏洞,并开发了使用最先进的机器学习技术解决这些问题的有效方法。
我们的主要发现包括:
我们可以 100% 解决 reCAPTCHAv2 提出的验证码,超过了之前作品的成功率(68% 到 71%)。
在 reCAPTCHAv2 中,人类和机器人解决验证码所需的挑战数量没有显着差异,这表明当前的人工智能技术可以有效地利用先进的基于图像的验证码。
reCAPTCHAv2 在评估用户是否为人类时严重依赖 cookie 和浏览器历史数据,这凸显了在 CAPTCHA 设计中考虑用户特定数据的重要性。
要求
Python 3.9
Firefox (Geckodriver)
所需的库(参见requirements.txt )
安装
克隆存储库
安装所需的库:
cpp
pip install -r requirements.txt
- 运行test_environment.py以解决多个 reCAPTCHA 挑战并创建日志文件:
cpp
python test_environment.py
数据
分类任务的训练数据可以在这里找到。
可以在此处找到分类任务的验证数据。
项目结构
该项目具有以下目录结构:
assets/ :包含 README 中使用的图像。
IP/ :包含用于更改 IP 地址的脚本。
vpn.py :用于更改 IP 地址的脚本(仅适用于 macOS)。
models/ :包含项目中使用的所有模型。
YOLO_Classification/ :包含用于分类的YOLO模型。
YOLO_Segment/ :包含用于分割的YOLO模型。
utils/ :包含实用程序脚本。
collect_data.py :用于收集分类模型数据的脚本。
label_tool.py :用于标记验证码图像的 UI 工具。
visualize_log_files.py :分析日志文件,提供对任务尝试、其分布和关键统计度量的见解。
README.md :此文件提供了项目的概述。
solve_recaptcha.py :使用 Selenium 解决单个 reCAPTCHA 挑战的演示脚本。
test_environment.py :用于使用 Selenium 解决多个 reCAPTCHA 挑战并创建日志文件的演示脚本。
requirements.txt :包含项目所需的库。
系统兼容性
请注意,该项目中的代码是在 macOS M1 上开发和测试的。虽然大多数代码应与其他操作系统兼容,但某些功能(例如 VPN 脚本 ( vpn.py ))可能无法在非 macOS 系统上运行。如果您在不同操作系统上运行代码时遇到任何问题,请参阅项目中使用的特定库或工具的文档,以获取有关如何为您的系统进行设置的指导。
项目链接
https://github.com/aplesner/Breaking-reCAPTCHAv2
以下是一些免费开源且识别率准确的验证码识别项目推荐:
-
MuggleOCR
- 简介:MuggleOCR是一个轻量级的OCR识别模块,特别适合于验证码识别,支持多种验证码类型。
- 优点:体积小,速度快,识别准确率高。
- 缺点:对于非标准字体和复杂背景的验证码识别率可能会降低。
- 访问链接 :GitHub
-
captcha_trainer
- 简介:这是一个生产级别的验证码识别项目,提供了完整的代码实现和训练框架。
- 优点:易用性强,识别准确率高,支持多种验证码类型。
- 缺点:需要一定的机器学习知识背景。
- 访问链接 :GitHub
-
CAPTCHA-breaking
- 简介:基于深度学习的验证码识别解决方案,利用Keras库进行模型搭建和训练。
- 优点:识别准确率高,支持GPU加速。
- 缺点:需要一定的深度学习知识。
- 访问链接 :GitCode
-
ddddocr
- 简介:Python的验证码识别开源库,支持多种验证码类型。
- 优点:使用简单,支持多种语言。
- 缺点:对于特别复杂的验证码识别率可能不高。
- 访问链接 :GitHub
-
PaddleOCR
- 简介:由百度飞桨开源的文字识别模型套件,支持多种语言的文字识别。
- 优点:支持竖排文字识别,轻量级模型,速度快。
- 缺点:对于某些特殊符号的识别效果一般。
- 访问链接 :GitHub
-
CnOCR
- 简介:Python 3下的OCR工具包,支持简体中文、繁体中文、英文和数字的识别。
- 优点:轻量级,速度快,识别效果好。
- 缺点:对于某些复杂场景的识别效果可能不佳。
- 访问链接 :GitHub
-
chineseocr
- 简介:基于yolo3与crnn实现的中文自然场景文字检测及识别。
- 优点:支持多种语言模型修正OCR识别结果。
- 缺点:项目较老,环境配置可能较为困难。
- 访问链接 :GitHub
-
Tesseract OCR
- 简介:一款开源的OCR引擎,支持多种语言的文字识别。
- 优点:支持多种语言,社区支持强。
- 缺点:对于中文验证码的识别效果一般。
- 访问链接 :GitHub
-
EasyOCR
- 简介:一个用于从图像中提取文本的Python模块,支持多种语言。
- 优点:支持多种语言,易于安装和使用。
- 缺点:识别速度较慢。
- 访问链接 :GitHub
-
chinese_lite OCR
- 简介:超轻量级中文OCR,支持竖排文字识别。
- 优点:模型小,速度快。
- 缺点:不支持pip安装,文本位置识别略差。
- 访问链接 :GitHub
-
Tesseract OCR
- 介绍:Tesseract OCR 是一个开源的光学字符识别引擎,支持多种编程语言和平台。它具有很高的识别率,可以识别多种语言和字体。
- 访问链接 :Tesseract OCR
-
OCRopus
- 介绍:OCRopus 是一个开源的光学字符识别系统,它使用机器学习技术来提高识别率。它支持多种编程语言和平台,并且可以识别多种语言和字体。
- 访问链接 :OCRopus
-
Cuneiform
- 介绍:Cuneiform 是一个开源的光学字符识别引擎,它使用神经网络技术来提高识别率。它支持多种编程语言和平台,并且可以识别多种语言和字体。
- 访问链接 :Cuneiform
-
GOCR
- 介绍:GOCR 是一个开源的光学字符识别引擎,它使用模板匹配技术来提高识别率。它支持多种编程语言和平台,并且可以识别多种语言和字体。
- 访问链接 :GOCR
-
Leptonica
- 介绍:Leptonica 是一个开源的图像处理库,它提供了许多图像处理和分析功能。它可以用于预处理和后处理OCR任务,提高识别率。
- 访问链接 :Leptonica
-
OpenCV
- 介绍:OpenCV 是一个开源的计算机视觉和机器学习库,它提供了许多图像处理和分析功能。它可以用于预处理和后处理OCR任务,提高识别率。
- 访问链接 :OpenCV
-
PyTesseract
- 介绍:PyTesseract 是一个Python接口,用于调用Tesseract OCR引擎。它提供了简单易用的API,可以方便地进行OCR任务。
- 访问链接 :PyTesseract
-
OCRmyPDF
- 介绍:OCRmyPDF 是一个Python脚本,用于将PDF文件转换为可搜索的PDF文件。它使用Tesseract OCR引擎进行OCR任务,并且可以识别多种语言和字体。
- 访问链接 :OCRmyPDF
-
EasyOCR
- 介绍:EasyOCR 是一个Python库,用于简化OCR任务。它提供了简单易用的API,可以方便地进行OCR任务,并且支持多种语言和字体。
- 访问链接 :EasyOCR
-
PaddleOCR
- 介绍:PaddleOCR 是一个基于PaddlePaddle的OCR模型,它使用深度学习技术来提高识别率。它支持多种编程语言和平台,并且可以识别多种语言和字体。
- 访问链接 :PaddleOCR
这些验证码识别开源项目各有特色,你可以根据自己的需求选择适合自己的项目。请注意,以上项目的识别率和准确性可能会因验证码的复杂度和类型而有所不同。
支持实时识别,以下是满足条件"支持实时识别"的验证码识别项目:
-
MuggleOCR
- 简介:MuggleOCR是一个轻量级的OCR识别模块,特别适合于验证码识别,支持多种验证码类型。
- 优点:体积小,速度快,识别准确率高,支持实时识别。
- 访问链接 :GitHub
-
captcha_trainer
- 简介:这是一个生产级别的验证码识别项目,提供了完整的代码实现和训练框架,支持实时识别。
- 优点:易用性强,识别准确率高,支持多种验证码类型。
- 缺点:需要一定的机器学习知识背景。
- 访问链接 :GitHub
-
ddddocr
- 简介:Python的验证码识别开源库,支持多种验证码类型,包括点选和滑块验证码。
- 优点:使用简单,支持多种语言,适合用于在线验证码验证。
- 缺点:对于特别复杂的验证码识别率可能不高。
- 访问链接 :官网
-
PaddleOCR
- 简介:由百度飞桨开源的文字识别模型套件,支持多种语言的文字识别。
- 优点:支持竖排文字识别,轻量级模型,速度快,适合实时识别。
- 缺点:对于某些特殊符号的识别效果一般。
- 访问链接 :GitHub
-
Tesseract OCR
- 简介:一款开源的OCR引擎,支持多种语言的文字识别。
- 优点:支持多种语言,社区支持强,适合实时识别。
- 缺点:对于中文验证码的识别效果一般。
- 访问链接 :GitHub
-
PyCapt
- 简介:一个开源的Python库,专为自动化处理和识别图像验证码而设计。
- 优点:利用深度学习算法,能够适应多种类型的验证码,支持实时识别。
- 访问链接 :GitCode
-
AJ-Captcha
- 简介:一个全类型的验证码识别平台,支持多种验证码的识别。
- 优点:识别准确率高,支持实时识别。
- 访问链接 :Gitee
-
GEEPASS
- 简介:极通AI识别平台,提供全类型验证码识别服务。
- 优点:高精度低延迟的AI模型,支持实时识别。
- 访问链接 :官网
-
Siamese-pytorch
- 简介:孪生神经网络,用于解决比较和相似性度量的问题,适用于点选验证码。
- 优点:可以用于点选验证码的识别,支持实时识别。
- 访问链接 :GitHub
-
chineseocr
- 简介:基于yolo3与crnn实现的中文自然场景文字检测及识别。
- 优点:支持多种语言模型修正OCR识别结果,适合实时识别。
- 缺点:项目较老,环境配置可能较为困难。
- 访问链接 :GitHub
以下是一些专门针对复杂验证码设计的开源项目:
-
MuggleOCR
- 简介:MuggleOCR是一个轻量级的OCR识别模块,特别适合于验证码识别,支持多种验证码类型,包括复杂的验证码。
- 优点:体积小,速度快,识别准确率高;支持实时识别。
- 访问链接 :GitHub
-
ddddocr
- 简介:ddddocr是一个基于深度学习的OCR库,用于识别图片中的文字,支持多种验证码类型,包括点选和滑块验证码。
- 优点:使用简单,支持多种语言,适合用于在线验证码验证。
- 访问链接 :官网
-
GEEPASS
- 简介:极通AI识别平台,提供全类型验证码识别服务,包括动态验证码。
- 优点:高精度低延迟的AI模型,支持多种复杂验证码。
- 访问链接 :官网
-
captcha_trainer
- 简介:这是一个生产级别的验证码识别项目,提供了完整的代码实现和训练框架,支持复杂验证码。
- 优点:易用性强,识别准确率高,支持多种验证码类型。
- 访问链接 :GitHub
-
PaddleOCR
- 简介:由百度飞桨开源的文字识别模型套件,支持多种语言的文字识别。
- 优点:支持竖排文字识别,轻量级模型,速度快,适合实时识别。
- 访问链接 :GitHub
-
Tesseract OCR
- 简介:一款开源的OCR引擎,支持多种语言的文字识别。
- 优点:支持多种语言,社区支持强,适合实时识别。
- 访问链接 :GitHub
-
Joplin
- 简介:Joplin是一款完全免费开源的笔记软件,功能强大、支持同步、加密笔记。
- 优点:支持与OneDrive、Dropbox等网盘同步;支持待办事项;支持Markdown语法;笔记端到端加密。
- 访问链接 :官网
-
captcha_platform
- 简介:这是一个验证码识别平台,支持多模型部署和服务。
- 优点:支持模型热拔插,版本控制灵活,支持批量识别。
- 访问链接 :GitHub
-
Siamese-pytorch
- 简介:孪生神经网络,用于解决比较和相似性度量的问题,适用于点选验证码。
- 优点:可以用于点选验证码的识别,支持实时识别。
- 访问链接 :GitHub
-
chineseocr
- 简介:基于yolo3与crnn实现的中文自然场景文字检测及识别。
- 优点:支持多种语言模型修正OCR识别结果,适合实时识别。
- 访问链接 :GitHub
提高验证码识别准确率的方法通常涉及以下几个方面:
-
数据增强:通过旋转、缩放、裁剪、颜色变换等操作,生成更多的训练数据,以提高模型的泛化能力。
-
模型选择和优化:选择合适的深度学习模型,如卷积神经网络(CNN)、循环神经网络(RNN)等,并通过调整超参数、增加层数、使用正则化等方法来优化模型。
-
特征提取:通过图像处理技术,如二值化、去噪、边缘检测等,提取出验证码中的关键特征,以提高识别率。
-
多模型融合:通过集成多个模型的预测结果,如使用投票机制、加权平均等方法,来提高识别率。
-
对抗样本防御:通过对抗样本训练模型,使其能够识别出经过微小扰动的验证码,以提高模型的鲁棒性。
-
硬件加速:使用GPU、TPU等硬件加速器,来加快模型的训练和推理速度,从而提高识别率。
-
数据预处理:通过图像缩放、归一化、标准化等操作,将输入数据转换为适合模型训练的格式,以提高识别率。
-
模型评估和调优:通过交叉验证、混淆矩阵、ROC曲线等方法,评估模型的性能,并根据评估结果进行调优,以提高识别率。
-
领域知识应用:利用特定领域的知识,如验证码的常见模式、字符分布等,来优化模型的设计和训练,以提高识别率。
-
持续学习和更新:随着新类型的验证码不断出现,需要不断地更新和优化模型,以保持识别率的稳定和提高。
验证码的数据增强是一种提高模型泛化能力的技术,通过生成更多的训练数据来提高模型的识别准确率。以下是一些常见的数据增强方法:
-
旋转:通过旋转验证码图像,可以生成新的训练样本。旋转的角度可以是随机的,也可以是固定的。
-
缩放:通过缩放验证码图像,可以生成新的训练样本。缩放的比例可以是随机的,也可以是固定的。
-
裁剪:通过裁剪验证码图像,可以生成新的训练样本。裁剪的位置和大小可以是随机的,也可以是固定的。
-
颜色变换:通过改变验证码图像的颜色,可以生成新的训练样本。颜色变换可以包括亮度、对比度、饱和度等参数的调整。
-
噪声添加:通过在验证码图像中添加噪声,可以生成新的训练样本。噪声可以是高斯噪声、椒盐噪声等。
-
模糊处理:通过模糊验证码图像,可以生成新的训练样本。模糊处理可以包括高斯模糊、均值模糊等。
-
几何变换:通过几何变换,如仿射变换、透视变换等,可以生成新的训练样本。
-
字符替换:通过替换验证码中的字符,可以生成新的训练样本。字符替换可以包括同音字、形近字等。
-
背景添加:通过在验证码图像中添加背景,可以生成新的训练样本。背景可以是随机的,也可以是固定的。
-
遮挡处理:通过在验证码图像中添加遮挡,可以生成新的训练样本。遮挡可以是随机的,也可以是固定的。
以下是一些可以帮助进行验证码数据增强的工具:
-
Keras ImageDataGenerator:Keras是一个流行的深度学习框架,它的ImageDataGenerator类可以用于数据增强。你可以使用它来进行旋转、缩放、裁剪、颜色变换等操作。
-
Augmentor:Augmentor是一个Python库,专门用于图像数据增强。它支持多种数据增强技术,包括旋转、缩放、裁剪、颜色变换等。
-
imgaug:imgaug是一个用于计算机视觉的图像增强库,它支持多种数据增强技术,包括旋转、缩放、裁剪、颜色变换等。
-
Albumentations:Albumentations是一个用于图像数据增强的Python库,它支持多种数据增强技术,包括旋转、缩放、裁剪、颜色变换等。
-
OpenCV:OpenCV是一个开源的计算机视觉库,它提供了许多图像处理和分析功能,可以用于数据增强。
-
PIL (Python Imaging Library):PIL是一个Python库,用于处理图像。它提供了许多图像处理和分析功能,可以用于数据增强。
-
TensorFlow Data Augmentation:TensorFlow是一个流行的深度学习框架,它的数据增强功能可以用于旋转、缩放、裁剪、颜色变换等操作。
-
PyTorch Data Augmentation:PyTorch是一个流行的深度学习框架,它的数据增强功能可以用于旋转、缩放、裁剪、颜色变换等操作。
验证码数据增强的最佳实践包括以下几个方面:
-
多样化数据增强:使用多种数据增强技术,如旋转、缩放、裁剪、颜色变换等,以生成更多的训练样本。这样可以提高模型的泛化能力,使其能够识别各种类型的验证码。
-
适度的数据增强:虽然数据增强可以提高模型的识别准确率,但是过度的数据增强可能会导致模型过拟合。因此,需要适度地进行数据增强,以保持模型的泛化能力。
-
针对性的数据增强:根据验证码的特点,选择合适的数据增强方法。例如,如果验证码是数字和字母的组合,可以使用字符替换的方法进行数据增强;如果验证码有背景干扰,可以使用背景添加的方法进行数据增强。
-
数据增强的顺序:数据增强的顺序也会影响模型的识别准确率。一般来说,先进行几何变换(如旋转、缩放、裁剪等),再进行颜色变换(如亮度、对比度、饱和度等),最后进行噪声添加。
-
数据增强的可视化:通过可视化数据增强的结果,可以直观地了解数据增强的效果,从而调整数据增强的参数。例如,可以使用matplotlib等库,将增强后的图像显示出来。
-
数据增强的评估:通过评估数据增强的效果,可以了解数据增强是否有效。例如,可以使用交叉验证的方法,评估模型在增强数据集上的表现。
防止验证码识别模型过拟合的方法通常包括以下几个方面:
-
数据增强:通过旋转、缩放、裁剪、颜色变换等操作,生成更多的训练数据,以提高模型的泛化能力。
-
正则化:通过添加正则化项,如L1正则化、L2正则化等,来防止模型过拟合。
-
早停法:在训练过程中,如果验证集的损失函数不再下降,可以提前停止训练,以防止模型过拟合。
-
Dropout:在训练过程中,随机丢弃一部分神经元,以防止模型过拟合。
-
Batch Normalization:通过标准化每一批数据,来提高模型的泛化能力。
-
集成学习:通过集成多个模型的预测结果,如使用投票机制、加权平均等方法,来提高模型的泛化能力。
-
模型选择:选择合适的模型复杂度,以防止模型过拟合。一般来说,模型的复杂度越高,过拟合的风险越大。
-
数据清洗:通过清洗训练数据,去除噪声和异常值,以提高模型的泛化能力。
-
交叉验证:通过交叉验证,评估模型在不同数据集上的表现,以防止模型过拟合。
-
持续学习和更新:随着新类型的验证码不断出现,需要不断地更新和优化模型,以保持识别率的稳定和提高。