Python 和 Tesseract 进行验证码识别
验证码(CAPTCHA)广泛用于网站和应用中,作为一种防止自动化攻击的手段,它通常包含一些扭曲的文本或图形,要求用户输入正确的内容。为了绕过这一防护,自动化工具通常需要能够识别这些验证码。在本文中,我们将使用 Python 编程语言和 Tesseract OCR 引擎,介绍如何实现验证码的自动化识别。
- 环境准备
安装 Python 和相关库
首先,确保你的计算机已经安装了 Python。你可以访问 Python 官网 下载并安装 Python。
接下来,我们需要安装几个必要的库:
pytesseract:这是 Tesseract OCR 的 Python 接口,允许我们通过 Python 使用 Tesseract 引擎进行文本识别。
opencv-python:用于图像处理和计算机视觉任务,提供图像加载、变换和处理功能。
Pillow:一个图像处理库,可以用于打开和保存图像文件。
你可以通过以下命令安装这些库:
bash
pip install pytesseract opencv-python pillow
安装 Tesseract OCR 引擎
Tesseract 是一个开源的 OCR 引擎,我们需要在计算机上安装它。安装方法如下:
Linux(Ubuntu):
bash
sudo apt install tesseract-ocr
macOS(使用 Homebrew):
bash
brew install tesseract
Windows: 访问 Tesseract GitHub 页面 下载并安装适合 Windows 的版本。安装完成后,你需要将 Tesseract 的路径添加到系统的环境变量中。
确认 Tesseract 安装是否成功,可以在终端运行以下命令:
bash
tesseract --version
2. 编写验证码识别代码
现在,我们可以开始编写一个简单的 Python 程序来识别验证码。以下是一个完整的示例代码,演示如何加载验证码图像、进行预处理并使用 Tesseract 进行 OCR 识别。
python
import pytesseract
from PIL import Image
import cv2
import numpy as np
设置 Tesseract 的路径(Windows 用户需要配置路径)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
读取验证码图像
image_path = 'captcha_image.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() 函数将图像转换为灰度图像。灰度化有助于减少颜色干扰,使文字更加突出。
去噪声:
使用高斯模糊(cv2.GaussianBlur())去除图像中的噪声。模糊处理会将图像中的细节平滑化,有助于 OCR 引擎更好地识别文本。
二值化处理:
使用 cv2.adaptiveThreshold() 将图像转换为黑白二值图像。自适应阈值化可以根据图像局部区域的亮度进行二值化,从而提高字符的对比度,使得 OCR 识别更加准确。
OCR 识别
pytesseract.image_to_string() 是调用 Tesseract OCR 引擎进行文字识别的函数。config='--psm 6' 设置了 Tesseract 的页面分割模式(Page Segmentation Mode)。--psm 6 模式适用于图像包含单一文本块的情况,适合验证码类型的识别。
输出结果
程序会打印出识别的验证码文本。例如,识别图像中的验证码 ABC123,输出结果为:
text
识别的验证码是:ABC123
4. 运行程序
将上述代码保存为 captcha_recognition.py,然后确保验证码图像文件(例如 captcha_image.png)与 Python 文件在同一目录下。在命令行中运行以下命令:
bash
python captcha_recognition.py
程序会加载图像,进行处理,并输出识别的验证码。
-
提高识别精度
如果图像处理后,OCR 识别的精度不够高,可能是因为验证码图像较复杂或者 OCR 引擎无法很好地处理某些特殊情况。你可以尝试以下方法来提高识别效果: -
使用不同的阈值化方法
除了自适应阈值化,你还可以尝试使用 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,它们能够更好地处理扭曲和复杂的验证码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异