c# 如何实现 ocr 文字识别

Tesseract(推荐tesseractdotnet库)是C#中离线、免费、多语言OCR的最佳选择,需正确配置tessdata路径及chi_sim.traineddata文件,配合图像预处理可提升印刷体识别精度。

c# 如何实现 ocr 文字识别

Tesseract 是最直接的方案

在 C# 中做 OCR,Tesseract(通过封装库 Tesseract.NET 或官方推荐的 tesseractdotnet)是目前最成熟、免费、支持多语言且能离线运行的选择。它不依赖网络,识别精度对印刷体足够可靠,适合桌面应用或后台服务。

注意:不要用已停止维护的 Tesseract.NET(旧版 NuGet 包 ID 为 Tesseract),它不支持 .NET 6+,且缺乏 ARM64 和中文优化。应改用 tesseractdotnet(GitHub 仓库名:charlesw/tesseract)。

  • 安装命令:
    dotnet add package tesseractdotnet
  • 需额外下载对应语言数据文件(如 chi_sim.traineddata),放在项目输出目录(如 ./tessdata/)并确保路径可读
  • 初始化时必须显式指定 tessdata 路径,否则默认找不到中文模型

using Tesseract; 的最小可用示例

以下代码能在 .NET 6+ 控制台中跑通,识别一张含简体中文的 PNG 图片:

using Tesseract;

string imagePath = "sample.png"; string tessDataPath = Path.Combine(AppContext.BaseDirectory, "tessdata");

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

Console.WriteLine(text);

关键点:

Copy Leaks

Copy Leaks

AI内容检测和分级,帮助创建和保护原创内容

下载

  • tessDataPath 必须是包含 tessdata 文件夹的**父目录**,不是 tessdata 本身
  • "chi_sim" 是简体中文模型名,不是 "chi""chinese";繁体用 "chi_tra"
  • Pix 是 Tesseract 自带图像容器,不接受 BitmapImage,需用 Pix.LoadFromFilePix.LoadFromMemory

常见错误:Unable to load language 'chi_sim'

这个错误几乎总是路径或文件问题,和模型本身无关:

  • 检查 tessdata 文件夹是否真的复制到了输出目录(bin/Debug/net6.0/tessdata/
  • 确认 chi_sim.traineddata 文件名拼写完全一致(区分大小写,无空格、无后缀错误)
  • 若用 Visual Studio,右键该文件 → 属性 → “复制到输出目录” 设为“始终复制”
  • Linux/macOS 下注意文件权限,tessdata 目录需有读取权限

识别效果差?先调图,别急着换库

OCR 效果高度依赖输入图像质量。Tesseract 对模糊、低对比、倾斜、小字号、手写体基本无解,但对干净扫描件或截图效果很好。提升识别率的实操建议:

  • 预处理优先用 Pix 自带方法:img.Deskew()(自动纠偏)、img.BinarizeOtsu()(二值化)
  • 避免用 Bitmap 做缩放再转 Pix —— 插值会引入锯齿,改用 Pix.Scale()
  • 小文字区域可裁剪后单独识别:page.GetSegmentedRegions(PageIteratorLevel.Block) 配合 Pix.Clone()
  • 不推荐强行用 engine.SetVariable("tessedit_char_whitelist", "0123456789") 限制字符集,易漏字;应优先优化图像

复杂场景(如表格、多栏、带格式 PDF)需要额外布局分析,Tesseract 本身不擅长,得接 pdf2image + OpenCV 定位 ROI,再送入 Tesseract 分块识别。

https://www.php.cn/faq/1986960.html

发表回复

Your email address will not be published. Required fields are marked *