C# 和 Tesseract 实现英文数字验证码识别

一、项目概述
本文介绍如何使用 C# 和 Tesseract OCR 库识别一张英文数字验证码图片。我们将通过图像预处理(灰度化)提升识别准确率,并调用 Tesseract 识别图像中的文本内容。
更多内容访问ttocr.com或联系1436423940
二、开发环境准备
安装 Visual Studio(或 Rider)
推荐使用 Visual Studio 2022 及以上,安装包含“.NET桌面开发”的工作负载。

安装 Tesseract OCR
Windows 用户可通过 Tesseract 官方安装包 安装。

安装完成后,将 tesseract.exe 所在路径加入系统环境变量。

三、创建项目并添加 NuGet 包
新建一个控制台项目:

dotnet new console -n CaptchaOCR
cd CaptchaOCR
添加 OCR 相关依赖:

dotnet add package Tesseract
dotnet add package System.Drawing.Common
四、编写识别程序
在 Program.cs 中输入以下代码:

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

class Program
{
static void Main()
{
string inputImage = "captcha.png";
string processedImage = "gray_captcha.png";

    // 加载图像并转为灰度图
    using (Bitmap bmp = new Bitmap(inputImage))
    {
        Bitmap grayBmp = ToGrayscale(bmp);
        grayBmp.Save(processedImage, ImageFormat.Png);
    }

    // OCR 识别
    using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
    {
        engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");

        using (var img = Pix.LoadFromFile(processedImage))
        using (var page = engine.Process(img))
        {
            string text = page.GetText();
            Console.WriteLine("识别出的验证码为: " + text.Trim());
        }
    }
}

// 将图像转换为灰度图
static Bitmap ToGrayscale(Bitmap original)
{
    Bitmap gray = new Bitmap(original.Width, original.Height);

    for (int y = 0; y < gray.Height; y++)
    {
        for (int x = 0; x < gray.Width; x++)
        {
            Color oc = original.GetPixel(x, y);
            int grayVal = (int)(0.299 * oc.R + 0.587 * oc.G + 0.114 * oc.B);
            Color nc = Color.FromArgb(grayVal, grayVal, grayVal);
            gray.SetPixel(x, y, nc);
        }
    }

    return gray;
}

}
五、准备验证码图像
请将一张名为 captcha.png 的英文数字验证码图像放在程序运行目录下。

确保目录中存在 tessdata 文件夹,并包含 eng.traineddata(可以从 tesseract-ocr/tessdata 下载)。

六、运行程序
在项目目录运行:

dotnet run
输出示例:

识别出的验证码为: a7GZP
七、进一步优化建议
增加图像二值化、去噪处理以进一步提高识别准确率。

添加 GUI 界面(如使用 WinForms 或 WPF)使程序更友好。

批量处理多个验证码图像,实现自动化识别。

使用正则表达式进一步筛选输出字符。

posted @ 2025-06-11 16:50  ttocr、com  阅读(5)  评论(0)    收藏  举报