使用 Python 实现验证码识别

验证码是一种常见的防止机器人攻击的机制,它通过要求用户输入一串扭曲的字母和数字来验证是否为人类。在本教程中,我们将使用 Python 和 Tesseract OCR 技术来自动识别并提取验证码内容。通过图像处理和 OCR(光学字符识别),我们能够实现这一目标。

  1. 环境准备
    安装 Python 和所需库
    确保已经安装 Python。如果还没有安装,可以访问 Python 官网下载并安装。

接下来,使用 pip 安装以下依赖库:

pytesseract:Python 的 Tesseract OCR 接口。
Pillow:一个流行的 Python 图像处理库。
opencv-python:用于图像处理,特别是对验证码图片的预处理。
在终端或命令行中运行以下命令来安装:

bash
更多内容访问ttocr.com或联系1436423940
pip install pytesseract pillow opencv-python
安装 Tesseract OCR
Tesseract 是本教程中使用的 OCR 引擎。需要根据操作系统进行安装:

Linux:
bash

sudo apt install tesseract-ocr
macOS(使用 Homebrew):
bash

brew install tesseract
Windows: 从 Tesseract 官方页面 下载并安装适合的版本。安装后,请将 Tesseract 的路径(如 C:\Program Files\Tesseract-OCR\tesseract.exe)添加到系统的环境变量中。
安装完成后,通过以下命令确认 Tesseract 是否已正确安装:

bash

tesseract --version
2. 编写验证码识别程序
以下是完整的 Python 代码,用于加载验证码图片,进行预处理,并通过 Tesseract OCR 识别验证码内容:

python

import pytesseract
from PIL import Image, ImageOps
import cv2

设置 Tesseract 的路径(Windows 用户需要根据实际安装路径修改)

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

加载验证码图片

image_path = "captcha.png" # 替换为验证码图片路径
image = Image.open(image_path)

转换为灰度图像,减少颜色干扰

gray_image = ImageOps.grayscale(image)

使用 OpenCV 进一步处理图像(如二值化)

gray_cv_image = cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2GRAY)
_, binary_image = cv2.threshold(gray_cv_image, 128, 255, cv2.THRESH_BINARY)

可选:保存处理后的图像以检查效果

cv2.imwrite("processed_captcha.png", binary_image)

使用 Tesseract OCR 进行识别

recognized_text = pytesseract.image_to_string(binary_image, config="--psm 6")

打印识别结果

print(f"识别的验证码内容是:{recognized_text.strip()}")
3. 代码解析

  1. 加载和预处理图片
    使用 Pillow 库加载验证码图片,并将其转换为灰度图像,减少颜色干扰。
    使用 OpenCV 进行二值化处理(黑白化),进一步增强文字与背景的对比度。
  2. OCR 识别
    pytesseract.image_to_string() 用于从图像中提取文本。通过设置 config="--psm 6",Tesseract 会假定图像是包含多行文本的普通文档,这种设置适合验证码图片。
  3. 输出识别结果
    程序会打印出 Tesseract 识别出的验证码文本。
  4. 运行代码
    将上面的代码保存为 captcha_recognition.py,并确保你有一张验证码图片(如 captcha.png)。然后运行以下命令:

bash

python captcha_recognition.py
如果一切正常,程序会输出识别的验证码内容,例如:

text

识别的验证码内容是:G9R8L
5. 示例演示
输入图像:
假设验证码图片 captcha.png 的内容为:

处理后图像:
经过二值化处理后的图像 processed_captcha.png:

输出结果:
text

识别的验证码内容是:G9R8L
6. 提高识别效果的技巧
如果识别结果不理想,可以尝试以下优化方法:

  1. 优化图像预处理
    去噪声:使用图像模糊或形态学操作(如腐蚀、膨胀)去除噪声。
    自适应二值化:使用自适应阈值方法(如 cv2.adaptiveThreshold())来处理不同亮度的验证码图像。

  2. 调整 Tesseract 参数
    页面分割模式:Tesseract 的 --psm(页面分割模式)参数可以根据图像的布局调整:
    --psm 6:多行文本模式(默认模式)。
    --psm 7:单行文本模式,适合验证码。

  3. 训练 Tesseract
    如果验证码使用自定义字体,Tesseract 可能无法正确识别。这时,可以通过提供训练数据来提高识别率。Tesseract 支持训练和自定义语言文件,以便识别特定字体和字符集。

  4. 使用深度学习方法
    对于复杂的验证码(如扭曲或添加噪声的验证码),基于深度学习的 OCR 模型(如 CRNN)可以提供更高的准确度。PaddleOCR 和 EasyOCR 都是不错的选择,可以在这些框架中实现更强大的验证码识别功能。

posted @   ttocr、com  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示