用 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
浙公网安备 33010602011771号