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

验证码(CAPTCHA)是广泛应用于网站、应用程序等平台中的一种安全措施,旨在防止机器人自动提交表单、注册账号或进行其他自动化操作。为了让程序自动化识别验证码,我们可以使用光学字符识别(OCR)技术。Tesseract 是一个强大的开源 OCR 引擎,本文将介绍如何利用 Python 和 Tesseract 来识别验证码中的文字。

  1. 环境准备
    安装 Python 和必要的库
    首先确保你已经安装了 Python。如果尚未安装,可以从 Python 官网 下载并安装。

在使用 Tesseract 进行 OCR 之前,我们需要安装以下几个 Python 库:

pytesseract:Python 的 Tesseract OCR 接口。
opencv-python:用于图像处理的库,特别是图像读取、预处理和图像变换。
Pillow:Python 的图像处理库,用于打开和保存图像。
可以通过 pip 安装这些库:

bash
更多内容访问ttocr.com或联系1436423940
pip install pytesseract opencv-python pillow
安装 Tesseract OCR 引擎
Tesseract 是一个开源的 OCR 引擎,需要在本地安装。安装方式如下:

Linux(Ubuntu):

bash

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

bash

brew install tesseract
Windows: 访问 Tesseract GitHub 页面 下载适用于 Windows 的安装包。安装后,需要将 Tesseract 的安装路径添加到系统的环境变量中。

在命令行中输入以下命令,检查是否成功安装 Tesseract:

bash

tesseract --version
2. 编写验证码识别代码
在本节中,我们将展示如何编写一个 Python 程序,使用 Tesseract OCR 引擎识别验证码。以下是一个基本示例:

python

import pytesseract
from PIL import Image
import cv2

设置 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() 将图像转换为灰度图像。灰度化可以去除颜色信息,仅保留亮度信息,从而减少干扰。
去噪声:

使用高斯模糊(cv2.GaussianBlur())对图像进行平滑处理,这有助于去除背景噪声,使字符边缘更加清晰。
二值化:

cv2.adaptiveThreshold() 对图像进行自适应阈值化处理,将图像转换为黑白二值图像。此操作有助于突出文本部分,使得 OCR 引擎更容易识别。
OCR 识别
pytesseract.image_to_string() 函数用于将图像传递给 Tesseract 引擎进行 OCR 识别,返回识别的文本结果。
参数 config='--psm 6' 是 Tesseract 的页面分割模式(Page Segmentation Mode),指定了 OCR 引擎对图像进行识别时的页面布局模式。--psm 6 适用于文本内容为单一块的图像,这通常适合验证码类型的图像。
输出结果
程序将输出 Tesseract 识别的验证码内容。如果验证码是 A1B2C3,程序的输出将是:
text

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

bash

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

  1. 提高识别准确度
    如果在某些情况下,OCR 识别的精度不够高,你可以尝试以下方法来提高识别准确度:

  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 来提高识别准确度。例如:

--psm 3:适用于单行文本。
--psm 6:适用于文本块。
--psm 11:适用于稀疏文本。
python

text = pytesseract.image_to_string(binary_image, config='--psm 3')
4. 使用深度学习 OCR 模型
对于复杂或极度扭曲的验证码,传统的 Tesseract 引擎可能难以识别。这时,你可以考虑使用基于深度学习的 OCR 模型,例如 EasyOCR 或 PaddleOCR,这些模型对于处理具有噪声、扭曲的图像有更好的表现。

posted @   ttocr、com  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示