Python 和 Tesseract 实现验证码自动识别

news/2025/2/12 22:28:25/文章来源:https://www.cnblogs.com/ocr12/p/18712238

验证码(CAPTCHA)是广泛应用于网站、应用程序等平台中的一种安全措施,旨在防止机器人自动提交表单、注册账号或进行其他自动化操作。为了让程序自动化识别验证码,我们可以使用光学字符识别(OCR)技术。Tesseract 是一个强大的开源 OCR 引擎,本文将介绍如何利用 Python 和 Tesseract 来识别验证码中的文字。

  1. 环境准备
    安装 Python 和必要的库
    首先确保你已经安装了 Python。如果尚未安装,可以从 Python 官网 下载并安装。

在使用 Tesseract 进行 OCR 之前,我们需要安装以下几个 Python 库:

pytesseract:Python 的 Tesseract OCR 接口。
opencv-python:用于图像处理的库,特别是图像读取、预处理和图像变换。
Pillow:Python 的图像处理库,用于打开和保存图像。
可以通过 pip 安装这些库:

bash
更多内容访问ttocr.com或联系1436423940
pip install pytesseract opencv-python pillow
安装 Tesseract OCR 引擎
Tesseract 是一个开源的 OCR 引擎,需要在本地安装。安装方式如下:

Linux(Ubuntu):

bash

sudo apt install tesseract-ocr
macOS(使用 Homebrew):

bash

brew install tesseract
Windows: 访问 Tesseract GitHub 页面 下载适用于 Windows 的安装包。安装后,需要将 Tesseract 的安装路径添加到系统的环境变量中。

在命令行中输入以下命令,检查是否成功安装 Tesseract:

bash

tesseract --version
2. 编写验证码识别代码
在本节中,我们将展示如何编写一个 Python 程序,使用 Tesseract OCR 引擎识别验证码。以下是一个基本示例:

python

import pytesseract
from PIL import Image
import cv2

设置 Tesseract 的路径(Windows 用户需要配置路径)

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

读取验证码图像

image_path = 'captcha_image.png' # 你的验证码图像路径
image = cv2.imread(image_path)

转换为灰度图像

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

去噪处理:高斯模糊

blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

自适应阈值化处理

