使用 Python 和 Tesseract 识别复杂验证码

news/2025/1/20 18:24:20/文章来源:https://www.cnblogs.com/ocr12/p/18682281

验证码(CAPTCHA)常用于网站中,目的是防止自动化程序(如爬虫)提交数据或访问资源。它通过生成图像中带有文字、数字、甚至扭曲和加噪的字符,来保证是人类用户在进行操作。在本教程中,我们将通过 Python 和 Tesseract OCR(光学字符识别)来识别和提取验证码中的文本内容。

  1. 环境准备
    安装 Python 和相关库
    首先,确保你已经安装了 Python。若未安装,请访问 Python 官方网站下载并安装。

接着,通过以下命令安装所需的 Python 库:

bash
更多内容访问ttocr.com或联系1436423940
pip install pytesseract pillow opencv-python
这些库的作用如下:

pytesseract:Python 接口,用于调用 Tesseract OCR 引擎。
Pillow:Python 图像处理库,支持多种格式的图像打开和处理。
opencv-python:计算机视觉库,支持图像预处理、图像操作和各种计算机视觉任务。
安装 Tesseract OCR
Tesseract 是我们在验证码识别中使用的核心 OCR 引擎。安装方式如下:

Linux:
bash
更多内容访问ttocr.com或联系1436423940
sudo apt install tesseract-ocr
macOS(使用 Homebrew):
bash

brew install tesseract
Windows: 访问 Tesseract 官方页面 下载并安装合适版本。安装完成后,需要将 Tesseract 路径添加到系统环境变量中。
验证 Tesseract 是否成功安装:

bash

tesseract --version
2. 编写验证码识别程序
接下来,我们将编写 Python 程序来识别验证码。以下代码演示了如何通过图像预处理和 Tesseract OCR 识别验证码中的文本。

python

import pytesseract
from PIL import Image, ImageOps
import cv2

设置 Tesseract 的路径(仅适用于 Windows 用户)

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

加载验证码图片

image_path = "captcha_image.png" # 请替换为你自己的验证码图片路径
image = Image.open(image_path)

转换为灰度图像

gray_image = ImageOps.grayscale(image)

使用 OpenCV 进一步处理图像(二值化)

gray_cv_image = cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2GRAY)
_, binary_image = cv2.threshold(gray_cv_image, 150, 255, cv2.THRESH_BINARY)

可选:保存处理后的图像

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

使用 Tesseract OCR 进行识别

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

输出识别结果

print(f"识别的验证码内容是:{text.strip()}")
3. 代码解析
加载和预处理图像
加载图像:使用 Pillow 库的 Image.open() 方法加载验证码图像文件。
灰度化:为了减少颜色的干扰,我们将彩色图像转换为灰度图像。ImageOps.grayscale() 是 Pillow 中的函数,用于图像灰度化。
二值化:为了进一步提升识别效果,我们使用 OpenCV 库对图像进行二值化处理,简单地将图像分为黑白两种颜色,这样可以提高文字的对比度。
OCR 识别
使用 pytesseract.image_to_string() 方法,Tesseract OCR 会从处理后的图像中提取文字。
参数 config="--psm 6" 告诉 Tesseract 在页面分割模式(PSM)为“假设图像包含多行文本”的情况下进行识别,这对于普通的验证码识别效果较好。
输出结果
最后,我们打印出识别的验证码内容。如果验证码图像质量良好且预处理得当,Tesseract 可以准确识别出文本。

  1. 运行代码
    将代码保存为 captcha_recognition.py,并将验证码图片(例如 captcha_image.png)放在相同目录下。然后运行以下命令:

bash

python captcha_recognition.py
成功运行后,程序会打印出识别的验证码文本。例如:

text

识别的验证码内容是:A4C7D
5. 示例演示
输入图像:
假设验证码图像 captcha_image.png 为:

处理后的图像:
经过二值化和灰度化处理后的图像 processed_captcha.png:

输出结果:
text

识别的验证码内容是:A4C7D
6. 提高识别效果的技巧
如果识别结果不准确,可能是因为图像质量较差或者预处理步骤不足。以下是一些常见的优化方法:

  1. 优化图像预处理
    去噪声:如果验证码图像包含噪声(如干扰线条或背景纹理),可以通过模糊处理(如高斯模糊)或形态学操作(如腐蚀、膨胀)去噪声。

python

blurred_image = cv2.GaussianBlur(binary_image, (5, 5), 0)
自适应二值化:如果验证码图像的背景不均匀,可以使用自适应阈值方法来处理二值化:

python

