C# Tesseract OCR 示例
由 吉姆·贝克
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&num 中的图像中提取文本;
使用 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
安装选项
在 .NET 中使用 Tesseract Engine 进行 OCR
当使用 Tesseract Engine 时,我们大多数是在使用一个 C++ 库进行操作。
在 .NET 中进行 Interop 并不是很有趣,并且具有较差的跨平台和 Azure 兼容性。它要求我们选择应用程序的位数,这意味着我们可能只能部署到 32 或 64 位目标。
我们可能需要确保安装了 Visual C++ 运行时,甚至需要自己编译 Tesseract 以获得最新版本。免费的 C# 封装可能已经落后多年。
我们还要寻找、下载和管理我们可能不理解的 C++ DLL 和 EXE 文件,并在可能不允许它们运行的环境中部署它们。
通过使用 NuGet 包管理器,可以轻松安装并使用光学字符识别(OCR)从图像和 PDF 文件中提取文本。
用于 C&num 的 IronOCR 宇宙魔方;
有了 IronOCR,所有 Tesseract 的安装都完全通过 NuGet 软件包管理器完成。
Install-Package IronOcr
无需安装本地 dll 或 exes。一切都由一个 .NET 组件库处理。
整个应用程序接口是在本地 .NET 中使用 Tesseract 的简单 C# 应用程序接口。
它支持这类 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)
更新和维护
使用 C&num 的谷歌魔方;
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 遇到旋转、倾斜、低 DPI、扫描或有背景噪音的图像,那么 Tesseract 几乎不可能从该图像中获取数据。此外,Tesseract 还需要很长时间来处理该文档,然后才会向您反馈无意义的信息。
Tesseract 无法很好地读取肉眼很容易读取的简单文档。
Tesseract 是一个免费库,是阅读标准字体的完美文本的最佳选择。
要使用 Tesseract,我们需要对扫描或拍摄的文档进行图像预处理,因为这些文档的图像在数字上并不完美,比如屏幕截图。这通常需要使用 Photoshop 批次脚本或高级 ImageMagick 来完成。
一般来说,这需要根据您要处理的每类文档的具体情况来开发,可能需要数周的开发时间。
.NET 项目中的 IronOCR Tesseract
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)
图像兼容性
.NET 中的 Google Tesseract
只接受 Leptonica PIX 图像格式,在 C# 中它是一个 IntPtr
C++ 对象。PIX 对象不是托管内存,如果在 C# 中不小心处理,就会导致内存泄漏。
_Leptonica_具有良好的一般图像兼容性,但会抛出许多控制台警告和错误。TIFF 文件存在已知问题,对 PDF OCR 的支持也很有限。
IronOCR Tesseract for .NET
图像由内存管理。支持 PDF 和 Tiff。系统。每种文件格式都包含绘图、流和字节阵列。
广泛的图像支持
- PDF 文档
- PDF 页面
- 多帧 TIFF 文件
- jpeg 和 jpeg2000
- GIF
- PNG
- 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)
性能
免费谷歌魔方
如果调整得当,并使用 Photoshop 或 ImageMagick 对输入图像进行预处理,Google Tesseract 可以快速、准确地生成结果。
你会发现,网上的大多数 Tesseract 例子实际上都来自高分辨率的屏幕截图,没有数字噪音,Tesseract 在设计上可以很好地处理这些字体。
Tesseract 自己的文档指出,输入图像的采样率应为 300DPI 或更高,这样才能有效进行 OCR 识别。
IronOCR 宇宙魔方图书馆
IronOcr .NET Tesseract动态链接库可准确、快速地处理大多数图像。我们采用了多线程技术,以利用目前大多数机器使用的多核处理器。
即使是低分辨率的图像,在您的程序中一般也能以很高的精确度运行。无需 PhotoShop。
开发人员通常只需少量配置就能达到 99% 以上的准确率--这与当前的机器学习网络应用程序接口不相上下,但却没有持续成本、安全风险和带宽问题。
速度很快,但只需稍加编码即可提高。
性能调整示例
: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
我们有 2 种自由选择:
- 与互操作层一起工作 - GitHub 上的许多互操作层都已过时,存在未解决的问题、内存泄露和控制台警告。可能不支持 .NET Core 或标准。
- ** 使用命令行 EXE***--难以部署,经常被病毒扫描程序和安全策略打断。
上述两种方法在 Web 应用程序、Azure、Mono、Xamarin、Linux、Docker 或 Mac 中都无法很好地发挥作用。
IronOCR Tesseract OCR Library for .NET
用于 Tesseract 的经过管理和测试的 .NET 库,名为 "IronTesseract"。
文档齐全,支持智能提示(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 项目不完全兼容。
目前,我们还没有遇到任何合理而简单的方法,可以在没有 "IronTessseract "的情况下安全地安装LibTesseract5。
IronOCR Tesseract .NET OCR 库
已通过 CI 单元测试,拥有运行所需的一切:
- 桌面应用程序、
- 控制台应用程序
- 服务器进程
- 网络应用程序和 MVC
- JetBrains Rider
- Xamarin Mac
关于
- 视窗
- 云计算
- Linux
- 多克
- Mac
- BSD 和 FreeBSD
.NET 支持
- .NET Framework 4.6.2 及以上版本
- .NET Core - 2.0 以上的所有有效版本
- .NET Stanrdard - 2.0 以上的所有有效版本
单核
- Xamarin Mac
语言支持
谷歌魔方
Tesseract 词典以文件形式管理,必须从 https://github.com/tesseract-ocr/tessdata 克隆。这大约是 4 GB。
一些 Linux 发行版可以通过 apt-get
帮助管理 Tesseract 词典。
必须保持精确的文件夹结构,否则 Tesseract 将失效。
钢铁OCR 宇宙魔方
支持比 https://github.com/tesseract-ocr/tessdata 更多的语言,而且每种语言都可通过 NuGet 软件包管理器作为 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
- 条形码读取
- QR 码读取
- 多线程
- 高级 "OcrResult "类允许检查_块、段落、行、字、字符、字体和 OCR 统计数据。
结论
用于 C# OCR 的 Google Tesseract
这是一个适用于免费和学术项目的 C# 库。
Tesseract 是 C++ 开发人员的绝佳资源,但它并不是适用于 .NET 的完整 OCR 库。
在处理扫描或拍摄的图像时,Tesseract 需要对这些图像进行处理,使其具有正交性、标准化、高分辨率和无数字噪声,然后才能准确地处理这些图像。
IronOCR Tesseract OCR Library for .NET Framework & Core
相比之下,IronOCR 只需一行代码就能实现以上功能。
的确:IronOCR 使用 Tesseract 用于其内部 OCR 引擎。
最终调整后的 Tesseract C# 版本,性能有了很大提升,并添加了许多标准功能。
对于开发人员时间宝贵的任何项目来说,它都是正确的选择。你上一次发现一个.NET软件工程师有几周的时间是什么时候?
开始 C# Tesseract 项目
在任何 Visual Studio 项目中使用 NuGet 包管理器:
Install-Package IronOcr
或者您可以 下载 IronOCR Tesseract .NET DLL 并手动安装。
任何.NET程序员都可以利用本页上的示例在5分钟内开始使用IronOCR Tesseract OCR。
请查看以下对比文章: AWS 与 Google Vision(OCR 功能比较).了解更多提供 OCR 技术的服务。