binary_image = cv2.adaptiveThreshold(blurred_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

可选:保存预处理后的图像

cv2.imwrite('processed_captcha.png', binary_image)

使用 Tesseract 进行 OCR 识别

text = pytesseract.image_to_string(binary_image, config='--psm 6')

打印识别的验证码内容

print(f"识别的验证码是:{text.strip()}")
3. 代码解析
图像处理
加载图像:

使用 OpenCV 的 cv2.imread() 函数加载图像文件。image_path 变量是图像的路径,可以根据需要修改为实际文件路径。
灰度化:

使用 cv2.cvtColor() 将图像转换为灰度图像。灰度化可以去除颜色信息,仅保留亮度信息,从而减少干扰。
去噪声:

使用高斯模糊(cv2.GaussianBlur())对图像进行平滑处理,这有助于去除背景噪声,使字符边缘更加清晰。
二值化:

cv2.adaptiveThreshold() 对图像进行自适应阈值化处理,将图像转换为黑白二值图像。此操作有助于突出文本部分,使得 OCR 引擎更容易识别。
OCR 识别
pytesseract.image_to_string() 函数用于将图像传递给 Tesseract 引擎进行 OCR 识别,返回识别的文本结果。
参数 config='--psm 6' 是 Tesseract 的页面分割模式(Page Segmentation Mode),指定了 OCR 引擎对图像进行识别时的页面布局模式。--psm 6 适用于文本内容为单一块的图像,这通常适合验证码类型的图像。
输出结果
程序将输出 Tesseract 识别的验证码内容。如果验证码是 A1B2C3,程序的输出将是:
text

识别的验证码是:A1B2C3
4. 运行程序
将上述代码保存为 Python 文件(例如 captcha_recognition.py),并确保验证码图像(如 captcha_image.png)在同一目录下。然后,在命令行中运行以下命令:

bash

python captcha_recognition.py
程序会加载图像,进行处理并输出识别结果。

  1. 提高识别准确度
    如果在某些情况下,OCR 识别的精度不够高,你可以尝试以下方法来提高识别准确度:

  2. 更改阈值化方法
    除了自适应阈值化外,你还可以尝试 Otsu 阈值化方法:

python

ret, binary_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
2. 去噪声
如果验证码图像有较多的噪声,可以尝试其他去噪方法,如中值滤波:

python

denoised_image = cv2.medianBlur(binary_image, 3)
3. 调整 Tesseract 配置
Tesseract 提供了多种页面分割模式(PSM)。根据图像的结构,你可以尝试不同的 PSM 来提高识别准确度。例如:

--psm 3:适用于单行文本。
--psm 6:适用于文本块。
--psm 11:适用于稀疏文本。
python

text = pytesseract.image_to_string(binary_image, config='--psm 3')
4. 使用深度学习 OCR 模型
对于复杂或极度扭曲的验证码,传统的 Tesseract 引擎可能难以识别。这时,你可以考虑使用基于深度学习的 OCR 模型,例如 EasyOCR 或 PaddleOCR,这些模型对于处理具有噪声、扭曲的图像有更好的表现。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网最强 DeepSeek 插件上线!支持多家云服务,一键解锁满血版 AI

前言 自 DeepSeek 推出以来,其回答质量备受好评。然而,许多用户在连续提问时经常遇到“服务器繁忙,请稍后再试”的提示。随着各大云服务商陆续部署 DeepSeek 的完整模型,我们其实可以通过这些厂商的 API,享受更加流畅和高效的 DeepSeek 体验,不仅响应速度更快,还能大幅减…

在郑州考巡游出租汽车驾驶员从业资格证的前后经过

1、下载并安装使用360安全浏览器,切换到兼容模式,输入如下网址进行访问. 郑州市出租车从业资格申报系统网址:http://www.zztaxi.cn:9890/zzsq/2、点击“注册”,进行账号注册3、注册完毕后进行登录,左侧菜单选择“从业资格申请” 想考出租车证选择“巡游车驾驶员”,想考网…

Encoder-Decoder框架

1.介绍 编码器-解码器,是深度学习中常见的模型框架。Encoder-Decoder 并不是一个具体的模型,而是一个通用的框架。Encoder 和 Decoder 部分可以是任意文字,语音,图像,视频数据,模型可以是 CNN,RNN,LSTM,GRU,Attention 等等。所以,基于 Encoder-Decoder,我们可以设计…

Macbook装Window后闪屏

打开英特尔显卡控制面板电源-使用电池 把各种模式下的面板自行刷新功能禁用掉。

DeepSeek 保姆级技巧,强烈建议收藏!

DeepSeek 已经成为了全球热点,因为做自媒体的原因能看到各种留言,我发现大家对 DeepSeek 的认识,千差万别差距巨大。 比如有的读者说,DeepSeek 是“水变油”骗局;有的读者说它就是忽悠国外的东西;还有的说它是中国国运堪比六代机,还有的说 DeepSeek 就是 AI 版本的小米等…

Macbook装Window后触摸滑动方向反

找到设备id 可以看到我的是: VID_05ac&PID_0276&MI_02&Col01\6&8d58d53&0&0000如果有多个,可以在常规>位置中根据命名区分 对其设置 输入 regedit,打开注册表, 然后依次找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\VID_05ac&am…

Spring 项目接入 DeepSeek,分享两种超简单的方式!

DeepSeek 作为一款卓越的国产 AI 模型,越来越多的公司考虑在自己的应用中集成。对于 Java 应用来说,我们可以借助 Spring AI 集成 DeepSeek,非常简单方便! 相关文章推荐:DeepSeek 的这波回答我给满分! IDEA 接入 DeepSeek,太酷了!Spring AI 是什么? Spring AI 从著名的 …

我命由我不由天?

作为一名大一学生,还有几天就下学期开学了,至今还感到迷茫,不知道这个被迫选择的专业应该怎么学,回头看看高中的同学虽然与我专业不同,但是却自学这门让我逃之不及的一门课,并且人家也有着明确的目标与计划,而我确是一个普普通通的二本学生,并不知道应该如何做,也没有…

是“陷阱”还是“机遇”,怎么办?

作为一名大一学生,还有几天就下学期开学了,至今还感到迷茫,不知道这个被迫选择的专业应该怎么学,回头看看高中的同学虽然与我专业不同,但是却自学这门让我逃之不及的一门课,并且人家也有着明确的目标与计划,而我确是一个普普通通的二本学生,并不知道应该如何做,也没有…

C#/.NET/.NET Core技术前沿周刊 | 第 24 期(2025年1.27-1.31)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

deepseek-v3 论文阅读

deepseek-v3论文中 AIInfra相关的技术学习模型结构 MLA(Multi-Head Latent Attention) 主要作用是在保证效果的基础上, 利用低秩压缩的原理优化kvCache, 加速推理, 同时节省训练显存. 先回忆下MHA, 在每个head上, 分别经过K, V生成 $ attnweights=(W_Qh_i)^T∗(W_Kh_j) $, 然后…

大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!

1 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来! 1.1 背景目前AI已经大行其道,chatGPT、DeepSeek等如雨后春笋般涌现出来,笔者做为一个守旧派和顽固派,一直认为AI只是雕虫小技,根本没有办法和人写的代码相提并论,在chatGPT已经大火几年之后仍然一直无动于衷…