binary_image = cv2.adaptiveThreshold(gray_cv_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
2. 调整 Tesseract 配置
Tesseract 提供了多种配置选项来帮助识别不同类型的图像。常见的页面分割模式(PSM)包括:

--psm 6:适用于多行文本。
--psm 7:适用于单行文本,适合验证码。
--psm 3:适用于没有固定布局的图像。
通过调整这些配置,可以优化验证码的识别效果。

  1. 使用深度学习方法
    如果验证码的噪声复杂且难以通过传统图像处理方法去除,深度学习模型(如 CRNN 或 PaddleOCR)通常能提供更高的识别准确度。深度学习模型能够处理更复杂的背景和扭曲文本,适用于处理包含复杂噪声和非标准字体的验证码。

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

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

相关文章

PotPlayer 配置安装

目录一、下载1、官网链接2、微软商店 Microsoft Store二、安装1、双击安装包2、选择字体3、安装向导下一步4、接收许可协议5、选择组件及关联6、选择安装位置7、硬解选项三、设置1、关闭自动更新2、左键单双击设置3、视频下自动隐藏3.1、效果对比4、播放信息显示设置4.1、效果5…

2024年春秋杯网络安全联赛冬季赛部分wp

部分附件下载地址: https://pan.baidu.com/s/1Q6FjD5K-XLI-EuRLhxLq1Q 提取码: jay1 Misc day1-简单算术 根据提示应该是异或下载文件是一个字符串,写个代码字符串异或解密,由于需要密钥,所以先对单字节密钥进行爆破解密 爆破出flag代码如下: cipher_text = "ys~xdg/…

大夏龙雀DX-WF25(ESP32C2)蓝牙WIFI模块试用体验

模块尺寸跟引脚兼容常见的ESP8266 12-F模块,使用非常简单,vcc接3.3v,gnd接地,rx连接ch340的tx,tx连接ch340的rx即可。 如果需要通过urat下载程序,只需要把io9的引脚接地就行(下载完程序记得断开io9跟gnd的连接,否则程序无法运行)。芯片用的是ESP32C2(ESP8684),很遗…

1.20 前端连接数据库

今天完成了项目的网页前端与后端数据库的连接,已经能够将前端填写的内容添加到mysql数据库 例如页面如下:数据库内容:明天开始编写下一个功能

【vjudge训练记录】大一寒假专项训练——枚举算法

训练情况A题 给定 \((x,y)\),倒着枚举地毯的范围是否覆盖 \((x,y)\),如果覆盖直接输出,如果全部枚举完都没有则输出 -1点击查看代码 #include <bits/stdc++.h> // #define int long long #define endl \nusing namespace std;void solve(){int n; cin>>n;int x[…

Khepri C2 framework beacons记录(之前的)

1、背景 在查看进程时发现可疑隐藏进程,名称为.test(.test.93627),隐藏文件,很可疑,于是查了下进程日志发现如下:/private/tmp/.test /private/var/db/oah/4b8f81eadefb42da07e9e88fa7905df57faec82d8621008e0ae4a04d81e2169f/bb9595accf35a51de80f42e656bdb2217238af58…

(重要***)查询自己需要的SQL语句

凡是指标相关的,先清空相关干扰条件,然后点击确认,比如加载性能里的列表页面,要查慢加载次数这个指标这个时候去这个数据库 写SQL语句select* fromquery_log ql whereql.user_name = sheng.yu-n@msxf.com order byexec_time desc limit 50然后找到自己对应操作的SQL 通过结…

最强截图录屏工具ShareX v17.0.0 中文绿色版

软件介绍 ShareX 是一款功能强大的屏幕截图和屏幕录制工具,可用于创建高质量的屏幕截图、动画 GIF 和屏幕录像,并提供多种上传选项,使用户能够轻松地将它们共享到互联网上。除此之外,它还支持多种自定义功能,例如图像编辑、颜色拾取、OCR 文字识别等。软件功能快速截图:简…

动态可视化:一步步拆解LSTM和GRU

转自:https://zhuanlan.zhihu.com/p/47907312 编者按:关于LSTM,之前我们已经出过不少文章,其中最经典的一篇是chrisolah的《一文详解LSTM网络》,文中使用的可视化图片被大量博文引用,现在已经随处可见。但正如短视频取代纯文字阅读是时代的趋势,在科普文章中,用可视化取…

【大屏可视化】系统(Vue3 + ECharts5)快速实现和应用 ️

🎶【大屏可视化】系统(Vue3 + ECharts5)🎶这八部~~按照,难易的顺序来进行绘制!!!💯横向柱形图竖向柱形图雷达图环形图关系图数据云图数据展示图地图可视化02:基于 vite 与 tailwindcss 创建大屏可视化项目 1,基于 vite 创建项目,使用: npm create vite@latest …

Markdown转Beamer进阶

接上一篇介绍的基本Markdown通过pandoc编译转为Beamer风格文档的文章,本文主要介绍一些Markdown转Beamer其中的进阶用法。如Mermaid流程图,和Algorithms算法伪代码的使用等。技术背景 在前面的一篇文章中,我们介绍过Markdown转Beamer的基本方法。通过这个方案,我们可以只写…

Markdown转Beamer坑点

接上一篇介绍的基本Markdown通过pandoc编译转为Beamer风格文档的文章,本文主要介绍一些Markdown转Beamer其中的进阶用法。如Mermaid流程图,和Algorithms算法伪代码的使用等。技术背景 在前面的一篇文章中,我们介绍过Markdown转Beamer的基本方法。通过这个方案,我们可以只写…