使用 Python 和 Tesseract 实现验证码识别自动化

news/2025/2/13 19:03:22/文章来源:https://www.cnblogs.com/ocr12/p/18714232

验证码(CAPTCHA)是一种常见的安全措施,广泛应用于网站和应用程序中,目的是为了防止恶意机器人自动提交表单或进行暴力破解攻击。为了自动化识别这些验证码,我们可以借助光学字符识别(OCR)技术。Tesseract 是一个强大的开源 OCR 引擎,能够有效地将图像中的文本转换为字符串。本文将介绍如何使用 Python 和 Tesseract 实现验证码的自动识别。

  1. 环境准备
    在开始之前,你需要确保你的计算机上已安装 Python,并且准备好用于图像处理和 OCR 识别的相关工具。以下是具体步骤。

安装 Python
如果你还没有安装 Python,可以访问 Python 官网 下载安装包并进行安装。安装过程中,记得勾选“Add Python to PATH”选项,以确保在终端中可以直接运行 Python。

安装 Python 库
为了实现验证码的识别,我们需要安装以下 Python 库:

pytesseract:Python 的 Tesseract OCR 接口,用于与 Tesseract 引擎交互。
opencv-python:用于图像处理的库。
Pillow:用于打开和处理图像的库。
使用 pip 安装这些库:

bash

pip install pytesseract opencv-python pillow
安装 Tesseract OCR 引擎
Tesseract 是一个开源的 OCR 引擎,支持多种语言的文本识别。你需要单独安装 Tesseract,安装方法如下:

Windows:

下载适用于 Windows 的 Tesseract 安装包,访问 Tesseract 官方 GitHub。
安装时,记得将 Tesseract 的路径添加到系统的环境变量中。
Linux (Ubuntu):

bash

sudo apt install tesseract-ocr
macOS: 使用 Homebrew 安装:

bash

brew install tesseract
安装完成后,你可以通过以下命令检查 Tesseract 是否安装成功:

bash

tesseract --version
2. 编写验证码识别代码
在本节中,我们将编写一个 Python 脚本,使用 Tesseract 进行验证码识别。以下是完整的代码示例:

python

import pytesseract
import cv2
from PIL import Image

设置 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() 函数加载验证码图片。可以根据你的实际情况修改 image_path,指向验证码图像文件。
转换为灰度图像:

cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 将图像从彩色转换为灰度图像。灰度图像能有效减少颜色信息,让 OCR 引擎更集中地处理文本区域。
去噪:

使用高斯模糊(cv2.GaussianBlur())减少图像中的噪点。模糊处理有助于减少图像中的随机噪声,使得 OCR 识别更加清晰。
二值化处理:

cv2.adaptiveThreshold() 用来将图像转换为黑白二值图像。自适应阈值可以根据图像局部的像素值调整分界线,有效突出字符部分,帮助 OCR 引擎提高识别准确度。
OCR 识别
使用 pytesseract.image_to_string(binary_image, config='--psm 6') 调用 Tesseract 引擎进行 OCR 识别。--psm 6 是 Tesseract 的页面分割模式,指定图像包含单一文本块,这对于验证码图像来说是一个常见的配置。
输出结果
最终,我们将输出识别出的文本内容。假如验证码内容是 1A2B3C,程序的输出将是:
text

识别的验证码是:1A2B3C
4. 运行程序
将上述代码保存为 Python 文件(例如 captcha_recognition.py),然后确保验证码图像(例如 captcha_image.png)位于同一目录下。接下来,打开终端,使用以下命令运行程序:

bash

python captcha_recognition.py
程序会加载验证码图像,进行处理并输出识别结果。

  1. 提高识别准确度
    在一些情况下,Tesseract 可能无法完美识别复杂的验证码。为了提高识别准确度,可以尝试以下方法:

  2. 调整阈值化方法
    除了使用自适应阈值化外,Otsu 阈值化方法也可以尝试,它对于某些图像效果更好:

python

ret, binary_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
2. 去噪处理
如果图像噪声较多,可以使用其他去噪技术,如中值滤波:

python

denoised_image = cv2.medianBlur(binary_image, 3)
3. 配置 Tesseract 参数
Tesseract 提供了多种页面分割模式(PSM),不同的模式适用于不同类型的图像。如果默认的 --psm 6 配置无法正确识别验证码,你可以尝试其他配置。例如,--psm 3 适用于单行文本,--psm 11 适用于稀疏文本。

python
更多内容访问ttocr.com或联系1436423940
text = pytesseract.image_to_string(binary_image, config='--psm 3')
4. 使用深度学习 OCR 引擎
如果验证码图像较为复杂,传统的 Tesseract 可能无法识别准确。你可以尝试使用基于深度学习的 OCR 引擎,如 EasyOCR 或 PaddleOCR,这些引擎在处理复杂验证码时通常表现得更好。

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

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

相关文章

鸿蒙开发:了解@Builder装饰器

@Builder装饰是鸿蒙UI开发中,非常重要的一个装饰器,在实际的开发中,合理且正确的使用,能够让我们的代码更加的简洁前言本文代码案例基于Api13,温馨提示:内容相对来说比较简单,如果您已掌握,略过即可。如果说一个页面中组件有很多,我们都统一写到build函数中,显而易见…

P1020 [NOIP 1999 提高组] 导弹拦截(dilworth)

这道题真的做的我鬼火冒,尤其是这个第二问要用到dilworth但是我看讲解完全不知道他们在讲什么,我看了好久才理解,一个数组至少可以由几个不增子序列覆盖就等于严格单调递增的最长子序列的长度,如果是至少可以由几个严格递减子序列覆盖就等于最长单调不减子序列的长度,然后…

Linux系统介绍

1. Linux介绍 Linux和windows一样也是一个操作系统,但是与windows不同的是,Linux是一套开放源码的代码程序、并且可以自由传播的类unix操作系统软件。 Linux系统主要被应用于服务端、嵌入式开发和个人PC桌面3大领域,一般的WEB项目都是部署在Linux操作系统上。 Linux是一个基…

Linux驱动---按键

文章简述了Input子系统架构,讲解了输入设备驱动开发流程,探讨了按键消抖方法及按键驱动开发要点,为嵌入式开发提供参考。目录一、Input子系统1.1、简介1.2、Input子系统构成1.3、input_dev结构体二、输入设备驱动开发流程2.1、分配和初始化输入设备2.2、注册设备2.3、事件上…

Android studio:flutter开发环境配置

Make Android apps | Flutter 下载flutter,并配置环境变量 右击 此电脑->属性->高级系统设置->环境变量在 用户变量 新建两个变量 变量名:FLUTTER_STORAGE_BASE_URL 变量值:https://storage.flutter-io.cn 变量名:PUB_HOSTED_URL 变量值:https://pub.flutter-io.c…

相机模型(Ⅱ) 相机标定(Camera Models 2 Camera Calibration) 总结

弱透视投影(Weak perspective projection)弱透视投影是计算机视觉和摄影测量中的一种近似投影模型。在这种投影中,假设物体距离相机足够远,使得物体上各点到相机光心的距离近似相等。 从图中可以看到,有一个光心 \(O\),物体平面上的点 \(P、Q、R\) 等通过光线投影到图像平…