C# Tesseract OCR 示例
by吉姆·贝克
Tesseract 是一个优秀的学术OCR(光学字符识别)对开发者而言,在几乎所有使用场景下,库可以免费使用。
C# 很幸运拥有最准确、最快速的 Tesseract 库之一。
IronOCR 通过 IronTesseract
扩展了 Google Tesseract - 一个原生 C# OCR 库,比免费的 Tesseract 库具有更好的稳定性和更高的准确性。
本文比较并解释了为什么.NET开发者强烈考虑使用IronOCR IronTesseract
而非原生Tesseract。
如何在 C# for .NET 中使用 Tesseract OCR?
- 在 Visual Studio 中安装 Google Tesseract 和 IronOCR for .NET
- 检查 C# 的最新版本
- 审查准确性和图像兼容性
- 测试性能和应用程序接口功能
- 考虑多语言支持
.NET OCR使用示例 - 在C#中从图像提取文本
使用 NuGet 包管理器将 IronOCR NuGet 包安装到您的 Visual Studio 解决方案中。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-1.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Hundreds of languages available
ocr.Language = OcrLanguage.English;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
// input.DeNoise(); optional filter
// input.Deskew(); optional filter
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
// Explore the OcrResult using IntelliSense
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Hundreds of languages available
ocr.Language = OcrLanguage.English
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
' input.DeNoise(); optional filter
' input.Deskew(); optional filter
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
' Explore the OcrResult using IntelliSense
安装选项
使用 Tesseract 引擎进行 .NET 的 OCR
在使用 Tesseract 引擎时,我们大多数人都在使用 C++ 库。
在 .NET 中进行互操作性并不有趣,且跨平台和 Azure 兼容性较差。 它要求我们选择应用程序的位数,这意味着我们只能部署到32位或64位目标。
我们可能需要确保安装了Visual C++运行库,甚至需要自行编译Tesseract以获取最新版本。 这些免费的C#封装可能落后于最新技术数年。
我们还必须找到、下载和管理可能不理解的C++ DLL和EXE文件,并在可能不允许运行这些文件的环境中部署它们。
使用 NuGet 包管理器安装很容易,可以使用光学字符识别从图像和 PDF 文件中提取文本。
IronOCR Tesseract for C
使用IronOCR,所有Tesseract的安装完全通过NuGet包管理器进行。
Install-Package IronOcr
没有要安装的本地 dll 或 exe 文件。 一切都由单一的 .NET 组件库处理。
整个API都使用Tesseract采用简单的C# API,是原生的.NET。
它支持这些类型的Visual Studio项目在C#中添加光学字符识别功能:
- .NET Framework 4.6.2 及以上版本
- .NET Standard 2.0 及以上版本(包括 3.x、.NET 5、6、7 和 8)
- .NET Core 2.0 及以上版本(包括 3.x、.NET 5、6、7 和 8)
更新和维护
Google Tesseract 与 C
Tesseract 5 的最新构建从未设计为在 Windows 上编译。
安装C#的免费Tesseract 5需要手动修改并编译Windows的Leptonica和Tesseract。 截至今天,MinGW交叉编译链未能成功生成Windows互操作二进制文件。
此外,GitHub上的免费C# API包装器可能落后数年或不兼容。
IronOCR Tesseract for .NET
IronOCR提供了许多优势,包括一个用户友好的API,可以无缝集成到应用程序中。 它支持多种图像格式,如JPEG、PNG、TIFF和PDF,并提供诸如自动图像预处理之类的高级功能。 此外,它得到了一个专门团队的支持,提供商业支持和更新服务。
在 Windows、macOS、Linux、Azure、AWS、Lambda、Mono 和 Xamarin Mac 上可开箱即用运行 Tesseract 5,几乎无需配置。 无需管理本地二进制文件。 框架和核心兼容。
除了说做得好之外,没有别的了。
Google OCR
谷歌云 OCR (光学字符识别)是谷歌云平台提供的一项服务(GCP)它允许开发人员使用机器学习算法从图像和扫描文件中提取文本。
准确性
在 .NET 项目中使用 Google Tesseract
Tesseract 作为一个库,是专为完美文件设计的,其中机器将高分辨率文本打印到屏幕上,然后进行读取。 这就是为什么Tesseract擅长读取完美文件的原因。
现实世界中的情况并非如此。 如果 Tesseract 遇到的图像旋转、倾斜、分辨率低、被扫描过或者有背景噪音,它几乎无法从该图像中获取数据。 此外,Tesseract 在处理该文档并返回无用信息之前,还将花费很长时间。
一个简单且易于肉眼阅读的文档,Tesseract无法很好地识别。
Tesseract 是一个免费的库,非常适合识别标准字体的直接和完美文本。
要在使用扫描或拍摄的文档时使用Tesseract,其中图像并非像屏幕截图那样数字化完美,我们需要进行图像预处理。 通常使用Photoshop批处理脚本或高级ImageMagick来完成此操作。
通常,这需要根据您要处理的每种文档类型逐个制定,并可能需要数周的开发时间。
IronOCR Tesseract 在 .NET 项目中
IronOCR消除了这种困扰。 用户通常可以在最小配置下实现 99.8-100% 的准确率。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-2.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
input.DeNoise(); //fixes digital noise
input.Deskew(); //fixes rotation and perspective
// there are dozens more filters, but most users wont need them
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
input.DeNoise() 'fixes digital noise
input.Deskew() 'fixes rotation and perspective
' there are dozens more filters, but most users wont need them
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
图像兼容性
Google Tesseract 在 .NET 中
仅接受在C#中是 IntPtr
C++对象的Leptonica PIX图像格式。 PIX 对象不是托管内存——如果在 C# 中不小心处理它们,会导致内存泄漏。
Leptonica 具有良好的通用图像兼容性,但会产生许多控制台警告和错误。 已知TIFF文件存在问题,并且PDF OCR的支持有限。
IronOCR Tesseract for .NET
图片是内存管理的。 PDF和Tiff支持。 System. 为每种文件格式包括了绘图、流和字节数组。
广泛的图片支持:
- PDF 文档
- Pdf页面
- 多帧TIFF文件
- JPEG和JPEG2000
- 图像互换格式
巴新
BMP
WBMP
- 系统.绘图.图像
- 系统.绘图.位图
System.IO.Streams
图像- 二进制图像数据(字节[])
- 等等...
OCR 图像兼容性代码示例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-3.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("example.pdf", Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
input.LoadImage("image1.png");
input.LoadImage("image2.jpeg");
//... many more
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadPdf("example.pdf", Password:= "password")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
input.LoadImage("image1.png")
input.LoadImage("image2.jpeg")
'... many more
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
性能
免费的谷歌Tesseract
如果正确调整并使用Photoshop或ImageMagick预处理输入图像,Google Tesseract可以快速准确地执行结果。
您会注意到,网上大多数关于Tesseract的示例实际上都是来自高分辨率的截图,没有数字噪声,并且使用了Tesseract设计得很好的字体。
Tesseract的官方文档指出,输入图像应以300DPI或更高分辨率采样,以便OCR能够有效执行。
IronOCR Tesseract 库
IronOCR .NET Tesseract DLL 对大多数图片的处理即快速又准确。 我们已经实现了多线程,以利用大多数机器现在使用的多核处理器。
即使是低分辨率的图片,在您的程序中也通常能以高精度工作。 无需使用PhotoShop。
开发人员通常只需进行很少的配置就可以实现超过99%的准确率,这与当前的机器学习网络API相匹配,而不涉及持续的成本、安全风险和带宽问题。
速度很快,但通过一些编程可以进一步提升。
性能调整示例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-4.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰";
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
ocr.Configuration.ReadBarCodes = false;
ocr.Language = OcrLanguage.EnglishFast;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰"
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
ocr.Configuration.ReadBarCodes = False
ocr.Language = OcrLanguage.EnglishFast
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
应用程序接口
.NET 中的 Google Tesseract OCR
我们有两个免费选择:
- 处理 Interop 层 - 许多在 GitHub 上找到的都是过时的,存在未解决的票证、内存泄漏和控制台警告。 可能不支持 .NET Core 或 Standard。
使用命令行EXE - 部署困难,且经常被病毒扫描器和安全策略中断。
以上两种方法在 Web 应用程序、Azure、Mono、Xamarin、Linux、Docker 或 Mac 中可能都不太适用。
IronOCR Tesseract OCR 库适用于 .NET
一个名为IronTesseract
的受管理和经过测试的.NET库。
完全记录,并支持 IntelliSense。
.NET中最简单的魔方 Hello World
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-5.cs
using IronOcr;
var text = new IronTesseract().Read("img.png").Text;
Imports IronOcr
Private text = (New IronTesseract()).Read("img.png").Text
由经验中位数超过 20 年的专业软件工程师积极开发和支持。
兼容性
Google Tesseract + Interop for .NET
如果您愿意寻找依赖项、从源代码构建或更新免费的C#互操作包装器,这可能适用于大多数平台。 这些资源可能与 .NET Core 或 .NET Standard 项目不完全兼容。
目前,我们还没有找到任何合乎逻辑且简单的方法来安全地在Windows上安装LibTesseract5,而不使用IronTesseract
。
IronOCR Tesseract .NET OCR 库
单元测试与持续集成相结合,具备了在以下环境运行所需的一切条件:
- 桌面应用程序,
- 控制台应用程序
- 服务器进程
- Web 应用程序和 MVC
- JetBrains Rider
Xamarin Mac
On:
- 视窗
- 天蓝色
- 利纳克斯
- Docker
- Mac
BSD和FreeBSD
.NET支持:
- .NET Framework 4.6.2 及以上版本
- .NET Core - 所有活跃版本高于2.0
.NET Standard - 所有活跃版本均在2.0以上
Mono
- Xamarin Mac
语言支持
谷歌Tesseract
Tesseract 词典以文件形式管理,必须从 https://github.com/tesseract-ocr/tessdata 克隆。 这大约是4 GB。
一些Linux发行版通过apt-get
提供了一些帮助来管理Tesseract字典。
必须保持精确的文件夹结构,否则Tesseract会失败。
IronOCR Tesseract
支持比 https://github.com/tesseract-ocr/tessdata 更多的语言,并且它们每个都可以通过 NuGet 包管理器或容易安装的下载来管理。
统一码语言示例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-6.cs
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
var result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.Arabic
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img/arabic.gif", pageindices)
' Add image filters if needed
' In this case, even thought input is very low quality
' IronTesseract can read what conventional Tesseract cannot.
Dim result = ocr.Read(input)
' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
result.SaveAsTextFile("arabic.txt")
多种语言示例
OCR 也可以同时使用多种语言。这可以帮助获取 Unicode 文档中的英语元数据和 URL。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-7.cs
using IronOcr;
// For the Chinese Language Pack:
// PM> Install IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
// We can add any number of languages
using var input = new OcrInput();
input.LoadPdf("multi-language.pdf");
var result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr
' For the Chinese Language Pack:
' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)
' We can add any number of languages
Dim input = New OcrInput()
input.LoadPdf("multi-language.pdf")
Dim result = ocr.Read(input)
result.SaveAsTextFile("results.txt")
还有什么
IronOCR Tesseract 为 .NET 软件开发者提供了额外的功能。
- 自动图像分析以针对常见错误配置Tesseract
- 图像转换为可搜索的PDF
- PDF OCR
- 可以使任何PDF在搜索引擎上可搜索和可索引。
- OCR 转换为 HTML 输出
- TIFF 转 PDF 转换
- 条形码阅读
- 二维码读取
- 多线程
- 一个高级的
OcrResult
类,允许检查块、段落、行、单词、字符、字体和OCR统计信息。
结论
Google Tesseract用于C#的OCR
这是用于 C# 免费和学术项目的正确库。
Tesseract 对于 C++ 开发者来说是一个极好的资源,但它不是一个完整的 .NET OCR 库。
在处理扫描或拍摄的图像时,需要对这些图像进行处理,使其正交、标准化、高分辨率并且没有数字噪声,以便Tesseract能够准确地处理它们。
IronOCR Tesseract OCR 库适用于 .NET Framework & Core
相比之下,IronOCR可以在一行代码中实现这一功能及更多。
IronOCR 使用Tesseract 用于其内部 OCR 引擎。
一个为C#精心调整的Tesseract构建,增加了许多性能改进和标准功能。
这是任何项目的正确选择,其中开发者时间很宝贵。 上次你什么时候遇到一个有几周空闲时间的.NET软件工程师?
开始您的 C# Tesseract 项目
在任何Visual Studio项目中使用NuGet包管理器:
Install-Package IronOcr
或者您可以下载 IronOCR Tesseract .NET DLL并手动安装。
任何 .NET 程序员都应该能够在 5 分钟内通过本页面上的示例开始使用 IronOCR Tesseract OCR。
查看以下比较文章:AWS 与 Google Vision(OCR 功能比较). 了解提供 OCR 技术的更多服务。