Python图形验证码的识别:一步步详解

news2024/9/23 23:24:57

在Web开发和自动化测试中,图形验证码的识别是一项常见且重要的任务。图形验证码作为防止自动化攻击的一种手段,通过随机生成包含字符或数字的图片来增加用户验证的难度。然而,对于需要自动化处理的场景,如Web自动化测试或爬虫,图形验证码的自动识别显得尤为重要。本文将详细介绍如何使用Python来识别图形验证码。

1. 准备工作

1.1 安装必要的库

使用tesserocr技术进行图形验证码的识别是一个涉及图像处理和OCR(Optical Character Recognition,光学字符识别)技术的过程。tesserocr是Python的一个OCR识别库,它实际上是对Tesseract-OCR引擎的一层Python API封装,因此其核心是Tesseract-OCR。

安装tesserocr库:

pip install tesserocr Pillow

1.2 配置pytesseract

安装完Tesseract-OCR后,你需要在Python中配置pytesseract以使其能够找到Tesseract的执行文件,这可以通过设置环境变量来实现。

2.图形验证码的获取

图形验证码通常由Web服务器随机生成,并以图片的形式呈现给用户。在Python中,你可以使用requests库来下载这些验证码图片。

import requests  
  
def download_captcha(url, save_path):  
    response = requests.get(url)  
    with open(save_path, 'wb') as f:  
        f.write(response.content)    
# 示例URL和保存路径  
captcha_url = 'http://example.com/captcha.jpg'  
save_path = 'captcha.jpg'  
download_captcha(captcha_url, save_path)

3 .验证码图片的预处理

验证码图片往往包含噪点、干扰线等复杂背景,为了提高识别的准确率,需要对图片进行预处理。

from PIL import Image  
  
def preprocess_image(image_path):  
    image = Image.open(image_path)  
    # 转换为灰度图像  
    image = image.convert('L')  
    # 二值化处理  
    threshold = 127  
    table = []  
    for i in range(256):  
        if i < threshold:  
            table.append(0)  
        else:  
            table.append(1)  
    image = image.point(table, '1')  
    return image  
# 预处理验证码图片  
preprocessed_image = preprocess_image('captcha.jpg')

4. 使用OCR识别验证码

经过预处理后的图片,可以使用pytesseract库来进行OCR识别。

def recognize_captcha(image):  
    text = text = tesserocr.image_to_text(image)  
    return text  
  
# 识别验证码  
captcha_text = recognize_captcha(preprocessed_image)  
print(captcha_text)

4实战演练

写代码验证一下两张图片,命名为‘tset01.png’、‘test02.png’,并放入根目录。
在这里插入图片描述在这里插入图片描述

import tesserocr
from PIL import Image


def preprocess_image(image_path):
    image = Image.open(image_path)
    # 转换为灰度图像
    image = image.convert('L')
    # 二值化处理
    threshold = 127
    table = []
    for i in range(256):
        if i < threshold:
            table.append(0)
        else:
            table.append(1)
    image = image.point(table, '1')
    return image


def recognize_captcha(image):
    text = tesserocr.image_to_text(image)

    return text


if __name__ == '__main__':
    imgs = ['test1.png', 'test2.png']
    for i in range(len(imgs)):
        # 预处理验证码图片
        preprocessed_image = preprocess_image(imgs[i])
        # 识别验证码
        captcha_text = recognize_captcha(preprocessed_image)
        print(captcha_text)

打印结果得到:

PFRT

3n3D

5. 注意事项和高级应用

识别精度:OCR识别的精度受到多种因素的影响,包括验证码的复杂度、预处理的效果等。对于复杂的验证码,可能需要更精细的预处理步骤或使用深度学习技术。
第三方打码平台:如果OCR识别无法满足需求,可以考虑使用第三方打码平台。这些平台通常提供更高的识别精度,但可能需要付费。
持续学习:OCR技术不断发展,可以定期更新Tesseract的识别模型,以提高识别效果。

6. 结论

