使用 Python 和 Tesseract OCR 识别验证码的完整流程

news/2025/1/21 21:27:11/文章来源:https://www.cnblogs.com/ocr12/p/18684462

验证码(CAPTCHA)作为一种防止自动化攻击的技术,已经被广泛应用于网站中。它通常要求用户输入图像中的扭曲文字或识别图形内容,以证明其为人类而非机器人。虽然它的目的是为了阻止机器人的访问,但我们可以通过技术手段自动化识别这些验证码。本文将介绍如何使用 Python 和 Tesseract OCR 引擎来识别和提取验证码中的文本。

  1. 环境准备
    安装 Python 和所需库
    首先,确保你的计算机上已安装 Python。你可以访问 Python 官网 下载并安装 Python。

接着,我们需要安装一些常用的库:

pytesseract:这是 Python 的 Tesseract OCR 接口,用来调用 Tesseract 引擎进行文字识别。
Pillow:Python 的图像处理库,常用于加载、修改和保存图像。
opencv-python:强大的计算机视觉库,提供了许多图像处理和计算机视觉功能。
你可以通过以下命令安装这些库:

bash
更多内容访问ttocr.com或联系1436423940
pip install pytesseract pillow opencv-python
安装 Tesseract OCR 引擎
Tesseract 是一个开源的 OCR 引擎,用于从图像中提取文本。你需要根据你的操作系统安装 Tesseract。

Linux:

bash

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

brew install tesseract
Windows: 下载并安装适用于 Windows 的 Tesseract,安装包可从 Tesseract GitHub 页面 获取。安装后,你需要将 Tesseract 的路径添加到环境变量中。

安装完成后,你可以运行以下命令确认 Tesseract 是否正确安装:

bash

tesseract --version
2. 编写验证码识别代码
在安装好相关库和工具后,我们就可以编写 Python 代码来识别验证码了。下面的代码展示了如何加载图像、进行预处理,并使用 Tesseract OCR 引擎识别验证码中的文字。

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'

读取验证码图像

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() 加载验证码图像。在本例中,我们假设图像文件名为 captcha_image.png。
灰度化处理:

使用 cv2.cvtColor() 将图像转换为灰度图像。灰度化通常有助于减少颜色的干扰,突出字符信息。
去噪声处理:

使用高斯模糊(cv2.GaussianBlur())来去除图像中的噪声。模糊处理有助于平滑图像,使得文字更加清晰。
二值化:

使用 cv2.adaptiveThreshold() 进行二值化处理。此方法根据图像局部区域的亮度自适应地调整阈值,将图像转换为黑白图像,使字符更加突出。
OCR 识别
使用 pytesseract.image_to_string() 从预处理后的图像中提取文本。config='--psm 6' 参数指定了页面分割模式(PSM ),--psm 6 是适合多行文本的设置,通常用于验证码图像。
输出结果
程序会输出识别的验证码。例如,如果图像中的验证码是 ABCD1,程序的输出将是:
text

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

bash

python captcha_recognition.py
程序会加载图像并进行处理,最后输出识别到的验证码文本。

  1. 示例演示
    假设我们有一个验证码图像 captcha_image.png,内容如下:

程序将自动处理该图像,提取并输出验证码的字符:

text

识别的验证码是:ABCD1
6. 提高识别精度
如果识别结果不准确,可能是因为验证码的图像质量较差或者复杂性较高。你可以尝试以下优化方法来提高识别效果:

  1. 图像去噪
    如果验证码图像包含很多噪声,可以使用不同的去噪技术,如中值滤波:

python

denoised_image = cv2.medianBlur(binary_image, 3)
2. 自适应阈值化
你可以使用不同的阈值化方法来改善图像的对比度,帮助 OCR 引擎更好地识别字符:

python

binary_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
3. 调整 Tesseract 配置
Tesseract 提供了多种页面分割模式(PSM),可以根据验证码的类型选择合适的模式:

--psm 6:适用于多行文本。
--psm 3:适用于单行文本。
python

text = pytesseract.image_to_string(binary_image, config='--psm 3')
4. 使用深度学习 OCR 模型
对于一些特别复杂的验证码,传统的 OCR 方法可能难以识别。这时可以考虑使用基于深度学习的 OCR 模型,如 EasyOCR 或 PaddleOCR。这些模型能够更好地处理复杂背景、扭曲字符和噪声。

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

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

相关文章

AI人数智能统计监测摄像头

