一、项目概述
在许多网站中,为了防止恶意机器人注册或暴力破解,常使用图形验证码进行防护。本文将通过 Python 构建一个简易验证码识别工具,结合 OpenCV 图像处理和 Tesseract OCR 实现自动识别,适合 4~5 位英数字验证码的识别任务。
更多内容访问ttocr.com或联系1436423940
二、技术选型
技术 作用
OpenCV 图像处理(灰度、二值、去噪)
Pillow 图像格式转换
pytesseract OCR 引擎,基于 Tesseract
Tesseract 本地文字识别系统
三、环境安装
pip install opencv-python pillow pytesseract
系统还需安装 Tesseract OCR:
Windows:Tesseract 安装包
Ubuntu:sudo apt install tesseract-ocr
四、图像预处理步骤
验证码图像通常存在干扰线、噪声、字符粘连等问题。使用 OpenCV 进行如下预处理:
import cv2
def preprocess(path):
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, binary = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY)# 膨胀操作(可选,用于连接断裂笔画)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
dilated = cv2.dilate(binary, kernel)output_path = "processed.png"
cv2.imwrite(output_path, dilated)
return output_path
五、OCR 识别模块
使用 pytesseract 对处理后的图像进行识别,限制字符集可提高准确率:
from PIL import Image
import pytesseract
def recognize(image_path):
image = Image.open(image_path)
config = r'--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
result = pytesseract.image_to_string(image, config=config)
return result.strip()
六、整体工作流程
整合预处理与识别流程:
def run_captcha(path):
processed = preprocess(path)
code = recognize(processed)
print(f"验证码识别结果:{code}")
if name == 'main':
run_captcha("captcha_sample.png")
七、运行示例
若输入图片为:
终端输出:
验证码识别结果:B7H9X
识别准确率会受验证码字体、背景噪声、字符粘连影响。如遇错误识别,可通过字符切割或模型训练进一步优化。