使用 C# + Tesseract OCR 实现英文数字验证码识别

一、准备工作
安装 Tesseract OCR

下载并安装 Tesseract OCR:Tesseract OCR GitHub

安装路径中包含 tesseract.exe 文件,记得将其路径添加到系统环境变量中。

安装 C# Tesseract 包
更多内容访问ttocr.com或联系1436423940
我们需要使用 Tesseract 的 .NET 封装库 Tesseract.Net,它支持将 Tesseract OCR 引擎集成到 C# 项目中。通过 NuGet 安装:

Install-Package Tesseract
或者使用 .NET CLI 安装:

dotnet add package Tesseract
二、项目结构
假设项目结构如下:

captcha-ocr-csharp/
├── Program.cs
├── captcha.png # 你的验证码图片
└── bin/
三、编写验证码识别代码
在 Program.cs 文件中编写以下代码:

using System;
using System.Drawing;
using Tesseract;

class Program
{
static void Main(string[] args)
{
// Tesseract OCR 数据文件路径
string tesseractDataPath = @"C:\Program Files\Tesseract-OCR\tessdata"; // 修改为你的路径

    // 读取验证码图片
    string imagePath = "captcha.png";

    // 进行 OCR 识别
    string recognizedText = RecognizeCaptcha(imagePath, tesseractDataPath);

    // 输出识别结果
    Console.WriteLine("识别的验证码是: " + recognizedText);
}

static string RecognizeCaptcha(string imagePath, string tesseractDataPath)
{
    try
    {
        // 加载 Tesseract OCR 引擎
        using (var engine = new TesseractEngine(tesseractDataPath, "eng", EngineMode.Default))
        {
            // 读取图像文件
            using (var img = Pix.LoadFromFile(imagePath))
            {
                // 进行 OCR 识别
                var result = engine.Process(img);

                // 返回识别出的文本
                return result.GetText().Trim();
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("识别失败: " + ex.Message);
        return string.Empty;
    }
}

}
四、运行程序
将验证码图像命名为 captcha.png,放在项目根目录。

执行项目:

dotnet run
输出示例:

识别的验证码是: D8F7G
五、图像处理(可选)
在处理验证码时,我们可以对图像做一些预处理(如灰度化、二值化等),从而提高识别准确率。Tesseract 本身对一些背景复杂、噪声多的图像识别能力有限,但可以通过 OpenCV 或其他图像处理库进行辅助处理。

你可以通过 OpenCV 或其他库进行图像处理后,再传给 Tesseract 进行识别,代码示例:

using OpenCvSharp;

public static string PreprocessImage(string imagePath)
{
// 读取图像
Mat img = Cv2.ImRead(imagePath, ImreadModes.Grayscale);

// 二值化图像
Mat thresholded = new Mat();
Cv2.Threshold(img, thresholded, 0, 255, ThresholdTypes.BinaryInv);

// 保存处理后的图像
string processedImagePath = "processed_captcha.png";
Cv2.ImWrite(processedImagePath, thresholded);

return processedImagePath;

}
六、总结与优化
性能优化:C# 本身性能强大,可以通过并发处理多个验证码来提升识别速度,适合大规模的验证码识别任务。

图像预处理:对于背景复杂的验证码,可以引入 OpenCV 等图像处理库进行灰度化、二值化、去噪等操作,进一步提高识别率。

语言扩展:可以通过修改 TesseractEngine 初始化中的语言参数,来识别中文、法文等其他语言的验证码。

七、进阶玩法
Web 应用集成:将 Tesseract OCR 功能封装成 Web API,通过 ASP.NET Core 或其他 Web 框架进行调用,支持在线验证码识别。

批量处理:结合 .NET 的并发特性,可以对多个验证码图像进行并行识别,进一步提高识别效率。

posted @ 2025-04-15 22:14  ttocr、com  阅读(164)  评论(0)    收藏  举报