AI人数智能统计监测摄像头具有高效的图像识别功能。通过先进的图像处理算法,可以快速准确地识别出场景中的人群,并进行实时统计。无论是密集的人流场所还是较为稀疏的区域,这种摄像头都能够精准地进行人数统计,为管理者提供重要参考信息。AI人数智能统计监测摄像头具有实时…

Android 中的卡顿丢帧原因概述 - 方法论

Android 手机使用中的卡顿问题 , 一般来说手机厂商和 App 开发商都会非常重视 , 所以不管是手机厂商还是 App 开发者 , 都会对卡顿问题非常重视 , 内部一般也会有专门的基础组或者优化组来进行优化 . 目前市面上有一些非常棒的第三方性能监控工具 , 比如腾讯的 Matrix ; 手机厂…

JavaScript的常用库 —— jQuery

利用JS去操控HTML和CSS,常用库之jQuery ฅʕ•̫͡•ʔฅjQuery用来更加方便地去控制前端的HTML标签和CSS属性。使用方式:1. 直接在<head>元素中添加: <script src="https://cdn.acwing.com/static/jquery/js/jquery-3.3.1.min.js"></script> 2…

2 FreeRTOS移植

2 FreeRTOS移植 2.1 源码基本认识获取源码。官网地址:FreeRTOS™ - FreeRTOS™ 源码内文件结构:1) FreeRTOS文件夹结构2) Source文件夹结构3) portable文件夹结构 portable文件夹里面有编译器、内核环境可以选择。其中keil是我们使用的编译器类型,但Keil文件夹里只有一个…

22蓝帽初赛

参考wp:http://mp.weixin.qq.com/s?__biz=Mzk0MTQzNjIyNg==&mid=2247487196&idx=1&sn=48094c5a78749b45c3598ed51a5df0e3&chksm=c3901b8acd56bc2d1d06b323e9d1e86b90048a35dc3b3301b60bb1f488a764f0b52ebc490113&mpshare=1&scene=23&srcid=01218…

【Azure APIM】APIM服务配置网络之后出现3443端口不通,Management Endpoint不健康状态

如果没有关联的网络安全组,则阻止所有网络流量通过子网和网络接口。问题描述 APIM服务在配置网络之后,查看网络状态发现Management Endpoint是不健康状态, 提示无法连接到3443端口。错误消息: Failed to connect to management endpoint at xxxxxxxx.management.azure-api.…

【模拟电子技术】11-放大电路的性能指标

【模拟电子技术】11-放大电路的性能指标通过输入,输出侧的各一个电容来到输入纯交流,输出纯交流Ui变化引起UBE变化,UBE变化引起IB变化,IB变化引起IC变化,IC变化引起UCE变化,UCE变化引起Uo变化关于输入,输出等效电路的问题: 输入电阻Ri越大越好还是越小越好?当然是越大…

解决 WebSocket 连接断开问题:前端心跳机制的实现与优化

在开发过程中,我们经常会遇到需要实时通信的场景,而 WebSocket 是一种非常合适的技术选择。然而,在实际使用 WebSocket 的过程中,我们可能会遇到连接频繁断开的问题。最近,我在一个项目中就遇到了这样的问题,经过一番探索和优化,终于找到了解决方案,现在与大家分享一下…

图片内存变大

平时我们会经常遇到压缩图片内存的情况,但是需要把图片内存变大的情况有人遇到过吗,接下来就是图片变大术的详细教程!将需要处理的图片放在一个文件夹内(例:图片a.png放在D盘根目录下)win+R输入cmd打开命令控制行在命令控制行输入cd+图片所在的目录,如果是在磁盘根目录直…

paddleocr图片文字识别

介绍:PaddleOCR是由百度开发的一个OCR库,基于深度学习框架PaddlePaddle。PaddleOCR支持多语言文本识别,特别适合中文场景,同时它还提供了丰富的预训练模型。 1、安装pip3 install paddlepaddle pip3 install paddleocr2、使用from paddleocr import PaddleOCRdef paddle_im…

picoctf_2018_rop chain

main里面有个gets溢出函数,再点开flag函数看可以看到传入了一个a1参数,如果win1和win2都是1且a1为-559039827时会输出flag的值用十六进制比较,该数的十六进制可以直接再ida里面看到看到win1函数设置了win1为1,win2函数需要再传入一个参数为-1163220307那么win2就是1了这个参…

whuwc 游记

whuwc 游记whuwc 游记Star Sky Here we are 我们在此地 Riding the sky 翱翔于天际 Painting the night with sun 绘夜空以晨旭 You and I, Mirrors of night 你和我 交相辉映 Twin flames of fire 如两团火焰 Lit in another time and place 闪亮在彼时彼地 I knew your name …