验证码(CAPTCHA)广泛用于防止自动化提交,但在自动化测试、数据采集等场景下,我们可能需要自动识别验证码。本文将介绍如何使用 Python 结合 Tesseract OCR 解析验证码,并通过图像处理优化识别效果。
1. 环境准备
在编写代码前,我们需要安装 Python 和 Tesseract OCR,并安装必要的 Python 库。
1.1 安装 Python
如果尚未安装 Python,可以前往 Python 官方网站 下载最新版本,并确保 pip 可用:
bash
python --version
pip --version
1.2 安装 Tesseract OCR
Windows 用户
访问 Tesseract 官方 GitHub 下载 Windows 安装包。
按照安装向导完成安装,并将 Tesseract 添加到系统环境变量。
Linux 用户(Ubuntu 示例)
sudo apt update
sudo apt install tesseract-ocr
macOS 用户(使用 Homebrew)
bash
brew install tesseract
安装完成后,运行以下命令检查是否安装成功:
bash
tesseract --version
1.3 安装 Python 依赖库
在 Python 中使用 Tesseract OCR,需要安装 pytesseract,以及用于图像处理的 Pillow 和 OpenCV:
bash
pip install pytesseract pillow opencv-python
2. 代码实现:解析验证码
下面的 Python 代码示例展示了如何读取验证码图像,进行预处理,并使用 Tesseract 进行 OCR 解析。
2.1 代码示例
python
import cv2
import pytesseract
from PIL import Image
# 配置 Tesseract 路径(Windows 用户需修改为安装路径)
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
def preprocess_image(image_path):
"""加载验证码图片并进行预处理"""
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) # 转换为灰度图像
# 二值化处理,增强字符对比度
_, binary_img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 可选:降噪处理
binary_img = cv2.medianBlur(binary_img, 3)
return binary_img
def recognize_captcha(image_path):
"""使用 Tesseract OCR 解析验证码"""
processed_img = preprocess_image(image_path)
# 将 OpenCV 图像转换为 PIL 格式
pil_img = Image.fromarray(processed_img)
# 设定 Tesseract 识别模式,适用于验证码
custom_config = r'--oem 3 --psm 6'
# 进行 OCR 识别
text = pytesseract.image_to_string(pil_img, config=custom_config)
return text.strip()
if __name__ == "__main__":
captcha_image = "captcha.png" # 替换为你的验证码图片路径
result = recognize_captcha(captcha_image)
print(f"识别出的验证码: {result}")
3. 代码解析
3.1 图像预处理
为了提高 OCR 识别准确率,代码对图像进行了以下优化处理:
灰度化:使用 cv2.IMREAD_GRAYSCALE 去除颜色干扰。
二值化:通过 cv2.threshold() 提高字符对比度,使 OCR 更容易识别。
降噪(可选):使用 cv2.medianBlur() 平滑图像,去除干扰噪点。
3.2 OCR 识别
通过 pytesseract.image_to_string() 调用 Tesseract 进行字符识别。
使用 --psm 6 设定页面分割模式,适用于单行验证码文本。
4. 运行程序
将代码保存为 captcha_reader.py,并确保 captcha.png 图片位于同一目录下,然后运行:
bash
python captcha_reader.py
程序将自动加载验证码图片,进行预处理,并输出识别的验证码文本。
5. 提高 OCR 识别准确率
如果验证码较复杂,Tesseract 可能无法精准识别,可以尝试以下优化方法:
5.1 调整 PSM 模式
Tesseract 提供不同的页面分割模式(PSM),验证码通常是一行文本,因此可以使用 PSM 6:
python
custom_config = r'--oem 3 --psm 6'
5.2 选择合适的 OCR 语言
如果验证码只包含数字和英文字母,可以指定 eng(英语):
python
更多内容访问ttocr.com或联系1436423940
text = pytesseract.image_to_string(pil_img, lang="eng", config=custom_config)
5.3 进一步优化图像
去除噪点:可使用 高斯模糊 或 形态学处理 过滤背景干扰。
字符分割:如果验证码字符相互粘连,可以尝试分割算法,提高单字符识别率。
5.4 采用深度学习 OCR 方案
如果 Tesseract 识别效果不佳,可以尝试基于深度学习的 OCR 方案,例如:
EasyOCR
PaddleOCR