通过本文的介绍,我们了解了如何使用Python和OCR技术来识别图形验证码。从准备工作到最终的识别步骤,每一步都至关重要。虽然OCR识别在大多数情况下都能提供较好的效果,但面对复杂的验证码时,可能需要更复杂的处理手段。希望这篇文章对你有所帮助,如果你有任何问题或建议,请随时留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

悍高集团销售费用居高不下:多起专利诉讼待解,实控人去年被限高消费

《港湾商业观察》施子夫 自2022年7月IPO获深交所主板受理至今&#xff0c;悍高集团股份有限公司&#xff08;以下简称&#xff0c;悍高集团&#xff09;的IPO进程已走过两年时间。 2022年12月&#xff0c;证监会下发反馈意见&#xff1b;2023年3月&#xff0c;深交所发出第一…

提升报价单质量的几个细节 | 全球贸易数据服务 | 箱讯科技

1、报价单的格式至少要两种 提供至少两种格式的报价单&#xff0c;第一种为Word文档&#xff0c;这是供客户修改使用的。但是由于Word文档版本的差别&#xff0c;可能打不开&#xff0c;所以还需提供一个PDF版本。 PDF版本比较正规&#xff0c;是标准的文书。最好再提供一个图…

可靠的图纸加密软件,七款图纸加密软件推荐

大家好啊,我是小固,今天跟大家聊聊图纸加密软件。 作为一名设计师,我深知保护自己的知识产权有多重要。曾经就因为图纸泄露,差点血本无归,那个教训可真是惨痛啊!所以我今天就给大家推荐几款靠谱的图纸加密软件,希望能帮到你们。 固信软件https://www.gooxion.com/ 首先要隆重…

学生信息管理系统(Python+PySimpleGUI+MySQL)

吐槽一下 经过一段时间学习pymysql的经历&#xff0c;我深刻的体会到了pymysql的不靠谱之处&#xff1b; 就是在使用int型传参&#xff0c;我写的sql语句中格式化%d了之后&#xff0c;我在要传入的数据传递的每一步的去强制转换了&#xff0c;但是他还是会报错&#xff0c;说我…

Java延迟任务

什么是延迟任务 我们把需要延迟执行的任务叫做延迟任务&#xff0c;比如业务中用户发送审配&#xff0c;过期后需要执行一些操作&#xff0c;网上订单未支付&#xff0c;红包过期取消等等。 Java API 实现延迟任务 ScheduledExecutorService实现延迟任务 public static voi…

Charles证书的设置抓HTTPS数据包

文章目录 1.安装软件2.安装证书3.配置SSL Proxying Settings4.配置Proxy Settings5.配置浏览器流量走代理模式6.抓包效果 每次换新工作都会重新安装/配置一次Charles抓包工具&#xff0c;每次都要倒腾很久&#xff0c;配置流程不复杂&#xff0c;就是时间一久容易忘记&#xff…

下发预警处理通知,记录处理意见;错误预警修正的智慧油站开源了

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用…

海康威视 Vision Master 深度学习模块

Vision Master 深度学习模块 1. 图像分割2. 字符训练3. 目标检测4. 图像分类、图像检索 1. 图像分割 2. 字符训练 3. 目标检测 4. 图像分类、图像检索

Zilliz Cloud✖️ Ivy.ai:构建 GenAI 驱动的聊天业务

“可靠性、可扩展性和性能都很棒。而且我们可以外包所有这些管理工作&#xff0c;不必担心服务器故障&#xff0c;这有助于我们将资源投入到产品开发和创新上&#xff0c;这真正使得我们的业务与众不同。” ——Michal Oglodek&#xff0c; Ivy.ai CTO 关于Ivy.ai Ivy.ai&am…

AI剪辑短视频以及账号管理矩阵工具系统搭建开发

目录 前言 一、系统有哪些功能&#xff1f; 二、怎么开发 前言 通过AI剪辑短视频以及生成短视频&#xff0c;以及对自媒体账号的管理功能的功能进行开发。这款系统能够批量混合剪辑视频然后一键发布到绑定好的自媒体账号里面。 一、系统有哪些功能&#xff1f; 1.AI智能文…

