AWS OCR与Azure OCR(OCR功能比较)
Patagames Tesseract .NET SDK 将用户限制在视窗系统上,并且对一个原本可以免费使用的引擎收取商业许可费——正是这种组合使其在 2026 年难以销售。免费的 charlesw 和 tesseractocr 封装库提供了相同的 Tesseract 引擎、相同的 tessdata 管理工作流程以及相同的预处理功能,而且完全免费。Patagames 虽然增加了商业支持和预构建的本地二进制文件,但却移除了对 Linux、macOS、Docker 以及任何云部署目标的支持。 如果您已经为 OCR 支付了商业价格,那么问题就变成了您实际获得的是商业级的功能,还是仅仅是免费且方便的二进制软件分发版。
了解 Patagames Tesseract .NET SDK
Patagames Tesseract.NET SDK(NuGet包Patagames.Ocr)是由Patagames Software生产的商业.NET包装,它围绕谷歌开源的Tesseract OCR引擎。 该产品通过捆绑预编译的原生 Tesseract 二进制文件、提供商业支持以及提供比原始 Tesseract 更简化的 API 接口,将自身定位在免费的社区封装器之上。
该包装通过如OcrBitmap等类公开Tesseract的核心识别流程。 您调用GetTextFromImage。 这基本上就是用于图像识别的完整 OCR 表面。
Patagames Tesseract .NET SDK 的主要架构特性:
-仅面向 Windows:该 SDK 提供视窗原生二进制文件。 不支持 Linux、macOS 和多克部署。 目前没有跨平台的NuGet运行时包拆分,也没有Linux特有的原生二进制文件。 -底层采用 Tesseract 引擎:所有识别准确率均来自开源的 Tesseract 引擎。Patagames 没有在其上添加任何专有的识别模型或神经网络层。
- 手动tessdata管理:
.traineddata文件。 SDK 不会自动管理语言数据。 -没有预处理流程:没有内置的去斜、去噪、对比度或二值化操作。 在将图像传递给 API 之前,图像质量的提升完全由您负责。 - 无原生PDF支持: PDF文档需要先通过外部渲染为图像。SDK接受
System.Drawing.Bitmap对象而不是PDF文件路径。 -商业定价,不公开价格:许可级别(单个开发者、团队、Enterprise)需要销售咨询。 未公布价格表。 System.Drawing依赖: API与System.Drawing.Bitmap共同工作,这将代码与Windows时代的绘图基础设施绑定,即使底层二进制文件可用,也会在非Windows目标上增加额外的摩擦。
使用 Patagames 进行基础 OCR 识别
Patagames API在每次操作中初始化一个System.Drawing.Bitmap:
// NuGet: Install-Package Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;
public class PatagamesOcrService
{
private const string TessDataPath = @"./tessdata"; // must exist and be populated
public string ExtractText(string imagePath)
{
using var api = OcrApi.Create();
api.Init(TessDataPath, "eng"); // tessdata path — breaks on deployment if path is wrong
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
}
public string MultiLanguageOcr(string imagePath)
{
using var api = OcrApi.Create();
api.Init(TessDataPath, "eng+fra+deu"); // language string must match tessdata files present
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
}
public string OcrWithSegmentation(string imagePath, PageSegmentationMode mode)
{
using var api = OcrApi.Create();
api.Init(TessDataPath, "eng");
api.SetVariable("tessedit_pageseg_mode", ((int)mode).ToString()); // raw Tesseract variable
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
}
}
// NuGet: Install-Package Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;
public class PatagamesOcrService
{
private const string TessDataPath = @"./tessdata"; // must exist and be populated
public string ExtractText(string imagePath)
{
using var api = OcrApi.Create();
api.Init(TessDataPath, "eng"); // tessdata path — breaks on deployment if path is wrong
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
}
public string MultiLanguageOcr(string imagePath)
{
using var api = OcrApi.Create();
api.Init(TessDataPath, "eng+fra+deu"); // language string must match tessdata files present
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
}
public string OcrWithSegmentation(string imagePath, PageSegmentationMode mode)
{
using var api = OcrApi.Create();
api.Init(TessDataPath, "eng");
api.SetVariable("tessedit_pageseg_mode", ((int)mode).ToString()); // raw Tesseract variable
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
}
}
Imports Patagames.Ocr
Imports Patagames.Ocr.Enums
Imports System.Drawing
Public Class PatagamesOcrService
Private Const TessDataPath As String = "./tessdata" ' must exist and be populated
Public Function ExtractText(imagePath As String) As String
Using api = OcrApi.Create()
api.Init(TessDataPath, "eng") ' tessdata path — breaks on deployment if path is wrong
Using bitmap = New Bitmap(imagePath)
Return api.GetTextFromImage(bitmap)
End Using
End Using
End Function
Public Function MultiLanguageOcr(imagePath As String) As String
Using api = OcrApi.Create()
api.Init(TessDataPath, "eng+fra+deu") ' language string must match tessdata files present
Using bitmap = New Bitmap(imagePath)
Return api.GetTextFromImage(bitmap)
End Using
End Using
End Function
Public Function OcrWithSegmentation(imagePath As String, mode As PageSegmentationMode) As String
Using api = OcrApi.Create()
api.Init(TessDataPath, "eng")
api.SetVariable("tessedit_pageseg_mode", CInt(mode).ToString()) ' raw Tesseract variable
Using bitmap = New Bitmap(imagePath)
Return api.GetTextFromImage(bitmap)
End Using
End Using
End Function
End Class
tessdata 路径字符串是团队遇到的第一个部署问题。 在开发人员的机器上可以正常运行。 在多克容器或LinuxCI 运行器中,路径要么失败,要么运行时根本不存在。 在MacOS上,原生视窗二进制文件根本无法加载。 分段模式是通过写入原始 Tesseract 变量字符串来设置的——没有强类型枚举包装该调用。 尽管披着商业外衣,Tesseract 的原始本质仍然显露出来。
了解IronOCR
IronOCR是一个基于优化的 Tesseract 5 引擎构建的商业.NET OCR 库,内置完整的预处理管道、原生 PDF 支持和跨平台部署功能。 设计目标是消除从安装NuGet包到从文档中获取准确文本之间的所有手动步骤。
IronOCR的主要特点:
-从一开始就支持跨平台:视窗x64/x86、Linux x64、macOS、Docker、Azure 应用服务和AWS Lambda都可通过单个NuGet包得到支持。 无需单独分发二进制文件,也无需考虑平台限制。
-自动预处理:自动进行去斜、去噪、对比度增强、二值化和分辨率归一化。 当需要时,可以通过OcrInput过滤器方法获得显式控制。
- 原生PDF输入:直接将PDF文件路径传递给
IronTesseract.Read()。 无需外部渲染器,无需中间图像转换,无需外部库依赖。 - 可检索的PDF输出:
result.SaveAsSearchablePdf()生成符合PDF/A标准的文档,具有在原始图像上的不可见文本层,可通过一次调用使用。 - tessdata是看不见的: 语言数据作为NuGet包运送(
IronOcr.Languages.French等)。 无需配置 tessdata 目录,也不用担心在不同环境中出现文件路径错误。 - 结构化结果:
.Paragraphs集合。 - 公开定价: $999 Lite / $1,499 Plus / $2,999 Professional / $5,999 Unlimited,所有为永久许可证,并包含一年更新。
功能对比
| 特征 | Patagames Tesseract .NET SDK | IronOCR |
|---|---|---|
| 平台支持 | 仅限 Windows | Windows、Linux、macOS、Docker |
| 定价模式 | 商业用途(请联系获取报价) | $5,999 永久(公开) |
| 引擎 | Tesseract(开源) | 优化后的 Tesseract 5 |
| PDF 输入 | 不支持 | 本地 |
| 自动预处理 | None | 内置 |
| Tessdata 管理 | 手动(目录路径) | NuGet包 |
| 可搜索的 PDF 输出 | 不支持 | 内置 |
详细功能对比
| 特征 | Patagames Tesseract .NET SDK | IronOCR |
|---|---|---|
| 平台支持 | ||
| 视窗 | 是 | 是 |
| Linux | 否 | 是 |
| MacOS | 否 | 是 |
| 多克 | 否 | 是 |
| Azure 应用服务 | 否 | 是 |
| AWS Lambda | 否 | 是 |
| 定价和许可 | ||
| 公开定价 | 否(需要联系) | 是的($5,999) |
| 永久许可证 | 未知 | 是 |
| 单笔交易成本 | None | None |
| 免费套餐 | 否 | 提供试用 |
| OCR引擎及准确度 | ||
| 底层发动机 | Tesseract(开源) | 优化后的 Tesseract 5 |
| 自动预处理 | 否 | 是 |
| 手动预处理控制 | 通过 Tesseract 变量 | 是的(桌面倾斜校正、降噪、对比度调整、二值化、分辨率增强) |
| 输入支持 | ||
| JPEG / PNG / TIFF | 是的(通过System.Drawing.Bitmap) |
是 |
| PDF 输入(原生) | 否 | 是 |
| 受密码保护的PDF | 否 | 是 |
| 流输入 | 否 | 是 |
| URL 输入 | 否 | 是 |
| 输出能力 | ||
| 纯文本 | 是 | 是 |
| 可搜索的PDF | 否 | 是 |
| hOCR导出 | 否 | 是 |
| 结构化词/行数据 | 有限的 | 是的(坐标+置信度) |
| 语言支持 | ||
| 语言数量 | Tesseract tessdata | 通过NuGet包提供 125+ 个 |
| 每个文档支持多种语言 | 是的(字符串拼接) | 是的(强类型枚举) |
| 语言分布 | 手动 tessdata 文件 | dotnet add package |
| 高级功能 | ||
| 基于区域的OCR | 否 | 是 |
| OCR过程中的条形码读取 | 否 | 是 |
| 每个词的置信度得分 | 否 | 是 |
| 螺纹安全 | 标准超立方体极限 | 内置并行化 |
| 部署 | ||
| 独立部署 | 仅限 Windows | 所有平台 |
| Docker容器 | 否 | 是 |
| CI/CD 流水线(Linux) | 否 | 是 |
平台覆盖范围:仅限视窗平台 vs 跨平台
这是这两个库之间最重要的架构差异。
巴塔加梅斯方法
Patagames为Tesseract引擎提供Windows原生二进制文件。OcrApi类加载一个Windows DLL。 在Linux或MacOS系统上,无需加载任何内容。 System.Drawing.Bitmap依赖加剧了问题:.NET Core和.NET 5+上的System.Drawing需要Linux上的libgdiplus,而在没有Mono的情况下不支持macOS,这增加了其复杂性。
在. NET 8 上构建 ASP.NET Core 应用程序并部署到Linux容器的团队,在使用 Patagames 时遇到了两个不同的问题:该平台不存在原生的 Tesseract 二进制文件,即使存在,System.Drawing 依赖也需要额外的本地软件包。 应用程序根本无法运行。 除了替换库之外,没有其他备选方案和迁移途径。
想想这对典型的现代.NET开发项目意味着什么。开发工作通常在视窗或MacOS系统上进行。 CI运行在Linux系统上。 生产环境是 Kubernetes 上的多克容器。 Patagames 在该流程的第二步失败了。
// Patagames:视窗runtime only
// This code path does not execute onLinuxor macOS
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); //视窗DLL load — fails silently or throws on Linux
using var bitmap = new Bitmap(imagePath); // System.Drawing — requires libgdiplus on Linux
return api.GetTextFromImage(bitmap);
// Patagames:视窗runtime only
// This code path does not execute onLinuxor macOS
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); //视窗DLL load — fails silently or throws on Linux
using var bitmap = new Bitmap(imagePath); // System.Drawing — requires libgdiplus on Linux
return api.GetTextFromImage(bitmap);
Imports System.Drawing
' Patagames:视窗runtime only
' This code path does not execute on Linux or macOS
Using api = OcrApi.Create()
api.Init("./tessdata", "eng") ' 视窗DLL load — fails silently or throws on Linux
Using bitmap As New Bitmap(imagePath) ' System.Drawing — requires libgdiplus on Linux
Return api.GetTextFromImage(bitmap)
End Using
End Using
tessdata 路径还会造成另一个部署问题。 在容器中,必须将 tessdata 目录显式复制到镜像中。 如果路径错误,Init调用将在运行时失败。在构建管道中没有任何东西能捕捉到这一点; 它在生产过程中出现。
IronOCR方法
IronOCR将特定于平台的运行时包作为其NuGet依赖关系图的一部分发布。 将IronOcr添加到项目中可以自动解析适用于视窗x64、Windows x86、Linux x64 或MacOS的正确原生二进制文件。 没有RuntimeIdentifier花招,无需手动复制二进制文件。
// IronOCR: same code on Windows, Linux, macOS, Docker
using IronOcr;
var text = new IronTesseract().Read("document.jpg").Text;
// IronOCR: same code on Windows, Linux, macOS, Docker
using IronOcr;
var text = new IronTesseract().Read("document.jpg").Text;
Imports IronOcr
Dim text As String = New IronTesseract().Read("document.jpg").Text
Linux多克部署已有文档记录,并提供开箱即用的支持。 有关具体的 Dockerfile 配置,请参阅IronOCR多克部署指南。 Linux部署指南涵盖了Debian和Alpine系统。应用程序中任何地方都不需要特定于平台的代码分支。
语言数据通过NuGet获取。 dotnet add package IronOcr.Languages.French添加了法语tessdata。 该软件包在构建时解析,自动复制到输出,并且无需任何路径配置即可在每个部署环境中使用。 了解IronOCR如何处理多种语言,以实现完整的语言管理工作流程。
免费引擎的商业价格
第二个主要角度是经济角度。 Patagames 对一款封装了免费开源引擎且未在其基础上添加任何专有识别功能的软件收取商业价格。
Patagames 比免费包装纸多了什么?
Patagames 宣称其产品比免费的 Tesseract 封装器有四大优势:商业支持、简化的 API、预构建的原生二进制文件以及托管的 tessdata 处理。 每一项都值得研究。
商业支持确实存在,但难以定价。您支付的是支持合同费用,该合同旨在解决源于 Tesseract 的问题,而 Tesseract 是一款第三方开源引擎,Patagames 无法控制。 如果 Tesseract 对特定图像类型产生错误输出,Patagames 支持团队也无法改进引擎。
简化版API的作用微乎其微。 api.Init(path, "eng")比charlesw/tesseract中的原始Tesseract互操作层稍微干净一些,但两者仍然需要相同的手动tessdata管理,并且缺乏预处理。
预编译的本地二进制文件可以节省在视窗上从源代码编译 Tesseract 所需的一到两个小时。 这在2015年是有意义的。如今,免费的tesseractocr NuGet包(Tesseract与NuGet.org上)也已免费提供预构建的本地二进制文件。
实际的 API 最削弱了托管 tessdata 处理这一说法。 api.Init(TessDataPath, "eng")调用仍然需要路径字符串。 你仍然需要填充该目录。 这种管理方式只比将配置文件指向文件夹稍微简单一些。
结果是:Patagames 对免费替代方案也提供的便捷层收取商业价格,没有解决 Tesseract 的基本预处理和 PDF 缺陷,并且取消了免费替代方案保留的跨平台支持。
IronOCR的商业合理性
在评估商业 OCR 库是否物有所值时,关键在于该库解决了哪些免费替代方案无法解决的问题。 IronOCR的价格从$999一份永久Lite许可证开始。 这个价格可以买到 Tesseract 封装器(无论是免费的还是商业的)所无法提供的功能。
// PDF OCR: Patagames has no PDF support at all
// Free wrappers have no PDF support at all
// IronOCR: one line
using IronOcr;
var text = new IronTesseract().Read("scanned-invoice.pdf").Text;
// PDF OCR: Patagames has no PDF support at all
// Free wrappers have no PDF support at all
// IronOCR: one line
using IronOcr;
var text = new IronTesseract().Read("scanned-invoice.pdf").Text;
Imports IronOcr
' PDF OCR: Patagames has no PDF support at all
' Free wrappers have no PDF support at all
' IronOCR: one line
Dim text As String = New IronTesseract().Read("scanned-invoice.pdf").Text
在PDF OCR工作流中,Patagames需要一个外部PDF渲染器(PdfiumViewer、iText或类似)来渲染每页到GetTextFromImage并连接结果。 这意味着需要增加 30-50 行代码、一个额外的NuGet依赖项,以及另一个故障点。 IronOCR只需一次调用即可处理。
// 可搜索的PDF output: not available in Patagames, not available in free wrappers
// IronOCR: two lines
var result = new IronTesseract().Read("scanned-document.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
// 可搜索的PDF output: not available in Patagames, not available in free wrappers
// IronOCR: two lines
var result = new IronTesseract().Read("scanned-document.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
' 可搜索的PDF output: not available in Patagames, not available in free wrappers
' IronOCR: two lines
Dim result = New IronTesseract().Read("scanned-document.pdf")
result.SaveAsSearchablePdf("searchable-output.pdf")
可搜索的 PDF 输出功能(生成带有不可见文本层的 PDF,使原始文档可通过 Ctrl+F 搜索)需要IronOCR或使用外部工具的复杂的 hOCR 到 PDF 流程。 目前没有任何 Tesseract 封装库(无论是免费的还是商业的)能够通过一次方法调用实现此功能。
预处理也说明了同样的问题。 低质量的扫描图像(旋转的、有噪点的、对比度低的)未经预处理,Tesseract 输出效果很差。 Patagames 没有预处理步骤。 您可以使用 System.Drawing 或 ImageSharp 或类似工具自行编写预处理代码。
// IronOCR: built-in preprocessing pipeline for poor quality images
using IronOcr;
using var input = new OcrInput();
input.LoadImage("rotated-noisy-scan.jpg");
input.Deskew(); // correct rotation
input.DeNoise(); // remove scan noise
input.Contrast(); // improve contrast
input.Binarize(); // convert to black/white optimal for OCR
input.EnhanceResolution(300); // normalize DPI
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
// IronOCR: built-in preprocessing pipeline for poor quality images
using IronOcr;
using var input = new OcrInput();
input.LoadImage("rotated-noisy-scan.jpg");
input.Deskew(); // correct rotation
input.DeNoise(); // remove scan noise
input.Contrast(); // improve contrast
input.Binarize(); // convert to black/white optimal for OCR
input.EnhanceResolution(300); // normalize DPI
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
Dim input As New OcrInput()
Using input
input.LoadImage("rotated-noisy-scan.jpg")
input.Deskew() ' correct rotation
input.DeNoise() ' remove scan noise
input.Contrast() ' improve contrast
input.Binarize() ' convert to black/white optimal for OCR
input.EnhanceResolution(300) ' normalize DPI
Dim result = New IronTesseract().Read(input)
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
图像质量校正指南涵盖了所有可用的滤镜以及何时应用每种滤镜。 对于特定颜色的预处理,图像颜色校正指南提供了其他选项。 无论购买何种级别的许可证,Patagames 均不提供这些功能。
超立方体包装器的价值高于免费的 Tesseract 包装器
这里具体比较的是 Patagames(商业版)和免费的 tesseractocr NuGet包装器——两者都包装了 Tesseract,都需要 tessdata,两者都没有预处理功能,两者都不支持 PDF。 问题是,Patagames 究竟增加了什么功能,才使其商业价格比免费替代方案更合理?
Patagames 语言配置方法
Patagames 使用路径字符串和语言连接字符串进行多语言 OCR:
// Patagames multi-language: manual tessdata, string concatenation
using Patagames.Ocr;
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng+fra+deu"); // tessdata folder must contain eng.traineddata, fra.traineddata, deu.traineddata
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
// Patagames multi-language: manual tessdata, string concatenation
using Patagames.Ocr;
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng+fra+deu"); // tessdata folder must contain eng.traineddata, fra.traineddata, deu.traineddata
using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
Imports Patagames.Ocr
Using api = OcrApi.Create()
api.Init("./tessdata", "eng+fra+deu") ' tessdata folder must contain eng.traineddata, fra.traineddata, deu.traineddata
Using bitmap As New Bitmap(imagePath)
Return api.GetTextFromImage(bitmap)
End Using
End Using
这与免费的 charlesw/tesseract 包装器的多语言语法在功能上完全相同。 您仍然需要手动下载 tessdata 文件,将它们复制到正确的目录,并通过代码字符串引用它们。 商业许可不提供该工作流程的自动化功能。
IronOCR语言配置方法
IronOCR使用强类型 API,以NuGet包的形式管理语言数据:
//IronOCRmulti-language: NuGet packages, strongly typed
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.German
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
ocr.AddSecondaryLanguage(OcrLanguage.German);
var result = ocr.Read(imagePath);
//IronOCRmulti-language: NuGet packages, strongly typed
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.German
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
ocr.AddSecondaryLanguage(OcrLanguage.German);
var result = ocr.Read(imagePath);
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
ocr.AddSecondaryLanguage(OcrLanguage.French)
ocr.AddSecondaryLanguage(OcrLanguage.German)
Dim result = ocr.Read(imagePath)
通过NuGet进行语言管理意味着 CI 管道解析语言数据的方式与解析任何其他依赖项的方式相同。 没有 tessdata 目录需要复制到多克镜像中,也没有"确保 tessdata 存在"的部署检查清单项目,也没有因手动输入语言代码字符串而导致的拼写错误风险。 125+ 个可用的语言包的安装方式都相同。
Patagames 与免费封装程序之间的差距很小——商业价格主要购买的是视窗二进制文件的便利性。 Patagames 与IronOCR之间的差距很大——商业价格包含原生 PDF 支持、自动预处理、可搜索的 PDF 输出、跨平台部署和结构化结果数据。
API 映射参考
| Patagames Tesseract .NET SDK | IronOCR当量 |
|---|---|
Tesseract.Net.SDK (NuGet) |
IronOcr (NuGet) |
Patagames.Ocr (命名空间) |
IronOcr (命名空间) |
OcrApi.Create() |
new IronTesseract() |
api.Init(tessDataPath, "eng") |
ocr.Language = OcrLanguage.English(不需要路径) |
api.Init(path, "eng+fra") |
ocr.AddSecondaryLanguage(OcrLanguage.French) |
api.GetTextFromImage(bitmap) |
ocr.Read(imagePath).Text |
api.SetVariable("tessedit_pageseg_mode", ...) |
ocr.Configuration.PageSegmentationMode = ... |
OcrBitmap.FromFile(path) |
input.LoadImage(path) |
| 不支持 PDF | ocr.Read("document.pdf").Text |
| 没有可搜索的PDF | result.SaveAsSearchablePdf("output.pdf") |
| 无需预处理 | input.Deskew(), input.DeNoise(), input.Contrast(), 等。 |
| 无区域 OCR | input.LoadImage(path, new CropRectangle(...)) |
| 无法读取条形码 | ocr.Configuration.ReadBarCodes = true |
| 无结构化输出 | result.Words, result.Lines, result.Pages |
PageSegmentationMode 枚举 |
TesseractPageSegmentationMode 枚举 |
有关完整的IronOCR API 接口,请参阅IronTesseract API 参考和OcrResult API 参考。
当团队考虑从 Patagames Tesseract .NET SDK 迁移到IronOCR
Linux容器部署
最常见的强制迁移是从视窗Server 迁移到Linux容器。 一个团队在视窗上构建了一个内部文档处理工具,使用 Patagames 进行 OCR,在云迁移项目中发现该库根本无法在 Amazon ECS 或 Azure 容器实例上的多克容器中运行。 该仅适用于视窗的原生二进制文件没有Linux版本。 迁移方案要么是维护一个单独的视窗计算实例专门用于 OCR(成本高昂且架构笨拙),要么是替换 OCR 库。 从 API 的角度来看, IronOCR是一个即插即用的替代品——多步骤的 Patagames 初始化序列简化为单个读取调用——并且该应用程序在Linux上运行无需任何其他更改。 IronOCR多克指南涵盖了生产容器部署的确切 Dockerfile 配置。
PDF处理要求
文档管理应用程序通常从图像 OCR 开始,然后随着产品的演进添加 PDF 处理需求。 使用 Patagames,PDF 支持需要集成外部 PDF 渲染库、编写渲染循环以及管理每页图像缓冲区。 开发此包装代码的团队发现它很脆弱——PDF 渲染质量参差不齐,页面旋转处理需要额外的逻辑,添加密码保护的 PDF 支持需要另一个外部依赖项。 IronOCR可以原生处理所有这些功能。 PDF 输入指南涵盖单页、多页和受密码保护的 PDF 文件。 此次迁移消除了对外部 PDF 渲染器的依赖以及所有用于将其连接到 Patagames 的代码。
定价透明度问题
Patagames 不公布其授权价格。 团队在评估新项目的 OCR 库时,如果不进行销售流程,就无法将 Patagames 纳入预算。 IronOCR的价格从$999一份单开发者的永久Lite许可证开始,没有每次交易成本。小团队可以在不需要销售电话的情况下做出明智的构建与购买决策。 对于较早选择Patagames的团队来说,假设商业意味着优于免费,发现IronOCR的起步价为$999永久,具有公开定价——而Patagames的商业费率不公开——常常完全重构评估。 有关完整分级详情,请参阅IronOCR许可页面。
扫描质量问题
发票处理、表单 OCR 和扫描文档归档都会产生需要预处理的图像。 基于 Patagames 的这些工作流程需要使用 System.Drawing 或第三方图像库编写预处理代码,手动调整阈值,并随着输入质量的变化维护该代码。 搭建过这种基础设施的团队都知道,要做好需要 20-40 个小时。IronOCR内置的预处理功能省去了这笔投资——校正倾斜、降噪、对比度和二值化都是单一的方法调用,可以解决现实世界扫描中导致 OCR 准确性问题最多的情况。 低质量扫描示例展示了预处理对劣化图像的精度提升作用。
可搜索PDF存档要求
合规性、法律和记录管理应用需要可搜索的 PDF 输出。 扫描文档需要文本图层,以便用户可以在 Acrobat 或任何 PDF 查看器中搜索、复制和突出显示内容。 Patagames 没有生成可搜索 PDF 的机制。 免费的 Tesseract 封装器可以生成 hOCR 输出,您可以使用第三方工具将其转换为文本层,但该流程包含多个活动部件。 IronOCR仅需一次方法调用即可处理整个流程——无需外部工具,也无需中间的 hOCR 转换步骤。构建归档系统的团队很快就会发现这一功能缺陷,而且很少能通过变通方法将其添加到 Patagames 中——这需要替换整个库。
常见迁移注意事项
将 tessdata 目录替换为NuGet包
Patagames需要一个用.traineddata文件填充的tessdata目录用于每种语言。 IronOCR迁移彻底解决了这个问题。 语言数据以NuGet包的形式安装:
dotnet add package IronOcr.Languages.English, IronOcr.Languages.French
然后通过强类型OcrLanguage枚举来引用语言。 没有路径配置,没有部署清单,没有生产环境中缺少 Tess 数据的情况。
迁移 OcrApi 初始化模式
Patagames OcrApi.Create() / api.Init()模式有一个直接的IronOCR等价品。 迁移是机械性的:
// Patagames: before
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng");
using var bitmap = new Bitmap(imagePath);
var text = api.GetTextFromImage(bitmap);
// IronOCR: after
var text = new IronTesseract().Read(imagePath).Text;
// Patagames: before
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng");
using var bitmap = new Bitmap(imagePath);
var text = api.GetTextFromImage(bitmap);
// IronOCR: after
var text = new IronTesseract().Read(imagePath).Text;
Imports Patagames.Ocr
Imports System.Drawing
' Patagames: before
Using api = OcrApi.Create()
api.Init("./tessdata", "eng")
Using bitmap As New Bitmap(imagePath)
Dim text = api.GetTextFromImage(bitmap)
End Using
End Using
' IronOCR: after
Dim text = New IronTesseract().Read(imagePath).Text
对于多语言配置,AddSecondaryLanguage调用。 Patagames的ocr.Configuration.PageSegmentationMode,它是强类型的,可以通过IntelliSense发现。
系统绘图依赖项移除
Patagames依赖于System.Drawing.Bitmap。 IronOCR接受文件路径、字节数组、流、URLs和System.Drawing。 从Patagames迁移的团队可以从仅用于构建Bitmap对象以传递给OCR API的类中删除System.Drawing依赖。 这样可以清除非视窗平台上的可空警告,并移除微软已正式标记为不建议在非视窗目标上进行新开发的依赖项。 图像输入指南列出了所有支持的输入类型。
为现有工作流程添加预处理
如果现有的 Patagames 实现包含用 System.Drawing 或 ImageSharp 编写的预处理步骤,则在切换到IronOCR时,通常可以完全删除该代码。 首先测试IronOCR输出而不进行预处理。对于自动预处理不足的图像,通过OcrInput应用显式过滤器:
using var input = new OcrInput();
input.LoadImage(imagePath);
input.Deskew();
input.DeNoise();
var result = new IronTesseract().Read(input);
using var input = new OcrInput();
input.LoadImage(imagePath);
input.Deskew();
input.DeNoise();
var result = new IronTesseract().Read(input);
Imports IronOcr
Using input As New OcrInput()
input.LoadImage(imagePath)
input.Deskew()
input.DeNoise()
Dim result = New IronTesseract().Read(input)
End Using
图像方向校正指南详细介绍了倾斜和旋转检测。 在大多数情况下,IronOCR 的自动预处理比手动调整的 System.Drawing 预处理流程能产生更好的输出。
其他IronOCR功能
除了上述核心对比要点之外, IronOCR还提供以上章节未涵盖的功能:
-扫描文档处理:一次性自动处理多页扫描文档,包括 TIFF 堆栈和多页 PDF。 -异步 OCR :对ASP.NET Core工作负载提供原生异步支持,在 OCR 处理期间保持请求线程空闲。 -速度优化配置:针对批量处理工作负载,明确控制速度/准确性权衡,其中吞吐量比每个文档的准确性更重要。 -特殊文档类型:护照、车牌、MICR支票行、手写和表格提取的专用指南和优化配置——所有这些都超出了Patagames的范围。 -基于置信度的过滤:按词和按页的置信度分数可实现程序化质量门——无需人工审核即可拒绝或标记置信度低的结果。 -图像颜色校正:颜色通道隔离和反转滤波器可提高彩色背景或反对比度文本文档的识别准确率。
.NET兼容性和未来准备情况
IronOCR 的目标框架是.NET 6、 .NET 7、 .NET 8 和.NET 9,并提供积极支持;同时,它也支持.NET Standard 2.0,以兼容仍在维护中的.NET Framework项目。 该库作为其NuGet依赖图的一部分,提供跨平台运行时标识符(win-x64、win-x86、linux-x64、osx-x64、osx-arm64),确保dotnet publish为任何目标运行时生成一个自包含的部署,无需额外配置。 Patagames Tesseract .NET SDK 不发布Linux或MacOS运行时标识符,这意味着它无法参与.NET 6+ 所围绕构建的跨平台部署模型。 随着.NET Framework 4.x 工作负载迁移到.NET 8,以及团队采用基于Linux的云基础架构,仅限视窗的限制变成了阻碍,而不是次要的限制。IronOCR的开发节奏遵循.NET 的发布周期,每次发布新的.NET版本时都会记录其兼容性。
结论
Patagames Tesseract .NET SDK 的市场地位很尴尬:它对 Tesseract(一个免费的开源引擎)收取商业价格,同时又取消了免费封装程序所保留的跨平台功能。 当为视窗构建 Tesseract 非常复杂时,其价值主张——商业支持、预构建二进制文件、简化的 API——就更具吸引力了。 2026 年,像 tesseractocr 这样的免费封装程序也提供了预构建的视窗二进制文件,而基于原始 Tesseract 的"简化 API"只是一个薄层,仍然暴露了 tessdata 路径管理和原始变量字符串。
仅限视窗系统这一限制是重新考虑 Patagames 的最明显理由。 现代.NET开发工作流程在Linux上运行 CI,部署到Linux容器,并且越来越多地将MacOS作为开发人员机器的目标操作系统。 只能在视窗上加载的库并非小麻烦——而是一种架构限制,它迫使 OCR 组件托管在视窗特定的服务上,增加了部署的复杂性,并限制了未来的灵活性。 Patagames 不为需要跨越该边界的团队提供迁移途径。
IronOCR的商业合理性是具体且可衡量的。 它提供原生 PDF 支持、自动预处理、可搜索的 PDF 输出、跨平台部署和结构化结果数据——无论许可证级别如何,Patagames 都不具备这些功能。 定价是公开的($999永久给单个开发者),超出免费Tesseract包装器的功能是有据可查和具体的,无论目标是Windows服务器、Linux上的Docker,还是ARM Mac,部署方式都是相同的。
对于目前仅在视窗系统上使用 Patagames 且对技术支持感到满意的团队而言,切换平台需要付出一定的成本。但对于任何正在评估各种方案的团队——尤其是那些计划进行云迁移、容器化或跨平台支持的团队——Windows 平台的锁定效应以及免费引擎封装不透明的商业定价,使得 Patagames 难以成为一个值得选择的解决方案,因为IronOCR可以解决 Tesseract 封装器本身无法解决的问题。
常见问题解答
Patagames Tesseract.Net SDK是什么?
Patagames Tesseract.Net SDK 是一款 OCR 解决方案,开发者和企业可使用它从图像和文档中提取文本。它是与 IronOCR 一起评估的几种适用于 .NET 应用程序开发的 OCR 方案之一。
IronOCR 与 Patagames Tesseract.Net SDK 适用于 .NET developers 相比如何?
IronOCR 是一个基于 NuGet 的 .NET OCR 库,它使用 IronTesseract 作为其核心引擎。与 Patagames Tesseract.Net SDK 相比,它提供更简单的部署方式(无需 SDK 安装程序)、统一的定价模式以及简洁的 C# API,无需 COM 互操作或云依赖。
IronOCR 比 Patagames Tesseract.Net SDK 更容易设置吗?
IronOCR 通过单个 NuGet 包进行安装。无需 SDK 安装程序、复制许可证文件、注册 COM 组件或管理单独的运行时二进制文件。整个 OCR 引擎都打包在包中。
Patagames Tesseract.Net SDK 和 IronOCR 在准确率方面存在哪些差异?
IronOCR 对标准商务文档、发票、收据和扫描表格的识别准确率很高。对于严重损坏的文档或不常见的文字,识别准确率会因源文件质量而异。IronOCR 包含图像预处理滤镜,可提高低质量输入文件的识别率。
IronOCR是否支持PDF文本提取?
是的。IronOCR只需一次调用即可从原生PDF和扫描的PDF图像中提取文本。它还支持多页TIFF文件、图像和流。对于扫描的PDF,OCR逐页进行处理,并为每个页面生成一个结果对象。
Patagames Tesseract.Net SDK 的许可方式与 IronOCR 相比如何?
IronOCR采用永久统一费率许可,不按页或扫描次数收费。处理大量文档的机构无论处理量多少,都只需支付相同的许可费用。详情及批量定价请访问IronOCR许可页面。
IronOCR支持哪些语言?
IronOCR 通过独立的 NuGet 语言包支持 127 种语言。添加语言只需一条命令“dotnet add package IronOcr.Languages.{Language}”。无需手动放置文件或配置路径。
如何在.NET项目中安装IronOCR ?
通过 NuGet 安装:在程序包管理器控制台中运行“Install-Package IronOcr”命令,或在命令行界面 (CLI) 中运行“dotnet add package IronOcr”命令。其他语言包的安装方式相同。无需使用原生 SDK 安装程序。
与 Patagames Tesseract 不同,IronOCR 是否适用于 Docker 和容器化部署?
是的。IronOCR 通过 NuGet 包在 Docker 容器中运行。许可证密钥通过环境变量设置。OCR 引擎本身不需要任何许可证文件、SDK 路径或卷挂载。
我可以在购买前试用 IronOCR,并将其与 Patagames Tesseract 进行比较吗?
是的。IronOCR 试用模式可以处理文档,并在输出结果上添加水印,从而生成 OCR 结果。您可以在购买许可证之前,先在自己的文档上验证其准确性。
IronOCR是否支持条形码读取和文本提取?
IronOCR专注于文本提取和OCR识别。对于条形码读取,Iron Software提供了配套库IronBarcode。两者都可单独购买,也可作为Iron Suite套装的一部分购买。
从 Patagames Tesseract.Net SDK 迁移到 IronOCR 容易吗?
从 Patagames Tesseract.Net SDK 迁移到 IronOCR 通常涉及将初始化序列替换为 IronTesseract 实例化、移除 COM 生命周期管理以及更新 API 调用。大多数迁移都能显著降低代码复杂度。

