使用 Python 和 Tesseract 验证码识别

验证码(CAPTCHA)被广泛应用于各种网站和服务中,旨在防止自动化脚本进行恶意行为,例如注册虚假账户或进行暴力破解等。为了绕过这种防护措施,很多时候我们需要用到图像识别技术。本文将介绍如何使用 Python 和 Tesseract OCR 引擎实现对验证码的自动识别。

  1. 环境准备
    在开始之前,确保你已经安装了 Python 编程语言,并且在计算机上安装了 Tesseract OCR 引擎。以下是环境配置步骤。

安装 Python
如果你尚未安装 Python,可以访问 Python 官网 下载并安装最新版。

安装 Python 库
我们需要使用以下 Python 库:

pytesseract:Python 的 Tesseract OCR 接口,负责调用 Tesseract 引擎。
opencv-python:一个强大的图像处理库,用于加载和处理图像。
Pillow:Python 的图像库,用于图像的打开、保存和处理。
可以使用 pip 安装这些库:

bash

pip install pytesseract opencv-python pillow
安装 Tesseract
Tesseract 是一个开源的 OCR 引擎,必须单独安装。可以从 Tesseract 的 GitHub 页面 下载并安装 Tesseract。

Windows:可以下载适用于 Windows 的安装包,并在安装后将 Tesseract 路径添加到系统环境变量中。
Linux (Ubuntu):使用命令安装:
bash

sudo apt install tesseract-ocr
macOS:使用 Homebrew 安装:
bash

brew install tesseract
完成安装后,你可以通过以下命令确认 Tesseract 是否正确安装:

tesseract --version
2. 编写验证码识别代码
在这个部分,我们将使用 Python 编写一个简单的程序,加载验证码图像并使用 Tesseract 进行文字识别。以下是完整代码示例:

python

import pytesseract
from PIL import Image
import cv2

设置 Tesseract 的路径(Windows 用户需要配置路径)

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

读取图像

image_path = 'captcha.png' # 替换为你的验证码图像路径
image = cv2.imread(image_path)

转换为灰度图像

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

使用高斯模糊去噪声

blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

二值化处理

binary_image = cv2.adaptiveThreshold(blurred_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

可选:保存处理后的图像

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

使用 Tesseract 进行 OCR 识别

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

打印识别的验证码

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

我们使用 OpenCV 的 cv2.imread() 方法加载图像。请根据实际情况修改 image_path,以指向你的验证码图像。
灰度化:

cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 用于将图像转换为灰度图像。这样做是为了减少图像中的颜色信息,只关注亮度(灰度)值,使 OCR 引擎可以更容易地识别字符。
去噪:

使用高斯模糊(cv2.GaussianBlur())减少图像中的噪点和干扰。这有助于让 OCR 引擎更专注于字符的识别。
二值化:

我们通过 cv2.adaptiveThreshold() 方法将灰度图像转换为黑白二值图像,这有助于提高字符的对比度,使其更加清晰。
OCR 识别
使用 pytesseract.image_to_string(binary_image, config='--psm 6') 来调用 Tesseract 引擎进行图像文字识别。--psm 6 配置表示 OCR 引擎将处理包含单一文本块的图像,这对于验证码图片非常适用。
输出识别结果
程序将输出 OCR 识别的文本,去除多余的空格和换行符。例如,如果验证码是 ABCD123,输出结果将是:
text

识别的验证码是:ABCD123
4. 运行程序
将上述代码保存为 captcha_recognition.py,并确保图像文件(例如 captcha.png)和 Python 脚本在同一目录下。然后,在命令行中运行以下命令:

bash

python captcha_recognition.py
程序会加载图像,进行处理,并输出识别的验证码。

  1. 提高识别准确度
    对于某些验证码图像,可能需要进行额外的处理来提高识别准确度。以下是一些优化方法:

  2. 尝试不同的阈值化方法
    除了自适应阈值化方法外,你也可以尝试 Otsu 阈值化,它对于某些验证码图像可能更有效:

python

ret, binary_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
2. 去噪
如果验证码图像噪声较多,可以使用中值滤波等其他去噪方法:

python

denoised_image = cv2.medianBlur(binary_image, 3)
3. 调整 Tesseract 配置
Tesseract 提供了多种页面分割模式(PSM)。你可以根据图像结构调整 --psm 参数。常见的选项有:

--psm 3:适用于单行文本。
--psm 6:适用于文本块。
--psm 11:适用于稀疏文本。
例如,如果验证码包含多个字符区域,可以尝试使用:

python
更多内容访问ttocr.com或联系1436423940
text = pytesseract.image_to_string(binary_image, config='--psm 3')
4. 使用其他 OCR 引擎
如果 Tesseract 无法准确识别某些复杂的验证码图像,考虑使用其他基于深度学习的 OCR 模型,例如 EasyOCR 或 PaddleOCR,它们对于更复杂的验证码图像处理具有更强的能力。

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