使用 Python 实现验证码识别的简单教程

news/2025/1/16 18:40:04/文章来源:https://www.cnblogs.com/ocr12/p/18675583

验证码是用于验证用户是否为机器人的重要工具。在本教程中,我们将利用 Python 和 Tesseract OCR 引擎编写一个程序,用于识别英文和数字组成的验证码。通过适当的图像预处理,我们可以有效地提高识别的准确性。

  1. 环境配置更多内容访问ttocr.com或联系1436423940
    安装 Python 和必需库
    首先,确保你的电脑已安装 Python。如果未安装,请访问 Python 官方网站下载并安装适合的版本。

接下来,我们需要安装以下依赖库:

pytesseract:Tesseract OCR 的 Python 接口,用于与 OCR 引擎交互。
Pillow:用于处理和操作图像。
opencv-python:用于对验证码图像进行预处理。
使用以下命令通过 pip 安装这些库:

bash

pip install pytesseract pillow opencv-python
安装 Tesseract OCR
Tesseract OCR 是一个开源的光学字符识别引擎,必须安装在系统中。根据你的操作系统,以下是安装方法:

Linux:
bash

sudo apt install tesseract-ocr
macOS(通过 Homebrew):
bash

brew install tesseract
Windows:
前往 Tesseract 官方下载页面下载适合的安装包,并完成安装。安装完成后,需要将 Tesseract 的路径添加到环境变量中。
安装完成后,可以运行以下命令检查版本信息:

bash

tesseract --version
2. 代码示例:验证码识别
以下是一个简单的 Python 脚本,用于加载验证码图片、对其进行处理并识别文本内容:

python

import pytesseract
from PIL import Image, ImageOps
import cv2

Windows 用户需要手动设置 Tesseract 的路径(根据你的实际安装路径修改)

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

1. 加载验证码图片

image_path = "captcha_example.png"
image = Image.open(image_path)

2. 将图片转为灰度图,去除颜色干扰

gray_image = ImageOps.grayscale(image)

3. 进行图像的二值化处理(增强对比度)

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

保存处理后的图片(可选)

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

4. 使用 Tesseract OCR 进行识别

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

5. 输出识别结果

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

使用 Pillow 库加载图片,并通过 ImageOps.grayscale 将其转换为灰度图像,减少颜色对 OCR 的干扰。
使用 OpenCV 进一步对图像进行二值化(黑白化),以突出文本部分。
Tesseract OCR 的使用:

pytesseract.image_to_string 是核心方法,用于将图片转换为文本。
--psm 6 参数告诉 Tesseract 将输入视为单行文本,适用于验证码图片的结构。
保存处理后的图片:

处理后的图片可以保存下来,用于检查图像预处理是否有效。
4. 运行程序
将以上代码保存为 captcha_recognition.py,并确保待识别的验证码图片(如 captcha_example.png)与代码位于同一目录。运行脚本:

bash

python captcha_recognition.py
如果一切正常,程序会输出识别出的验证码文本。

  1. 示例演示
    输入图片:
    验证码图片 captcha_example.png

处理后图片:
黑白二值化后的图片 processed_captcha.png

输出结果:
text

识别的验证码是:7G9XK2
6. 提高识别率的技巧
如果初始识别结果不够理想,可以尝试以下方法:

优化图像预处理:

去除噪声(例如模糊滤波、形态学操作)。
调整二值化的阈值(通过实验找到最佳值)。
调整 Tesseract 参数:

修改 --psm 参数(页面分割模式),例如:
--psm 7:将输入视为单行单词。
--psm 8:将输入视为单行单字符。
训练 Tesseract:

如果验证码具有特定字体或格式,可以通过训练 Tesseract 来提升识别效果。

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

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

相关文章

28. 事件处理

一、事件与事件处理 1.1、什么是事件事件是程序收到外界的输入,处于某种状态时自动发送的信号。事件有固定的类型,每种类型有自己的处理函数,用户只要重写这些函数,即可达到特定的目的。通过事件可以用一个控件监测另外一个控件,并可过滤被监测控件发出的事件。可视化应用…

2025上半年

