用 Python 实现验证码文本识别

news/2025/1/16 18:31:02/文章来源:https://www.cnblogs.com/ocr12/p/18675574

在本文中,我们将使用 Python 和 Tesseract OCR 引擎,编写一个程序来识别英文数字验证码的内容。通过图像处理技术和光学字符识别(OCR),我们可以快速提取验证码中的文本。

  1. 环境准备
    安装 Python 和依赖库
    确保已安装 Python。如果尚未安装,可以访问 Python 官网进行下载和安装。接着,我们需要安装以下依赖库:

pytesseract:Python 的 Tesseract OCR 接口。
Pillow:用于加载和处理图像。
opencv-python:用于图像预处理和分析。
通过以下命令安装这些依赖:

bash

pip install pytesseract pillow opencv-python
安装 Tesseract OCR
系统中还需要安装 Tesseract OCR 引擎。如果尚未安装,可以访问 Tesseract 官网获取安装方法,或者使用以下命令安装:

在 Linux 上:
bash

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

brew install tesseract
在 Windows 上:直接从 Tesseract 下载页面下载安装包并完成安装。
确保安装完成后可以通过以下命令验证:

bash

tesseract --version
2. 编写验证码识别程序
下面是一个完整的 Python 示例程序,用于识别验证码中的英文数字:

python

import pytesseract
from PIL import Image, ImageOps
import cv2

设置 Tesseract 的路径(Windows 用户需要指定安装路径)

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

1. 读取验证码图像

image_path = "captcha.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 识别文本

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

输出识别结果

print(f"识别的验证码是: {text}")
3. 关键步骤解析
图像加载与处理
使用 Pillow 加载图像并将其转换为灰度图,可以减少颜色干扰,使文本特征更加突出。
通过 OpenCV 的 cv2.threshold 函数,将图像二值化以去除背景杂质,从而提高识别准确性。
OCR 配置
pytesseract.image_to_string 方法用于从图像中提取文本。
--psm 参数(页面分割模式)影响识别方式:
6 表示按单行模式识别(适用于验证码)。
4. 运行程序更多内容访问ttocr.com或联系1436423940
将上述代码保存为 captcha_recognition.py 文件,并确保目标验证码图片(如 captcha.png)与程序在同一目录下。然后运行程序:

bash

python captcha_recognition.py
程序会加载图像、进行处理,并使用 Tesseract 识别出验证码文本。

  1. 示例输入与输出
    输入:
    原始验证码图像 captcha.png

输出:
识别的验证码是:ABC123

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

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

相关文章

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

毕设学习第四天之Java的注解和反射

注解(Annotation) Java 注解(Annotation)是一种特殊的语言构造,用于为代码元素(如类、方法、字段等)提供元数据,通常不直接影响程序的逻辑执行。它们可以被编译器、框架或工具解析,用于执行特定操作,如自动化配置、代码生成、验证等。Java 提供了内置的注解(如 @Overr…

Docker安装wikijs wiki系统.210818

1. 拉取mysql8的镜像并运行 docker pull mysqldocker run -d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d --name mysql -e TZ=Asia/Shanghai -e MYSQL\_ROOT\_PASSWORD=1234 -p 3306:3306 mysql:latest2. 进入mysql,创建并修改权限 docker…

重载自动驾驶平板车HAV

随着无人驾驶在封闭场地和干线道路场景的加速落地,港口作为无人化运营的先行者,其场景的复杂度、特殊性对无人化运营的技术提出了各种挑战。为了应对港口无人化运营在实质化落地过程的挑战,经纬恒润借助自身在无人驾驶领域的深厚积累与实践,研发了全新的第三代重载自动驾驶…