Python 和 pytesseract 实现验证码识别

验证码识别是一个常见的自动化需求,广泛应用于数据抓取、自动登录等场景。本文将介绍如何使用 Python 和 pytesseract(一种 Tesseract OCR 的封装库)实现英文数字验证码的自动化识别。

  1. 环境准备
    安装 Tesseract OCR
    Tesseract 是一个开源的光学字符识别(OCR)引擎,可识别多种语言和字符。首先,需要在系统中安装 Tesseract:

Windows 用户:从 Tesseract 官方 GitHub 下载并安装。
Linux 用户:运行以下命令安装:
bash
更多内容访问ttocr.com或联系1436423940
sudo apt install tesseract-ocr
macOS 用户:通过 Homebrew 安装:
bash

brew install tesseract
安装完成后,在终端中运行以下命令,验证安装是否成功:

bash

tesseract --version
安装 Python 和所需库
确保系统中已安装 Python(推荐版本 3.7 或以上)。然后安装必要的依赖库:

bash

pip install pytesseract pillow
2. 编写验证码识别代码
以下是完整的 Python 代码示例,用于加载验证码图像并识别其内容:

python

from PIL import Image
import pytesseract

设置 Tesseract 的路径(如果需要)

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

def recognize_captcha(image_path):
try:
# 打开图像
img = Image.open(image_path)

    # 使用 Tesseract OCR 识别文字
    text = pytesseract.image_to_string(img, lang='eng')
    
    return text.strip()
except Exception as e:
    return f"识别失败: {e}"

验证码图像路径

captcha_image = "captcha.png"

执行识别

result = recognize_captcha(captcha_image)
print(f"识别的验证码是: {result}")
3. 图像预处理
为了提高识别准确率,可以在调用 OCR 前对图像进行处理,例如灰度化、二值化或降噪。以下代码演示了如何使用 Pillow 库进行图像预处理:

灰度化和二值化
python

from PIL import Image

def preprocess_image(input_path, output_path):
# 打开图像
img = Image.open(input_path)

# 转换为灰度图像
gray = img.convert('L')

# 二值化(设定阈值为128)
binary = gray.point(lambda x: 0 if x < 128 else 255, '1')

# 保存处理后的图像
binary.save(output_path)

原始图像路径和处理后图像路径

input_image = "captcha.png"
processed_image = "processed_captcha.png"

preprocess_image(input_image, processed_image)
print(f"图像预处理完成,保存为 {processed_image}")
将预处理后的图像传递给 OCR 识别函数:

python

result = recognize_captcha(processed_image)
print(f"识别的验证码是: {result}")
4. 优化识别效果
调整 OCR 参数

可以通过设置 Tesseract 的 config 参数来优化识别。例如,只识别数字和字母:
python

text = pytesseract.image_to_string(img, config='--psm 6 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
降噪处理

对于噪点较多的验证码图像,可以尝试使用滤波器去除噪点,例如:
python

from PIL import ImageFilter

def denoise_image(image_path, output_path):
img = Image.open(image_path)
filtered_img = img.filter(ImageFilter.MedianFilter(size=3))
filtered_img.save(output_path)

denoise_image("captcha.png", "denoised_captcha.png")
自定义训练

如果验证码字体特殊,可以为 Tesseract 创建自定义的训练数据,从而显著提高识别准确率。
5. 运行代码
将上述代码保存为 captcha_recognition.py,并将验证码图像保存为 captcha.png。在终端运行以下命令:

bash

python captcha_recognition.py
程序会加载图像,进行预处理并识别,输出类似以下的结果:

makefile

识别的验证码是: A12B3C

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