孩子们,正睿补习计划重启了。 自建题单:ZR 2022 summer B - Virtual Judge P10447 最短 Hamilton 路径 - 洛谷 | 计算机科学教育新生态 求从 \(1\) 号点出发恰好经过每个点一次并且最终回到 \(1\) 号点的最短路径。 设 \(dp_{i,s}\) 表示恰好经过了集合 \(s\) 中的点一次,当…

Agent FFT

Agent FFT请你根据 https://www.cnblogs.com/CDOI-24374/p/17733240.html 这篇文章,仿照写一个好的,以下是一篇仿照《Azune FFT》风格的文章: Azune FFT:异界之战 可能是 Azune 童话系列。感谢 int_R 提供灵感与素材,让奇幻之光照亮一切! ——题记 「报告,INQ。已抵达 …

2025/1/16

今天继续学习了Android开发的相关知识,做手机端的app今天学的是用xml文件控制页面,类似javaweb里面的前端,有许多标签,还解决了运行卡退的一个小问题,需要定义一个主题。

CICD Day9、Argo CD增强持续交付

1、Argo CD简介在Jenkins CI/CD流程中的持续交付阶段,既部署到k8s集群阶段,使用kubectl工具来进行应用程序的部署和更新操作,但这种方式无法实时跟踪应用程序的状态。这将造成用户在CI/CD流程完成后需要额外操作kubernetes集群,以进一步查看应用程序的状态。为了解决这些问…

专为高性能计算和低功耗应用设计的MPF100T-1FCVG484E MPF100TL-FCSG325E MPF100TL-FCVG484I PolarFire FPGA产品系列

‌MPF100TL-FCG484E PolarFire FPGA是Microchip推出的一款高性能、低功耗的FPGA产品系列,特别适用于各种需要高性能计算和低功耗的应用场景‌。‌PolarFire FPGA是Microchip推出的一款高性能、低功耗的FPGA产品系列,特别适用于各种需要高性能计算和低功耗的应用场景‌。这些器…

wordpress 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。此响应不是合法的JSON响应。解决方法.210721

两种报错方式: 1.此响应不是合法的JSON响应。 2.从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。 情况:媒体服务器上传小文件没问题,大一点的文件报这个错误。 原因:这是因为nginx限制了请求体大小 方案:需要在nginx的虚拟机配置文件中添加…

docker containner挂掉,无法exec进入bash,如何修改文件的终极解决方法.210730

场景: Nginx在bash里面配置的时候挂掉了,然后docker start不起来,exec bash进不去,造成无法再改里面的文件了 解决方法: 1,docker ps –a 可以查到所有docker,包括没有运行的,找到containner ID [root@hecs-29489 ~]# docker ps -a CONTAINER ID IMAGE COMMAND…

HP惠普笔记本重装系统无法引导无法进操作系统的终极解决方法.210804

F9进入BIOS-先进(Advanced)-安全引导配置- 启用传统支持和禁用安全引导.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0px } .zsleft { float: left } .zsdiv { display:…

Feign与SpringCloud LoadBalancer实现负载均衡源码分析

SpringCloud LoadBalancer 众所周知,SpringCloud体系中负载均衡的组件有SpringCloud LoadBalancer和Ribbon,Ribbon也在逐渐的被替代掉,因为SpringCloud LoadBalancer性能更高,支持响应式 下面通过hard-coded体现一下SpringCloud的负载均衡 首先有一个【say-hello】服务,提…

JS — 判断语句与循环语句

js的判断语句与循环语句...(* ̄0 ̄)ノ判断语句JavaScript中的if-else语句与C++、Python、Java中类似。直接输出到控制台:test.html中的内容为: <script type="module">let score = 90;if (score >= 85) {console.log("A");} else if (score &g…

Living-Dream 系列笔记 第92期

最小路径点覆盖 在一张 DAG 上,求一个路径的集合,使得它们两两不相交,且覆盖所有的点。 结论:答案即为 \(总点数-最大匹配\)(于是 \(总点数-最大匹配=总点数-最小点覆盖=最大独立集=最大团=最小路径点覆盖\))。 证明: 不妨转换角度,从研究路径转为研究点。 因为路径两两…