使用 Python 和 Tesseract 验证码识别
验证码(CAPTCHA)被广泛应用于各种网站和服务中,旨在防止自动化脚本进行恶意行为,例如注册虚假账户或进行暴力破解等。为了绕过这种防护措施,很多时候我们需要用到图像识别技术。本文将介绍如何使用 Python 和 Tesseract OCR 引擎实现对验证码的自动识别。
- 环境准备
在开始之前,确保你已经安装了 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
程序会加载图像,进行处理,并输出识别的验证码。
-
提高识别准确度
对于某些验证码图像,可能需要进行额外的处理来提高识别准确度。以下是一些优化方法: -
尝试不同的阈值化方法
除了自适应阈值化方法外,你也可以尝试 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 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异