用 Python 实现英文数字验证码识别完整流程教程

验证码是网络安全中常见的一种验证方式,常用于防止恶意机器人自动操作。英文数字组合的验证码通常具备一定干扰性,但依然可以通过图像处理和 OCR 技术实现自动识别。

本文将使用 Python 编写一个验证码识别程序,通过 Tesseract OCR 引擎完成对图像中英文和数字字符的提取。整个过程将涵盖环境搭建、图像处理、识别配置、运行测试等环节,适合希望掌握 OCR 实用技巧的开发者学习使用。

一 准备工作
在开始编写代码之前,先安装必要的软件和 Python 库。

安装 Tesseract OCR
Tesseract 是 Google 开源的文字识别引擎,支持多语言文本识别。

Windows 用户可从官方网站下载并安装

Mac 用户可使用 Homebrew 安装

brew install tesseract
Linux 用户执行以下命令安装

sudo apt install tesseract-ocr
安装完成后,记住 Tesseract 可执行文件的路径,Python 脚本需要引用。

安装 Python 库
打开终端或命令行,执行以下命令安装必要的库:

pip install pytesseract opencv-python pillow numpy
二 Python 实现验证码识别代码
以下是一个完整的验证码识别脚本,包含图像加载、预处理、字符识别等步骤:

import cv2
import pytesseract
import numpy as np

设置 Tesseract 引擎路径(Windows 系统必须设置)

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

读取验证码图片

image = cv2.imread("captcha.png")

转为灰度图像

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

使用高斯模糊去噪

blurred = cv2.GaussianBlur(gray_image, (5, 5), 0)

应用二值化处理

_, binary_image = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

设置 OCR 参数,只识别大写字母和数字

ocr_config = r"--oem 3 --psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

执行 OCR 识别

recognized_text = pytesseract.image_to_string(binary_image, config=ocr_config)

输出识别结果

print("识别出的验证码为", recognized_text.strip())
三 图像处理细节解释
图像处理对于验证码识别的准确性起着决定性作用。

灰度转换:使用 OpenCV 的 cvtColor 函数将彩色图像转换为单通道灰度图。

高斯模糊:通过模糊操作可以去除小面积的图像噪声。

二值化:采用 OTSU 自动阈值算法将图像转换为纯黑白图像,便于后续文本边界识别。

字符限制:通过设置 Tesseract 白名单,指定只识别大写字母和数字,有助于提升识别准确度。

四 参数说明与调优建议
OCR 参数说明
--oem 3:使用基于 LSTM 的 OCR 引擎(较新较准)

--psm 8:设置图像为单词模式

tessedit_char_whitelist:设定只允许识别特定字符

你也可以尝试不同的 psm 参数,例如:

psm 7:单行文本模式

psm 6:段落级别文本块

psm 11:稀疏文本(适合字符间距较大)

识别效果调优建议
对于复杂验证码 可增加边缘检测 腐蚀 膨胀等处理步骤

对扭曲的图像 可尝试使用仿射变换或透视校正

如果验证码干扰线明显 可用轮廓识别算法提取字符区域后再识别

五 测试运行步骤
将你要识别的验证码图像命名为 captcha.png 放在与脚本相同的目录下。然后运行该脚本:

python captcha_ocr.py
若图像清晰、字符标准,识别结果应类似如下:

识别出的验证码为 B9XKW

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