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

验证码识别是一项常见的图像处理任务,尤其在自动化测试和数据采集场景中非常实用。本文将介绍如何在 C# 环境下,结合 Tesseract OCR 完成英文数字验证码的自动识别。

一、开发环境准备

  1. 安装 Visual Studio
    建议使用 Visual Studio 2019 或以上版本,安装时确保勾选:

.NET 桌面开发

C++ 生成工具(因 Tesseract 需要用到)

  1. 下载和配置 Tesseract OCR
    下载 Windows 版 Tesseract:https://github.com/tesseract-ocr/tesseract

安装后,添加其安装目录(如 C:\Program Files\Tesseract-OCR)到系统环境变量中。

二、创建项目
在 Visual Studio 中:

新建 控制台应用(.NET 6 或 .NET Framework)

安装 NuGet 包:

Install-Package Tesseract
三、项目结构说明
准备一张验证码图片(如 captcha.png)放入 bin/Debug/net6.0/ 目录。

四、核心识别代码
以下是完整的 C# 示例程序:

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

class Program
{
static void Main(string[] args)
{
string tessPath = @"C:\Program Files\Tesseract-OCR\tessdata"; // tesseract 数据路径
string imagePath = "captcha.png";

    // 灰度预处理
    string grayImagePath = "gray_captcha.png";
    ConvertToGrayscale(imagePath, grayImagePath);

    using var engine = new TesseractEngine(tessPath, "eng", EngineMode.Default);
    using var img = Pix.LoadFromFile(grayImagePath);
    using var page = engine.Process(img);

    string text = page.GetText().Trim();
    Console.WriteLine("识别结果: " + text);
}

static void ConvertToGrayscale(string inputPath, string outputPath)
{
    using var bmp = new Bitmap(inputPath);
    using var grayBmp = new Bitmap(bmp.Width, bmp.Height);

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

    grayBmp.Save(outputPath, ImageFormat.Png);
}

}
五、运行结果
执行后,输出如下:

识别结果: A3ZB7
你可以用不同的英文数字验证码图片进行测试。

六、提升识别率的建议
使用图像处理库(如 OpenCvSharp)进行边缘去噪、图像增强

增加 Tesseract 参数控制(如 PSM 模式设为 7)

对字体模糊验证码,可考虑深度学习模型如 CNN

posted @ 2025-06-07 21:47  ttocr、com  阅读(68)  评论(0)    收藏  举报