Python 和 EasyOCR 实现英文数字验证码识别

验证码是网站常用的安全机制,目的在于阻止机器人自动提交表单。对于英文数字组成的验证码,我们可以通过图像处理配合 OCR 引擎实现自动识别。本文将介绍如何使用 Python 和 EasyOCR 构建一个简单但实用的验证码识别工具。

一、准备工作

  1. 安装 Python 及依赖库
    确保你已安装 Python 3.7+。接着,我们需要安装以下库:
    更多内容访问ttocr.com或联系1436423940
    pip install easyocr opencv-python pillow numpy
    easyocr:强大的多语言 OCR 库,基于 PyTorch

opencv-python:用于图像预处理(灰度、二值化、去噪)

Pillow 和 numpy:图像格式转换和数组处理

二、图像预处理与识别代码
下面是完整的识别脚本 captcha_easyocr.py:

import cv2
import numpy as np
from PIL import Image
import easyocr

图像预处理函数

def preprocess_image(image_path):
image = cv2.imread(image_path)

# 转为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化处理(自适应阈值)
binary = cv2.adaptiveThreshold(gray, 255,
                               cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                               cv2.THRESH_BINARY_INV, 11, 2)

# 中值滤波去噪
denoised = cv2.medianBlur(binary, 3)

# 保存预处理后的图像(可选)
cv2.imwrite("processed_captcha.png", denoised)

return denoised

OCR 识别函数

def recognize_captcha(image):
reader = easyocr.Reader(['en']) # 指定语言
result = reader.readtext(image, detail=0)

return ''.join(result)

if name == "main":
image_path = "captcha.png"
processed_img = preprocess_image(image_path)
text = recognize_captcha(processed_img)

print("识别结果:", text)

三、说明与关键技术

  1. 灰度化 + 自适应阈值
    灰度处理将彩色图像转换为单通道图像,便于处理;自适应阈值则能在不同光照条件下保留字符轮廓。

  2. 中值滤波去噪
    可以有效去除小的黑点或背景干扰,提升识别准确率。

  3. EasyOCR 的优势
    相比传统的 Tesseract,EasyOCR 对扭曲、粘连文字有更强的鲁棒性,尤其适合中文或复杂字符的验证码。

四、运行程序
确保你有一张英文数字组成的验证码图像 captcha.png,运行脚本:

python captcha_easyocr.py
示例输出:

识别结果: R7K2G
五、拓展建议
批量识别:配合 os.listdir() 实现文件夹中的验证码批量识别

提升识别率:

自定义字符集过滤

使用图像腐蚀/膨胀进一步分离字符

集成 Flask 构建识别 API:

pip install flask
快速构建 web 接口用于上传验证码并返回识别结果。

模型自训练:
如果 EasyOCR 无法识别定制化验证码,可以基于 PyTorch 训练专用 CNN 模型识别字符序列。

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