Python 和 Tesseract 进行验证码识别

验证码(CAPTCHA)是一种用于防止自动化程序滥用网站的安全技术。它通常通过图像中包含一些扭曲的字符或图形来验证用户是人类而非机器人。虽然验证码的目的是阻止自动化脚本,但我们可以利用 Python 和 Tesseract OCR 技术来自动识别这些验证码。本文将演示如何通过 Python 实现验证码识别,利用 Tesseract OCR 引擎提取验证码中的文本内容。

  1. 环境准备
    安装 Python 和相关依赖库
    首先,确保你的系统已安装 Python。若未安装,请访问 Python 官方网站下载并安装。

接下来,使用 pip 安装所需的 Python 库:

pytesseract:Python 接口,方便调用 Tesseract OCR 引擎。
Pillow:用于图像处理的 Python 库。
opencv-python:计算机视觉库,支持图像预处理。
运行以下命令进行安装:

bash

pip install pytesseract pillow opencv-python
安装 Tesseract OCR
Tesseract 是一个开源的 OCR 引擎,能够从图像中提取文本。你需要在本地安装 Tesseract,安装方法如下:

Linux(通过包管理器):

bash

sudo apt install tesseract-ocr
macOS(通过 Homebrew):

bash

brew install tesseract
Windows: 访问 Tesseract OCR GitHub 页面 下载适合的版本,并按照安装说明进行安装。安装完成后,确保将 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_image.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, 150, 255, cv2.THRESH_BINARY)

可选:保存处理后的图像

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

使用 Tesseract 进行 OCR 识别

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

输出识别的文本

print(f"识别的验证码内容是:{text.strip()}")
3. 代码解析
图像预处理
加载图像:

使用 PIL 库中的 Image.open() 函数来加载验证码图像文件。
灰度化:

我们使用 ImageOps.grayscale() 方法将图像转换为灰度图像。灰度图像将图像的颜色信息转化为不同的灰度级别,减少了颜色对识别的干扰。
二值化:

使用 OpenCV 中的 cv2.threshold() 方法进行二值化处理。这将图像分为黑白两种颜色,有助于提高字符与背景的对比度。
使用 Tesseract 进行 OCR 识别
pytesseract.image_to_string() 函数用于从处理过的图像中提取文本。我们使用了 config="--psm 6" 来设置页面分割模式(PSM)。PSM 6 适用于包含多行文本的图像,通常适合验证码图像。
输出结果
最后,程序会输出识别到的验证码内容。对于清晰的验证码,Tesseract 通常可以很好地识别文本。
4. 运行程序
将代码保存为 captcha_recognition.py,并将验证码图片(例如 captcha_image.png)放在同一目录下。然后,在命令行中运行以下命令:

bash

python captcha_recognition.py
运行程序后,输出结果将会是类似下面的文本:

text

识别的验证码内容是:Z9L5W
5. 示例演示
输入图像:
假设验证码图像 captcha_image.png 如下所示:

处理后的图像:
图像经过灰度化和二值化处理后,通常会是黑白的,如下所示:

输出结果:
text

识别的验证码内容是:Z9L5W
6. 提高识别准确率
如果程序未能准确识别验证码,可能是因为图像质量较差或验证码过于复杂。以下是一些提高识别准确率的技巧:

  1. 图像预处理
    去噪声:对于包含噪声的验证码,可以通过高斯模糊或中值滤波来去除噪声,帮助增强字符的清晰度。

python

blurred_image = cv2.GaussianBlur(binary_image, (5, 5), 0)
自适应二值化:如果验证码图像背景不均匀,采用自适应阈值处理可能会有更好的效果:

python
更多内容访问ttocr.com或联系1436423940
binary_image = cv2.adaptiveThreshold(gray_cv_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
2. 调整 Tesseract 配置
Tesseract 支持多种页面分割模式(PSM),你可以根据验证码的具体情况调整设置。常见的配置包括:

--psm 6:假设图像包含多行文本,适用于大多数验证码。
--psm 7:假设图像只有一行文本,适用于简单的验证码。
--psm 3:适用于没有固定布局的文本。
3. 使用深度学习方法
对于一些复杂的验证码,传统的图像处理和 Tesseract 方法可能效果不佳。这时可以考虑使用深度学习模型(如 CRNN 或其他现代 OCR 模型)。基于深度学习的 OCR 引擎(例如 PaddleOCR 或 EasyOCR)能够更好地处理扭曲、噪声较多的验证码。

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