Django中的超级管理员相关操作

超级管理员操作 场景描述添加超级管理员删除超级管理员更改超级管理员名称 场景描述 在进行管理员操作的时候&#xff0c;密码忘记&#xff0c;导致超级管理员无法使用&#xff0c;因此网上搜索相关操作&#xff0c;进行总结记录 相关操作都是在控制台完成 Terminal 添加超级管…

【Vulnhub靶机tomato渗透】

第一步&#xff1a;端口扫描 我使用的是webrobot 访问这个ip&#xff0c;就是它了 第二步&#xff1a;目录扫描 打开kali使用dirb命令扫描http://192.168.189.154下的目录 dirb http://192.168.189.154扫描到目录。 第三步&#xff1a;访问目录地址 看到有几个php的文件 第…

计算机组成原理--计算机系统概论

目的 将了解计算机的组成、工作原理及应用&#xff0c;掌握各组成部分之间的联系&#xff0c;包括总线、存储器、输入输出系统以及CPU的内部结构和功能。将对计算机体系结构有较好的理解&#xff0c;并具备一定的问题分析和解决能力。 第1章 绪论 计算机的分类计算机的发展简…

在Linux命令行中检查固件版本的7种方法

当前有几种方法可以检查 Linux上的固件或 BIOS 版本&#xff0c;这有助于解决硬件问题&#xff0c;对于保持系统安全和最新至关重要。 在本文中&#xff0c;我们将了解获取系统固件版本的工具和命令&#xff0c;这些固件版本与 BIOS、UEFI 或设备特定的固件有关。每种方法都提…

重生奇迹MU 三位公认的全能职业

今天我们来讨论游戏中公认的三个全能职业&#xff0c;看看它们中的哪一个更值得被称为“全能”。 魔武双修的魔剑士 魔剑士是游戏中最古老也是最受欢迎的特殊职业之一。一个重要的原因是它独特的魔武双修玩法&#xff0c;玩家们喜欢它。魔剑士不仅可以像剑士一样手持双刃&…

【leetcode中】螺旋矩阵2

1.题目描述 . - 力扣&#xff08;LeetCode&#xff09; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,…

Java_微服务

首先介绍一下单体架构与微服务架构&#xff1a; 单体架构&#xff1a; 微服务&#xff1a; SpringCloud&#xff1a; 版本&#xff1a; 标黑部分为目前企业使用最多的版本&#xff0c;因为它支持jdk8、jdk11&#xff0c;下面使用SpringCloud也会使用这个版本。 服务拆分&…

springboot校园商店配送系统-计算机毕业设计源码68448

摘要 本文详细阐述了基于Spring Boot框架的校园商店配送系统的设计与实现过程。该系统针对校园内的用户需求&#xff0c;整合了用户注册与登录、商品浏览与购买、订单管理、配送追踪、用户反馈收集以及后台管理等功能&#xff0c;为校园内的普通用户、商家、配送员和管理员提供…

今年考研报名时间确定了!(内涵西电考研报名流程)

虽然初试时间还没有得到正式官宣&#xff0c;但是再过1个多月&#xff0c;考研人们最近的一件大事——预报名就要来啦&#xff01; ⏰预报名时间 9月24日至9月27日&#xff0c;每天9:00—22:00&#xff1b; ⏰正式报名时间 10月8日至10月25日&#xff0c;每天9:00—22:00。 …

数据开发/数仓工程师上手指南(五)CDM-DIM层搭建规范及流程

前言 在上篇文章的进度和基础之上&#xff0c;我们已经算是构建好了ODS数据引入层&#xff0c;ODS这一层构建的比较简单&#xff0c;没有很多限制规范&#xff0c;但是CDM数据公共层可以算得上是数据仓库的主题&#xff0c;之前我们也将DWD数据明细层、DIM数据维度层和DWS公共…