0

0

c# 如何实现 ocr 文字识别

幻夢星雲

幻夢星雲

发布时间:2026-01-16 00:13:14

|

337人浏览过

|

来源于php中文网

原创

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 分块识别。

相关专题

更多
macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

331

2025.05.09

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1348

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

701

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

572

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

545

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

297

2023.07.20

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.2万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号