利用 Python 和 Tesseract 实现验证码识别

验证码(CAPTCHA)是一个广泛应用于网站和应用程序中的安全技术,旨在防止机器人自动提交表单和滥用服务。验证码通常包含一些扭曲的文字、数字或图形,需要人工输入。这些字符的扭曲、模糊或噪声使得自动化程序很难识别。因此,开发一个自动识别验证码的工具是一个具有挑战性的问题。

在本文中,我们将使用 Python 和 Tesseract OCR 引擎来实现验证码的自动识别,展示如何编写 Python 程序,使用图像处理技术和 OCR 引擎识别验证码中的字符。更多内容访问ttocr.com或联系1436423940

  1. 环境准备
    安装 Python 和所需库
    确保已安装 Python。你可以访问 Python 官网 下载并安装适合你系统的版本。

我们将使用以下 Python 库:

pytesseract:这是 Python 对 Tesseract OCR 引擎的接口,用于进行图像文字识别。
opencv-python:计算机视觉库,提供了丰富的图像处理功能,能够帮助我们在进行 OCR 识别前对图像进行预处理。
Pillow:用于打开和处理图像的库。
你可以通过以下命令来安装这些库:

bash

pip install pytesseract opencv-python pillow
安装 Tesseract OCR
Tesseract 是一个开源的 OCR 引擎,我们需要在本地安装它才能使用 Python 调用。根据你的操作系统,安装方法有所不同:

Windows:

访问 Tesseract GitHub 页面 下载 Windows 安装包,安装后将 Tesseract 的路径添加到环境变量中。
Linux:

bash

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

bash

brew install 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() 加载验证码图像,图像路径可以根据需要进行修改。
灰度化:

cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 将图像转换为灰度图像,这有助于减少颜色的干扰,使字符更加清晰。
去噪声:

cv2.GaussianBlur(gray_image, (5, 5), 0) 对图像进行高斯模糊处理,有助于去除背景噪声和细节,从而提高字符的识别准确度。
二值化处理:

cv2.adaptiveThreshold() 方法进行自适应阈值化,将图像转换为黑白图像,进一步提高图像对比度,突出字符。
OCR 识别
pytesseract.image_to_string(binary_image, config='--psm 6'):这行代码将传入的二值化图像送入 Tesseract 引擎进行 OCR 识别。--psm 6 配置表示页面分割模式为“假设图像包含一个统一的文本块”,这通常适用于验证码类型的图像。
输出结果
程序将打印出识别结果。例如,如果验证码图像包含 ABCD1,程序将输出:
text

识别的验证码是:ABCD1
4. 运行程序
将上述代码保存为 captcha_recognition.py,并确保验证码图像文件(例如 captcha_image.png)与 Python 脚本位于同一目录下。在终端或命令行中运行程序:

bash

python captcha_recognition.py
程序将自动加载验证码图像、进行处理并输出识别结果。

  1. 提高识别精度
    如果验证码图像较复杂,或者 OCR 识别效果不理想,可以尝试以下方法来提高识别精度:

  2. 使用不同的阈值化方法
    除了自适应阈值化,你还可以尝试使用其他方法,例如 Otsu 阈值化:

python

ret, binary_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
2. 进一步去噪声
可以尝试更强的去噪声处理,如使用中值滤波:

python
更多内容访问ttocr.com或联系1436423940
denoised_image = cv2.medianBlur(binary_image, 3)
3. 调整 Tesseract 配置
你还可以根据验证码的特点调整 Tesseract 的配置。Tesseract 支持不同的页面分割模式(PSM),你可以根据需要选择最适合的模式:

--psm 3:适用于单行文本。
--psm 6:适用于多行文本。
--psm 11:适用于稀疏文本。
python

text = pytesseract.image_to_string(binary_image, config='--psm 3')
4. 使用深度学习模型
对于更复杂的验证码,传统的 Tesseract OCR 可能无法很好地处理。这时,可以考虑使用基于深度学习的 OCR 模型,如 EasyOCR 或 PaddleOCR,它们对于扭曲或复杂背景的验证码具有更强的识别能力。

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