Python 和 EasyOCR 实现英文数字验证码识别
验证码是网站常用的安全机制,目的在于阻止机器人自动提交表单。对于英文数字组成的验证码,我们可以通过图像处理配合 OCR 引擎实现自动识别。本文将介绍如何使用 Python 和 EasyOCR 构建一个简单但实用的验证码识别工具。
一、准备工作
- 安装 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)
三、说明与关键技术
-
灰度化 + 自适应阈值
灰度处理将彩色图像转换为单通道图像,便于处理;自适应阈值则能在不同光照条件下保留字符轮廓。 -
中值滤波去噪
可以有效去除小的黑点或背景干扰,提升识别准确率。 -
EasyOCR 的优势
相比传统的 Tesseract,EasyOCR 对扭曲、粘连文字有更强的鲁棒性,尤其适合中文或复杂字符的验证码。
四、运行程序
确保你有一张英文数字组成的验证码图像 captcha.png,运行脚本:
python captcha_easyocr.py
示例输出:
识别结果: R7K2G
五、拓展建议
批量识别:配合 os.listdir() 实现文件夹中的验证码批量识别
提升识别率:
自定义字符集过滤
使用图像腐蚀/膨胀进一步分离字符
集成 Flask 构建识别 API:
pip install flask
快速构建 web 接口用于上传验证码并返回识别结果。
模型自训练:
如果 EasyOCR 无法识别定制化验证码,可以基于 PyTorch 训练专用 CNN 模型识别字符序列。
浙公网安备 33010602011771号