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

验证码(CAPTCHA)是防止恶意机器人自动提交表单或执行其他操作的一种有效手段。然而,在一些应用场景下,我们可能需要自动化地识别验证码。本文将介绍如何使用 Python 编程语言和 Tesseract OCR 引擎来实现验证码识别。

  1. 环境准备
    安装 Tesseract OCR
    首先,你需要在你的计算机上安装 Tesseract OCR 引擎。Tesseract 是一个开源的 OCR 引擎,广泛用于图像文字识别。安装方法如下:
    更多内容访问ttocr.com或联系1436423940
    Windows:可以从 Tesseract 官方 GitHub 下载 Windows 安装包,安装时选择添加到环境变量。
    Linux:使用以下命令安装:
    bash
    更多内容访问ttocr.com或联系1436423940
    sudo apt-get install tesseract-ocr
    macOS:使用 Homebrew 安装:
    bash

brew install tesseract
安装完成后,可以在命令行中检查 Tesseract 是否正确安装:

bash

tesseract --version
安装 Python 和依赖库
确保你已经安装了 Python 环境。如果还没有安装,可以从 Python 官网 下载并安装。

然后,使用 pip 安装相关的 Python 库:

bash

pip install pytesseract Pillow opencv-python
pytesseract 是 Tesseract 的 Python 包接口。
Pillow 是 Python 的图像处理库,支持常见的图像格式。
opencv-python 是 OpenCV 的 Python 接口,常用于图像处理。
2. 编写验证码识别代码
以下是一个简单的 Python 程序,展示了如何使用 Tesseract OCR 引擎来识别验证码。程序使用了 pytesseract 和 Pillow 来加载并处理图像。

python

import pytesseract
from PIL import Image
import cv2
import numpy as np

配置 Tesseract OCR 的安装路径(Windows 环境需要设置)

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 根据实际路径修改

def preprocess_image(image_path):
# 读取图像
img = cv2.imread(image_path)

# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化处理:使用 Otsu 算法自动计算阈值
_, binarized_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

return binarized_img

def recognize_captcha(image_path):
# 预处理图像
processed_image = preprocess_image(image_path)

# 保存预处理后的图像(如果需要调试)
cv2.imwrite("processed_captcha.png", processed_image)

# 使用 Tesseract 进行 OCR 识别
text = pytesseract.image_to_string(processed_image)

return text.strip()

if name == "main":
# 输入验证码图像路径
captcha_image_path = 'captcha.png'

# 识别验证码
recognized_text = recognize_captcha(captcha_image_path)

print(f"识别的验证码是: {recognized_text}")
  1. 图像预处理
    为了提高 OCR 识别的准确性,通常需要对图像进行预处理,尤其是验证码类图像。以下是常见的图像预处理方法:

  2. 灰度化:
    将彩色图像转换为灰度图像,这样可以去除颜色的干扰,使得文本部分更加突出。

  3. 二值化:
    将灰度图像转换为黑白图像,通过对比度增强来使字符与背景之间的区分更清晰。OpenCV 提供了多种二值化方法,如 Otsu 阈值化。

  4. 去噪:
    使用滤波算法去除图像中的噪声,保证字符的边缘清晰。可以使用中值滤波或高斯滤波来减少噪点。

在上述代码中,我们首先将图像转换为灰度图,然后使用 Otsu 算法进行二值化。

python

使用 Otsu 算法自动选择阈值

_, binarized_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
4. 提高识别准确率
Tesseract 是一个强大的 OCR 引擎,但在某些复杂的验证码中,识别结果可能并不理想。以下是一些常见的优化方法:

  1. 使用字符白名单:
    如果验证码只包含数字或字母,可以设置字符白名单,限制 Tesseract 只识别特定字符,从而提高识别准确度。

python

custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
text = pytesseract.image_to_string(processed_image, config=custom_config)
--oem 3 表示使用默认的 OCR 引擎模式。
--psm 6 表示适用于单一文本行的页面分割模式。
tessedit_char_whitelist 用于设置字符白名单。
2. 调整 OCR 配置:
Tesseract 提供了多个参数可以配置 OCR 引擎的行为。你可以通过 --psm 设置不同的页面分割模式,或者通过 --oem 调整 OCR 引擎的模式。常用的 psm 模式包括:

psm 3:默认模式,适用于普通文本。
psm 6:适用于单行文本。
psm 11:适用于稀疏文本。
你可以根据验证码的特点选择合适的 psm 模式。

  1. 使用图像分割:
    对于一些复杂的验证码,可以将图像分割成多个小图像,每个小图像只包含一个字符,然后分别对每个字符进行 OCR 识别,最后合并结果。你可以使用 OpenCV 或 Pillow 来识别字符的边界并切割图像。

  2. 去噪和清晰化:
    如果验证码的背景噪声很大,可以使用更强的去噪算法(如中值滤波或高斯滤波)来处理图像,进一步提升识别精度。

python

高斯模糊去噪

denoised_img = cv2.GaussianBlur(processed_image, (5, 5), 0)
5. 运行程序
保存代码为 captcha_recognition.py,并确保你已经安装了相关的 Python 库。将验证码图像(例如 captcha.png)放在项目目录中。然后,运行以下命令:

bash

python captcha_recognition.py
如果一切正常,程序会输出类似以下内容:

makefile

识别的验证码是: X9D2A

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