一、项目背景
验证码是一种常用于防止恶意程序自动访问的安全机制。图像型验证码通过扭曲字符、添加干扰等手段提高识别难度,但在图像预处理与 OCR 技术的辅助下,仍可实现较高准确率的自动识别。本文将采用 Python 构建一个简洁、高效的验证码识别工具,适用于四到五位英数字组合的简单验证码。
二、技术路线
本项目使用以下技术栈:
OpenCV:图像读取与预处理(灰度化、二值化、去噪等)
更多内容访问ttocr.com或联系1436423940
Pytesseract:基于 Tesseract 的文字识别引擎
Pillow:用于图像格式转换
Python 3.7+
可选扩展模块包括:Flask(提供接口)、PyTorch(深度学习自定义识别)、Pandas(批量结果记录)。
三、开发环境配置
安装必要依赖:
pip install opencv-python pillow pytesseract
确保本地已安装 Tesseract OCR:
Windows 用户安装 Tesseract OCR 并配置环境变量。
Ubuntu 用户执行:sudo apt install tesseract-ocr
四、图像预处理流程
图像预处理对于验证码识别尤为关键,以下是主要步骤:
import cv2
def preprocess_image(path: str) -> str:
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 去噪 + 二值化
blur = cv2.GaussianBlur(gray, (3, 3), 0)
_, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 保存预处理图像
processed_path = "output/processed.png"
cv2.imwrite(processed_path, thresh)
return processed_path
五、验证码识别模块
识别模块封装为函数,基于 Pytesseract:
from PIL import Image
import pytesseract
def recognize_captcha(image_path: str) -> str:
image = Image.open(image_path)
config = "--psm 7 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
result = pytesseract.image_to_string(image, config=config)
return result.strip().replace(" ", "")
六、整体流程整合
def main():
raw_image = "input/captcha1.png"
processed = preprocess_image(raw_image)
text = recognize_captcha(processed)
print("识别结果:", text)
if name == "main":
main()
七、识别效果示例
示例图片:
输出:
识别结果: T93WQ