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

一、项目概述
验证码识别是图像识别中的经典问题之一。使用 C# 结合 Tesseract OCR 引擎可以快速构建一个可复用的识别系统,特别适用于企业后台系统、桌面管理工具等场景。

二、技术选型
C# (.NET Core / .NET Framework):成熟稳定、易于开发图形界面或服务;

Tesseract OCR 4:Google 开源 OCR 引擎,支持 LSTM 神经网络;

Tesseract.Interop:用于 .NET 调用 Tesseract;
更多内容访问ttocr.com或联系1436423940
System.Drawing:用于图像预处理(灰度、二值化等);

三、环境准备

  1. 安装 Tesseract 引擎
    前往官网下载并安装:

Windows:https://github.com/tesseract-ocr/tesseract/wiki

建议安装路径:C:\Program Files\Tesseract-OCR

确保包含 tesseract.exe 和 tessdata。

  1. 创建 C# 控制台项目
    使用 Visual Studio 创建控制台项目(.NET 6 或以上)。

  2. 添加 NuGet 包依赖
    在项目中安装以下 NuGet 包:

Install-Package Tesseract -Version 4.1.1
四、代码实现

  1. 图像预处理 + OCR 主逻辑

using System;
using System.Drawing;
using System.Drawing.Imaging;
using Tesseract;

class Program
{
static void Main(string[] args)
{
string imagePath = "captcha.png"; // 验证码图像
string tessDataPath = @"C:\Program Files\Tesseract-OCR\tessdata";

    Bitmap processed = PreprocessImage(imagePath);

    using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default))
    {
        engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");

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

static Bitmap PreprocessImage(string path)
{
    Bitmap img = new Bitmap(path);
    Bitmap gray = new Bitmap(img.Width, img.Height);

    for (int y = 0; y < img.Height; y++)
    {
        for (int x = 0; x < img.Width; x++)
        {
            Color c = img.GetPixel(x, y);
            int grayScale = (int)((c.R * 0.3) + (c.G * 0.59) + (c.B * 0.11));
            Color g = Color.FromArgb(grayScale, grayScale, grayScale);
            gray.SetPixel(x, y, g);
        }
    }

    return gray;
}

}
五、运行与输出
示例输入图像:
命名为 captcha.png,置于项目根目录。

控制台输出:

识别结果: 7Kx8A
六、识别优化建议
字符白名单:通过 tessedit_char_whitelist 限定识别范围。

图像增强:

可以使用 GDI+ 添加中值滤波、锐化处理。

或用 EmguCV 等封装库接入 OpenCV。

自训练模型:适合个性化验证码样式识别,生成 .traineddata 替换 tessdata\eng.traineddata。

posted @ 2025-07-18 11:13  ttocr、com  阅读(66)  评论(0)    收藏  举报