在 .NET 中使用 Tesseract 做 OCR(光学字符识别)主要依赖开源的 Tesseract OCR Engine 及其 .NET 封装库 Tesseract 4.x/5.x C# wrapper。
下面我会给你一个从安装到完整代码示例的详细步骤。
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
- Windows:
- 安装语言包
- 英文(eng)通常自带。
- 中文简体(chi_sim)下载后放到
tessdata
目录:- 中文简体语言包下载地址
- 文件名:
chi_sim.traineddata
- 路径示例:
C:\Program Files\Tesseract-OCR\tessdata\chi_sim.traineddata
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.traineddata
在tessdata
目录下。 - 若要识别中英混合:
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️⃣ 图片预处理提升识别率(可选)
你可以用 OpenCvSharp 或 System.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 主要分为三步:
- 安装 Tesseract 引擎与语言包。
- 引入
Tesseract
NuGet 包。 - 调用
TesseractEngine
进行图片文字识别(支持中文、英文、多语言组合)。
发表回复