用 C# 与 Tesseract 实现验证码识别系统

一、项目概述

验证码识别在自动化测试、爬虫开发与用户辅助系统中具有重要价值。本文将介绍如何使用 C# 调用 Tesseract OCR 实现验证码图像识别功能,并对验证码图像进行简单预处理,以提高识别准确率。

二、开发环境准备

  1. 安装 Tesseract
    更多内容访问ttocr.com或联系1436423940
    请先从 https://github.com/tesseract-ocr/tesseract
    下载并安装 Tesseract OCR。安装路径如:

C:\Program Files\Tesseract-OCR\tesseract.exe

安装后将其路径加入环境变量。

  1. 创建 C# 项目

使用 Visual Studio 创建一个 Windows 控制台应用程序 或 .NET Core 控制台应用程序 项目。

在 NuGet 中安装以下包:

Install-Package Tesseract

三、验证码识别核心代码
using System;
using Tesseract;
using System.Drawing;
using System.Drawing.Imaging;

class Program
{
static void Main(string[] args)
{
string imagePath = "captcha.png";
string tessDataPath = @"./tessdata"; // tessdata 路径

    // 图像预处理(灰度 + 二值化)
    Bitmap processed = PreprocessImage(imagePath);

    // 初始化 OCR 引擎
    using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default))
    {
        engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");

        using (var img = PixConverter.ToPix(processed))
        using (var page = engine.Process(img))
        {
            string text = page.GetText().Trim();
            Console.WriteLine("识别结果: " + text);
        }
    }
}

static Bitmap PreprocessImage(string imagePath)
{
    Bitmap bitmap = new Bitmap(imagePath);
    Bitmap gray = new Bitmap(bitmap.Width, bitmap.Height);

    // 灰度处理
    for (int y = 0; y < bitmap.Height; y++)
    {
        for (int x = 0; x < bitmap.Width; x++)
        {
            Color c = bitmap.GetPixel(x, y);
            int grayValue = (c.R + c.G + c.B) / 3;
            Color grayColor = grayValue > 150 ? Color.White : Color.Black;
            gray.SetPixel(x, y, grayColor);
        }
    }

    return gray;
}

}

四、tessdata 获取与配置

Tesseract OCR 识别语言数据位于 tessdata 文件夹中,可从官方仓库下载:

英文语言文件:https://github.com/tesseract-ocr/tessdata

将 eng.traineddata 文件放入项目根目录下的 tessdata 文件夹中。

五、识别效果演示

验证码示例图:

文件名:captcha.png

图像内容:清晰的四位大写字母+数字组合,如 F2KZ

程序输出结果:

识别结果: F2KZ

posted @ 2025-09-11 16:59  ttocr、com  阅读(43)  评论(0)    收藏  举报