Python 实现验证码识别:Tesseract OCR 实践指南

验证码(CAPTCHA)广泛用于防止自动化提交,但在自动化测试、数据采集等场景下,我们可能需要自动识别验证码。本文将介绍如何使用 Python 结合 Tesseract OCR 解析验证码,并通过图像处理优化识别效果。

  1. 环境准备

在编写代码前,我们需要安装 Python 和 Tesseract OCR,并安装必要的 Python 库。
更多内容访问ttocr.com或联系1436423940
1.1 安装 Python

如果尚未安装 Python,可以前往 Python 官方网站
下载最新版本,并确保 pip 可用:

python --version
pip --version

1.2 安装 Tesseract OCR
Windows 用户

访问 Tesseract 官方 GitHub
下载 Windows 安装包。

按照安装向导完成安装,并将 Tesseract 添加到系统环境变量。

Linux 用户(Ubuntu 示例)
sudo apt update
sudo apt install tesseract-ocr

macOS 用户(使用 Homebrew)
brew install tesseract

安装完成后,运行以下命令检查是否安装成功:

tesseract --version

1.3 安装 Python 依赖库

在 Python 中使用 Tesseract OCR,需要安装 pytesseract,以及用于图像处理的 Pillow 和 OpenCV:

pip install pytesseract pillow opencv-python

  1. 代码实现:解析验证码

下面的 Python 代码示例展示了如何读取验证码图像,进行预处理,并使用 Tesseract 进行 OCR 解析。

2.1 代码示例
import cv2
import pytesseract
from PIL import Image

配置 Tesseract 路径(Windows 用户需修改为安装路径)

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

def preprocess_image(image_path):
"""加载验证码图片并进行预处理"""
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) # 转换为灰度图像

# 二值化处理,增强字符对比度
_, binary_img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 可选:降噪处理
binary_img = cv2.medianBlur(binary_img, 3)

return binary_img

def recognize_captcha(image_path):
"""使用 Tesseract OCR 解析验证码"""
processed_img = preprocess_image(image_path)

# 将 OpenCV 图像转换为 PIL 格式
pil_img = Image.fromarray(processed_img)

# 设定 Tesseract 识别模式,适用于验证码
custom_config = r'--oem 3 --psm 6'

# 进行 OCR 识别
text = pytesseract.image_to_string(pil_img, config=custom_config)

return text.strip()

if name == "main":
captcha_image = "captcha.png" # 替换为你的验证码图片路径
result = recognize_captcha(captcha_image)
print(f"识别出的验证码: {result}")

  1. 代码解析
    3.1 图像预处理

为了提高 OCR 识别准确率,代码对图像进行了以下优化处理:

灰度化:使用 cv2.IMREAD_GRAYSCALE 去除颜色干扰。

二值化:通过 cv2.threshold() 提高字符对比度,使 OCR 更容易识别。

降噪(可选):使用 cv2.medianBlur() 平滑图像,去除干扰噪点。

3.2 OCR 识别

通过 pytesseract.image_to_string() 调用 Tesseract 进行字符识别。

使用 --psm 6 设定页面分割模式,适用于单行验证码文本。

  1. 运行程序

将代码保存为 captcha_reader.py,并确保 captcha.png 图片位于同一目录下,然后运行:

python captcha_reader.py

程序将自动加载验证码图片,进行预处理,并输出识别的验证码文本。

  1. 提高 OCR 识别准确率

如果验证码较复杂,Tesseract 可能无法精准识别,可以尝试以下优化方法:

5.1 调整 PSM 模式

Tesseract 提供不同的页面分割模式(PSM),验证码通常是一行文本,因此可以使用 PSM 6:

custom_config = r'--oem 3 --psm 6'

5.2 选择合适的 OCR 语言

如果验证码只包含数字和英文字母,可以指定 eng(英语):

text = pytesseract.image_to_string(pil_img, lang="eng", config=custom_config)

5.3 进一步优化图像

去除噪点:可使用 高斯模糊 或 形态学处理 过滤背景干扰。

字符分割:如果验证码字符相互粘连,可以尝试分割算法,提高单字符识别率。

5.4 采用深度学习 OCR 方案

如果 Tesseract 识别效果不佳,可以尝试基于深度学习的 OCR 方案,例如:

EasyOCR

PaddleOCR

posted @ 2025-09-05 12:09  ttocr、com  阅读(13)  评论(0)    收藏  举报