当前位置: 首页 > news >正文

用 Python 和 PaddleOCR 进行验证码识别

在许多网站的自动化测试和数据采集中,验证码是常见的防爬手段之一。相比传统的 OCR 方案,PaddleOCR 作为基于深度学习的开源 OCR 工具,在验证码识别方面具有更高的准确率。本文将介绍如何使用 Python + PaddleOCR 识别验证码,并进行图像预处理以提升识别率。

  1. 环境准备

在开始之前,确保你已经安装了 Python 3.8+,然后安装必要的依赖库。

1.1 安装 PaddleOCR
pip install paddleocr
pip install paddlepaddle
更多内容访问ttocr.com或联系1436423940

如果使用 GPU 进行加速,请安装对应的 GPU 版本的 PaddlePaddle:官方安装指南

1.2 安装 OpenCV(用于图像预处理)
pip install opencv-python numpy

安装完成后,测试 PaddleOCR 是否正常运行:

from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang="en") # 使用英文模型
result = ocr.ocr("test.png") # 测试图片
print(result)

  1. 代码实现:识别验证码
    import cv2
    import numpy as np
    from paddleocr import PaddleOCR

def preprocess_image(image_path):
""" 预处理验证码图像,提高 OCR 识别率 """
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

# 高斯模糊去噪
image = cv2.GaussianBlur(image, (3, 3), 0)# 二值化处理
_, binary_image = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY)# 保存处理后的图片
processed_path = "processed_captcha.png"
cv2.imwrite(processed_path, binary_image)
return processed_path

def recognize_captcha(image_path):
""" 使用 PaddleOCR 进行验证码识别 """
ocr = PaddleOCR(use_angle_cls=True, lang="en") # 设定 OCR 语言
result = ocr.ocr(image_path)

# 提取识别的文本
recognized_text = "".join([line[1][0] for line in result[0] if line[1][1] > 0.5])  # 过滤低置信度结果
return recognized_text

if name == "main":
image_path = "captcha.png" # 请替换为你的验证码图片路径

# 预处理验证码
processed_image = preprocess_image(image_path)# 进行 OCR 识别
text = recognize_captcha(processed_image)print(f"识别出的验证码: {text}")
  1. 代码解析
    3.1 预处理验证码图像

验证码通常包含噪点、干扰线,甚至扭曲的字符。为提高识别率,我们对图像进行了以下优化:

灰度化:去除颜色信息,仅保留亮度,提高 OCR 识别效率。

高斯模糊:减少噪声,平滑图像,提高字符的清晰度。

二值化:将图像转换为黑白,使字符更清晰,便于 OCR 识别。

3.2 PaddleOCR 解析验证码

PaddleOCR 采用深度学习模型进行文字识别,相较传统 OCR(如 Tesseract)在复杂验证码上表现更好。

关键 API 解析:

PaddleOCR(use_angle_cls=True, lang="en")

use_angle_cls=True:启用文本方向检测(部分验证码可能旋转)。

lang="en":设定识别语言为英文,可改为 "ch" 识别中文。

ocr.ocr(image_path)

识别图像中的文字,返回 (文本, 置信度) 组成的列表。

line[1][0] 提取识别文本,line[1][1] 代表置信度。

  1. 运行程序

将 captcha.png 放入代码目录下,然后执行:

python captcha_recognizer.py

输出示例:

识别出的验证码: H7X3D

  1. 进一步优化 OCR 识别率
    5.1 训练 PaddleOCR 识别特定验证码

如果验证码字符形态较特殊,可训练 PaddleOCR 自定义模型:

收集并标注 1000+ 张验证码样本。

使用 PaddleOCR 提供的 OCR 训练工具
进行训练。

训练完成后,使用 custom 语言模型进行识别:

ocr = PaddleOCR(det_model_dir="custom_model")

5.2 采用神经网络处理粘连字符

部分验证码字符可能连在一起,OCR 识别效果较差。可以使用 ctc-loss 训练 LSTM/Transformer OCR 模型,提高识别率。例如:

ocr = PaddleOCR(use_angle_cls=True, rec_algorithm="CRNN")

CRNN(卷积循环神经网络)专门用于序列化 OCR 任务,如验证码识别。

http://www.wxhsa.cn/company.asp?id=626

相关文章:

  • TASK 1 训练一个网络识别手写数字
  • 复杂背景验证码的识别思路与图像处理方法
  • Symfony学习笔记 - The Symfony Framework Best Practices
  • 大学军训
  • Vue Day3【综合案例2】vue小兔鲜儿
  • Java 基础知识解析
  • 力扣第3题 无重复字符的最长子串
  • UniApp 自定义导航栏
  • P3177 [HAOI2015] 树上染色
  • UniApp 自定义tabBar
  • NOIP2024复盘
  • Avalonia 学习笔记04. Page Navigation(页面导航) (转载)
  • 判断左手坐标系和右手坐标系的方法
  • 题解:P11894 「LAOI-9」Update
  • 题解:P2012 拯救世界2
  • 今日随笔
  • 一键安装小雅Alist
  • 题解:AT_abc394_c [ABC394C] Debug
  • Lumion Pro 12.0 下载安装教程包含安装包下载、安装、激活超详细图文步骤
  • 题解:CF348C Subset Sums
  • 题解:CF351B Jeff and Furik
  • 题解:CF2118D1 Red Light, Green Light (Easy version)
  • Project Euler题解思路导航(私人)
  • 27届春招备战一轮复习--第五期
  • 阅读方式
  • Audition 2025(AU2025)超详细直装版下载安装教程保姆级
  • pg 解析select语句的返回值
  • 长乐一中 CSP-S 2025 提高级模拟赛 Day2
  • 费用流
  • [豪の学习笔记] 软考中级备考 基础复习#6