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

news/2025/11/17 23:15:18/文章来源:https://www.cnblogs.com/ocr12/p/19234776
  1. 安装依赖

首先,确保已安装所需的工具和库。

安装 Tesseract

在 Windows 上,下载安装包并进行安装:Tesseract GitHub。

在 Linux 上,你可以通过以下命令安装:

sudo apt-get install tesseract-ocr

安装 Python 库

使用 pip 安装 Python 库:

pip install pytesseract Pillow opencv-python numpy

  1. 编写 Python 代码

import pytesseract
from PIL import Image
import cv2
import numpy as np

设置 Tesseract 路径(如果在 Windows 上安装)

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

def preprocess_image(image_path):
# 读取图像
img = cv2.imread(image_path)

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 高斯模糊去噪
blurred = cv2.GaussianBlur(gray, (5, 5), 0)# 自适应阈值处理:把图像转换成黑白
binary_image = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 11, 2)# 使用形态学操作去除噪点:膨胀和腐蚀
kernel = np.ones((3, 3), np.uint8)
dilated_image = cv2.dilate(binary_image, kernel, iterations=1)# 对图像进行轮廓检测,去除背景噪声
contours, _ = cv2.findContours(dilated_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 在图像上绘制轮廓,去除可能的干扰
clean_image = np.zeros_like(gray)
for contour in contours:if cv2.contourArea(contour) > 500:  # 过滤掉小面积的轮廓cv2.drawContours(clean_image, [contour], -1, (255, 255, 255), -1)return clean_image

def recognize_captcha(image_path):
# 预处理图像
processed_image = preprocess_image(image_path)

# 将处理后的图像保存为临时文件
temp_image_path = "processed_captcha.png"
cv2.imwrite(temp_image_path, processed_image)# 使用 Tesseract 进行 OCR 识别
text = pytesseract.image_to_string(Image.open(temp_image_path))return text.strip()

if name == 'main':
# 输入验证码图像路径
captcha_image_path = 'captcha_image.png'

# 识别验证码
captcha_text = recognize_captcha(captcha_image_path)print("识别的验证码是:", captcha_text)
  1. 代码解释

  2. Tesseract 设置

如果你没有将 Tesseract 路径添加到环境变量中,可以通过以下方式设置其路径:

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

  1. 图像预处理步骤

灰度化:首先将图像转为灰度图,减少颜色信息,专注于字符形状。

高斯模糊:使用高斯模糊平滑图像,去除一些细小的噪点。

自适应阈值:使用自适应阈值将图像转为黑白二值图,这有助于增强字符的对比度,去除背景干扰。

膨胀操作:通过膨胀操作增强字符的轮廓,使其更加清晰。

轮廓检测:通过轮廓检测来排除一些干扰元素,仅保留字符区域。通过过滤小面积的轮廓,去除不必要的干扰。

  1. OCR 识别

图像处理后,我们将图像传给 Tesseract OCR 进行文字识别。pytesseract.image_to_string() 会返回识别的文本内容。

  1. 运行程序

准备好验证码图像(例如 captcha_image.png),然后运行代码。输出将显示识别出的验证码文本:

识别的验证码是: ab2c1

  1. 优化与改进

进一步去噪:如果验证码图像仍然存在噪点,可以尝试使用中值滤波(cv2.medianBlur())或者更复杂的噪声去除方法。

字符分割:对于一些字符重叠或复杂的验证码,可以尝试更复杂的字符分割技术。可以使用轮廓检测或切割算法将每个字符分开,再逐个识别。

字形训练:如果验证码使用了非常规字体或干扰背景,考虑使用机器学习技术训练 Tesseract 或者结合深度学习模型来识别。

图像增强:尝试增强对比度或使用其他图像增强技术,以帮助 Tesseract 更好地识别验证码。

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

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

相关文章

用 Go 进行验证码识别

安装 Go 和 Tesseract OCR首先,你需要安装 Go 和 Tesseract。 安装 Go:可以从 Go 官方网站 下载并安装。 安装 Tesseract:可以通过以下命令安装 Tesseract OCR。 对于 Ubuntu: sudo apt install tesseract-ocr 对于…

Spring AI Alibaba 项目源码学习(十)-Interceptor

Interceptor 机制分析 请关注微信公众号:阿呆-bot 概述 本文档分析 Spring AI Alibaba Agent Framework 中的 Interceptor(拦截器)机制,包括 ModelInterceptor 和 ToolInterceptor 的设计、实现原理、链式调用机制…

用 Swift 进行验证码识别

安装 Tesseract OCR首先,你需要通过 CocoaPods 来安装 Tesseract OCR 的 Swift 绑定库。首先在项目的根目录下创建一个 Podfile,并添加以下内容: platform :ios, 11.0 target YourAppName do use_frameworks! pod T…

今日复盘

完成了通过ffmpeg将电脑屏幕转为rtsp推流给mediatx服务器,并供给海康威视录像机拉流的实现:ffmpeg -f gdigrab -framerate 15 -video_size 1280x720 -i desktop -c:v libx264 -preset ultrafast -b:v 1500k -maxrate…

2025.11.16 萌熊

2025.11.16 萌熊打! T1 额,显然先手可以退来保留实力,我直接模拟博弈 发现 \(O(1)\) 的 然后每次算一遍就行了 显然有单调性 但没必要二分 T2 额,一眼,感觉我好像在哪见过 然后直接秒了 就是先扫一遍求出到每个点…

在 parse_model 函数中添加了自定义模块支持

第一段代码(已修改版本)在 parse_model 函数中添加了自定义模块支持:n = n_ = max(round(n * depth), 1) if n > 1 else n # depth gain# Custom modules support - Added for RFAConv, HSFPN, HATHead integra…

20232311 2025-2026-1 《网络与系统攻防技术》实验六实验报告

实验内容发现靶机Metasploitable2并进行端口扫描、版本扫描以及漏洞扫描等等 利用Vsftpd源码包后门漏洞进行攻击 利用SambaMS-RPC Shell命令注入漏洞 利用Java RMI SERVER命令执行漏洞 利用PHP CGI参数执行注入漏洞实验…

线程池的概念

线程池的概念核心线程数: 1.corePoolSize:线程池长期维持的线程数量,即使这些线程处于空闲状态,也不会被销毁,(除非设置了allowCoreThreadTimeOut). 2.maximumPolloSize(最大线程数): 线程池允许创建最大的线程…

android compose viewModel 传参数

android compose viewModel 传参数android compose viewModel 传参数 在MainActivity 里面可以用viewModelsval userDao = db.userDao()val viewModel by viewModels<MyArticleViewModel>(factoryProducer = {ob…

奶牛快传服务调整公告

奶牛快传服务调整公告 尊敬的奶牛快传用户 感谢您长期以来的信任与支持。为了更好地服务创作者,未来我们将专注于 稿定设计 的升级与创新。基于这一战略调整,奶牛快传将于 **2025 年 12 月 8 日 ** 正式停止服务。届…

从零实现 REINFORCE/GRPO —— 大模型推理强化微调实践

一文吃透:不依赖成熟 RL 库,如何实现 REINFORCE、REINFORCE-baseline 与 GRPO;数理推理模型的强化学习微调实践;训练/参考/采样模型的多卡调度。引言 你是否也遇到过:模型“会思考”,但少数题正确,格式还常常不…

java for linux 下载

在 Linux 系统上下载 Java,通常有以下几种常见方式:? 方法一:使用 yum(Debian/Ubuntu)安装 Java sudo apt update sudo apt install openjdk-17-jdkopenjdk-17-jdk 是 Java 17 的 JDK(Java Development Kit)。…

13 个 pytest 宝藏插件推荐!(存存存)

pytest-html 核心:一键生成直观的 HTML 测试报告,便于结果查看与分享。allure-pytest 核心:支持步骤描述、附件、分类等,比pytest-html更高级,让测试结果一目了然。pytest-xdist 核心:支持并行测试,通过将测试用…

java 1.8 linux

如果您是在使用 Java 1.8 在 Linux 系统上进行开发或运行,以下是一些常见的命令和脚本示例,帮助您管理 Java 1.8 环境:一、安装 Java 1.8 1. 使用 yum(适用于基于 RHEL/CentOS/Scientific Linux 的系统) sudo yum…

iOS开发Linux

你提到的“iOS开发Linux”可能是一个误解或混淆。iOS 是苹果公司开发的移动操作系统,主要用于苹果设备(如 iPhone、iPad、Apple Watch 等),而 Linux 是一个开源的操作系统,主要用于服务器、嵌入式系统、桌面计算机…

手撸大模型的分布式训练:深刻理解大模型训练的“起飞”原理

单卡不够?内存爆炸?训练太慢? 在大型语言模型(LLM)的训练过程中,单设备算力和内存往往成为性能瓶颈。如何高效地利用多GPU甚至多节点资源进行分布式训练,是每个LLM研究者和工程师必须面对的挑战。本文将深入剖析…

XHORSE XZBT42EN 2-Button HON.D PCBs for Honda Fit XR-V Jazz City 2018-2022 (5pcs/lot)

Solving Honda Remote Key PCB Issues: The XHORSE XZBT42EN Advantage Is your Honda Fit, XR-V, Jazz, or City struggling with unresponsive remote controls? For European and American automotive repair prof…

事件循环其实很简单!

一、概念 JavaScript 是单线程执行(基于执行栈 / 调用栈 call stack),事件循环负责不断地从各种任务队列里取任务执行——以保证异步任务的函数回调按规则有序运行,浏览器环境和 Node.js 环境都使用事件循环,尽管…

从0到1:揭秘LLM预训练前的海量数据清洗全流程

读完这篇文章,你将用监督微调(SFT)把一个 1.5B 规模的数学模型在 GSM8K 上的零样本推理正确率从 1.56% → 62.9%,同时把输出格式遵循率从 18.9% → 100%。我们将完整走通数据集下载、Prompt 架构、训练配置和评估方…

Upgrade Your Key Programming: New Style CG A22-3+1 Flip-4BTN Wire Remote for CGDI K2 (5pcs/lot)

The Frustration of Unreliable Key Remotes: A Problem for Mechanics and Car Owners Alike In the bustling world of automotive repair, few issues frustrate European and American mechanics more than unreli…