在 .NET 中使用 Tesseract 做 OCR(光学字符识别)主要依赖开源的 Tesseract OCR Engine 及其 .NET 封装库 Tesseract 4.x/5.x C# wrapper
下面我会给你一个从安装到完整代码示例的详细步骤。


1️⃣ 安装环境

  1. 安装 Tesseract OCR 引擎
    • Windows:
      • 可以从 UB Mannheim 下载已编译好的版本(支持多语言)。
      • 安装后记住安装路径,例如: C:\Program Files\Tesseract-OCR\
    • Linux(Ubuntu 示例): sudo apt update sudo apt install tesseract-ocr sudo apt install tesseract-ocr-chi-sim tesseract-ocr-eng
  2. 安装语言包
    • 英文(eng)通常自带。
    • 中文简体(chi_sim)下载后放到 tessdata 目录:

2️⃣ 创建 .NET 项目并安装 NuGet 包

dotnet new console -n TesseractDemo
cd TesseractDemo
dotnet add package Tesseract

这里的 Tesseract NuGet 包是对原生 Tesseract 的 C# 封装(可用于 .NET 6/7/8)。


3️⃣ 基本使用示例(识别英文)

using System;
using Tesseract;

class Program
{
    static void Main(string[] args)
    {
        string tessDataPath = @"C:\Program Files\Tesseract-OCR\tessdata"; // 语言包目录
        string imagePath = @"test-eng.png"; // 需要识别的图片

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

        Console.WriteLine("识别结果:");
        Console.WriteLine(page.GetText());
        Console.WriteLine($"置信度: {page.GetMeanConfidence() * 100:F2}%");
    }
}

4️⃣ 识别中文

using var engine = new TesseractEngine(tessDataPath, "chi_sim", EngineMode.Default);
  • 确保 chi_sim.traineddatatessdata 目录下。
  • 若要识别中英混合: using var engine = new TesseractEngine(tessDataPath, "chi_sim+eng", EngineMode.Default);

5️⃣ 常见问题与解决

问题原因解决方法
System.DllNotFoundException: leptonica-1.80.0.dll缺少原生依赖确认安装了 Tesseract OCR 引擎,并将其 bin 目录添加到系统 PATH
识别结果乱码语言包不匹配确认传入的语言参数与 .traineddata 文件一致
识别精度低图片模糊、噪点多先做图片预处理(灰度化、二值化、去噪)再识别

6️⃣ 图片预处理提升识别率(可选)

你可以用 OpenCvSharpSystem.Drawing 在 OCR 前优化图片,例如:

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

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

    for (int y = 0; y < bmp.Height; y++)
    {
        for (int x = 0; x < bmp.Width; x++)
        {
            var c = bmp.GetPixel(x, y);
            int grayValue = (c.R + c.G + c.B) / 3;
            gray.SetPixel(x, y, grayValue > 128 ? Color.White : Color.Black);
        }
    }
    gray.Save(outputPath, ImageFormat.Png);
}

总结
在 .NET 中使用 Tesseract OCR 主要分为三步:

  1. 安装 Tesseract 引擎与语言包。
  2. 引入 Tesseract NuGet 包。
  3. 调用 TesseractEngine 进行图片文字识别(支持中文、英文、多语言组合)。