IRONSOFTWAREHOME
视频

从 Patagames Tesseract.NET SDK 迁移到

Kannaopat Udonpant
Kannapat Udonpant
Updated: 2026年8月1日

本指南将引导.NET开发人员完成从 Patagames Tesseract .NET SDK 到IronOCR的完整迁移。 它涵盖了机械 API 转换、驱动大多数迁移的跨平台部署解锁,以及将生产 OCR 管道从仅限 Windows 的商业封装器迁移到无需修改即可在 Windows、Linux、macOS、Docker、Azure 和 AWS 上运行的库所需的实际代码更改。

为什么要从 Patagames Tesseract .NET SDK 迁移?

大多数评估 Patagames 是否适合作为替代品的团队对 OCR 准确性并不感到不满。 他们在部署时遇到了瓶颈——Linux 容器目标、云迁移项目或 Ubuntu 上的 CI 流水线——并发现仅适用于 Windows 的原生二进制文件在该平台上根本无法运行。 这一单一限制条件决定了其余的迁移评估过程。

仅限 Windows 部署阻碍了现代.NET技术栈的发展。Patagames为其 Tesseract 引擎封装器提供了 Windows 原生二进制文件。 没有 Linux x64、macOS 或 ARM 运行时软件包。 类OcrApi在运行时加载Windows DLL;在任何其他操作系统上,应用程序无法启动。 添加System.Drawing.Bitmap依赖项,该依赖项已被Microsoft正式标记为不支持新的跨平台开发,并且该库与每个云提供商和容器编排器的默认部署模型不兼容。

为免费引擎支付商业价格,且不支持跨平台访问。Patagames底层使用的 Tesseract 引擎是开源且免费的。 像tesseractocr这样的免费社区包装器今天也提供预构建的Windows二进制文件,从而消除了Patagames历史上所提供的主要便利性。 Patagames 的商业许可证比原始 Tesseract 的 API 界面略微简洁一些,但它没有增加预处理、PDF 支持、可搜索的 PDF 输出或跨平台部署——这四项功能定义了 2026 年一个完整的 OCR 库。

不透明的定价机制使得预算规划变得不可能。Patagames不公布授权价格。 评估图书馆需要先与销售人员联系,才能进行任何成本比较。 IronOCR的定价从$999开始,包含一年的更新,适用于单个开发者的永久Lite许可证。 团队无需销售流程即可评估成本与能力。 有关完整分级详情,请参阅IronOCR许可页面

原始Tesseract变量通过API泄露。 在Patagames中设置页面分割模式需要调用api.SetVariable("tessedit_pageseg_mode", "3")——这是一种没有IntelliSense、没有编译时检查和没有发现能力的基于字符串的原始Tesseract变量分配。 如果变量名拼写错误,调用将不会执行任何操作。 IronOCR将每个Tesseract配置选项包装在IronTesseract.Configuration的强类型属性中。

除了平面字符串之外没有结构化输出。 Patagames GetTextFromImage返回单一字符串。 无法访问单词边界、行分组、段落结构或每个单词的置信度分数。 需要从表单中提取特定字段或逐字验证 OCR 准确性的应用程序,无法使用 Patagames API 构建基础。

**CI/CD 流水线在 Linux 步骤中断。**现代.NET开发团队在 Linux 上运行 CI—— GitHub Actions、GitLab CI 和 Azure DevOps 默认都使用基于 Linux 的运行器。 引用Tesseract.Net.SDK的项目要么无法构建本机二进制引用,要么在集成测试期间运行时失败。 每次测试运行都需要一个 Windows 专用的 CI 运行器,或者一个完全模拟 OCR 层的变通方法。

基本问题

Patagames 仅针对 Windows。 一旦部署目标发生变化,库就无法随之更改:

// Patagames: Windows DLL loads; fails on Linux container or macOS developer machine
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); // tessdata path — must be manually managed in every environment
using var bitmap = new Bitmap(imagePath); // System.Drawing — unsupported on non-Windows targets
return api.GetTextFromImage(bitmap);
C#
// IronOCR: same code runs on Windows, Linux, macOS, Docker, Azure, AWS
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
C#

没有tessdata目录。 没有本地 DLL 路径。 无平台限制。 NuGet依赖关系图会自动解析每个目标的正确运行时。

IronOCR与 Patagames Tesseract .NET SDK:功能对比

下表涵盖了目前在生产环境中运行 Patagames 的团队所具备的功能。

特征Patagames Tesseract .NET SDKIronOCR
Windows 支持
Linux 支持
macOS 支持
Docker部署
Azure 应用服务
AWS-Lambda(AWS Lambda
NuGet包Tesseract.Net.SDKIronOcr
许可模式商业用途(价格面议)永久 ($999–$2,399, public)
OCR引擎Tesseract(开源)优化版 Tesseract 5(捆绑版)
Tessdata 管理具有.traineddata文件的手动目录NuGet语言包
自动预处理None去斜、降噪、对比度、二值化、锐化、缩放、膨胀、腐蚀
深度背景噪音消除None是 (DeepCleanBackgroundNoise())
原生 PDF 输入否(需要外部渲染器)
多页 TIFF 输入有限的是 (input.LoadImageFrames())
可搜索的 PDF 输出是 (result.SaveAsSearchablePdf())
hOCR导出
支持的语言Tesseract tessdata 文件通过NuGet包提供 125 多个包
多语言同步是的(字符串拼接)是 (强类型OcrLanguage枚举)
基于区域的OCR是 (CropRectangle)
条形码读取
结构化输出仅限扁弦页、段落、行、单词、字符及其坐标
逐词置信度得分
页面分段配置原始SetVariable字符串调用强类型Configuration.PageSegmentationMode
系统绘图依赖项要求可选项
线程安全标准超立方体极限完整 (每个线程创建IronTesseract)
商业支持
NuGet下载有限的530万+

快速入门:Patagames Tesseract .NET SDK 到IronOCR 的迁移

步骤 1:替换 NuGet 软件包

移除 Patagames Tesseract .NET SDK:

dotnet remove package Tesseract.Net.SDK
SHELL

NuGet安装IronOCR :

dotnet add package IronOcr

如需支持英语以外的语言,请安装相应的语言包:

dotnet add package IronOcr.Languages.French, IronOcr.Languages.German

步骤 2:更新命名空间

将 Patagames 命名空间替换为IronOCR命名空间:

// Before (Patagames)
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

// After (IronOCR)
using IronOcr;
C#

步骤 3:初始化许可证

在应用程序启动时添加许可证初始化(在第一个IronTesseract调用之前):

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

可以在ironsoftware.com/C#/ocr/获取免费试用许可证,以便在不购买的情况下开始迁移测试。

代码迁移示例

批量文件夹处理

第一阶段展示了单幅图像提取。 生产Patagames部署通常在循环中初始化api.Init()——这会重新加载tessdata并为每个文件重新初始化Tesseract引擎。这种模式在数百个文档中复合初始化成本。

巴塔哥姆方法:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.IO;

public class PatagamesBatchProcessor
{
    private const string TessDataPath = @"./tessdata";

    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            // OcrApi re-initialized per file — tessdata loaded each time
            using var api = OcrApi.Create();
            api.Init(TessDataPath, "eng");

            using var bitmap = new Bitmap(file);
            var text = api.GetTextFromImage(bitmap);

            results[Path.GetFileName(file)] = text;
        }

        return results;
    }
}
C#

IronOCR方法:

// NuGet: IronOcr
using IronOcr;
using System.IO;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public class IronOcrBatchProcessor
{
    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();
        // Single engine instance — initialized once, reused across all files
        var ocr = new IronTesseract();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            var result = ocr.Read(file);
            results[Path.GetFileName(file)] = result.Text;
        }

        return results;
    }
}
C#

IronOCR的IronTesseract实例在调用之间保持引擎状态。 对整个批次重复使用一个实例可以消除每个文件的初始化开销,并完全消除对 tessdata 路径的依赖。 对于多个CPU核心上的并行批处理,请参阅多线程示例——每个线程创建一个IronTesseract而不是共享一个单一实例。

页面分段模式迁移

Patagames通过一个字符串键和一个整数值转换为字符串的原始SetVariable调用公开页面分割模式。 没有智能感知,没有枚举验证,也没有调用位置的文档提示。一个数字控制着 Tesseract 将输入视为单个文本块、一列、一个单词还是一个字符——而且当变量名输入错误时,没有任何反馈。

巴塔哥姆方法:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

public string OcrSingleLineField(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    // Raw variable string — no IntelliSense, no validation
    // PageSegmentationMode.SingleLine == 7
    api.SetVariable("tessedit_pageseg_mode", "7");

    // Additional variable to suppress dictionary output
    api.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -.:/");

    using var bitmap = new Bitmap(imagePath);
    return api.GetTextFromImage(bitmap);
}
C#

IronOCR方法:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string OcrSingleLineField(string imagePath)
{
    var ocr = new IronTesseract();

    // Strongly typed enum — discoverable through IntelliSense
    ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine;

    var result = ocr.Read(imagePath);
    return result.Text;
}
C#

Patagames通过IronTesseract.Configuration中有直接的强类型等效项。 迁移过程是将字符串字面量机械地替换为命名枚举值。 有关完整的配置界面,请参阅IronTesseract API 参考文档特定文档阅读指南涵盖了何时对不同类型的文档应用每种页面分割模式。

结果迭代器模式替换

Patagames从GetTextFromImage返回平面字符串。 从 Patagames 的输出中提取单个单词、它们的边界框或置信度分数,需要对返回的字符串编写解析器,或者通过互操作直接访问底层 Tesseract 结果迭代器 API。这两种方法都不可靠且难以维护。 IronOCR公开了一个完全结构化的OcrResult,可以本地访问文档层次结构的每个级别。

巴塔哥姆方法:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;

public void ExtractWordsWithPositions(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    using var bitmap = new Bitmap(imagePath);
    // 仅限扁弦 — no word positions, no confidence, no line grouping
    var text = api.GetTextFromImage(bitmap);

    // Only option: split on whitespace and hope line breaks survive
    var words = text.Split(new[] { ' ', '\n', '\r' },
        StringSplitOptions.RemoveEmptyEntries);

    foreach (var word in words)
    {
        // 否 X, Y, Width, Height — position information is lost
        Console.WriteLine(word);
    }
}
C#

IronOCR方法:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public void ExtractWordsWithPositions(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);

    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Width}x{page.Height}px");

        foreach (var paragraph in page.Paragraphs)
        {
            Console.WriteLine($"  Paragraph at ({paragraph.X}, {paragraph.Y})");
            Console.WriteLine($"  Text: {paragraph.Text}");
        }

        foreach (var word in page.Words)
        {
            // Bounding box, confidence, and text for every word
            Console.WriteLine($"  Word: '{word.Text}' at ({word.X},{word.Y}) " +
                              $"size {word.Width}x{word.Height} " +
                              $"confidence {word.Confidence:F1}%");
        }
    }

    Console.WriteLine($"Overall confidence: {result.Confidence:F1}%");
}
C#

完整的OcrResult结构——页面、段落、行、单词、字符——消除了任何后处理解析器的需要。 词坐标能够按位置提取字段,这是发票处理、表单 OCR 和表格提取的基础。 有关完整层级结构,请参阅结构化结果指南;有关筛选低置信度词语,请参阅置信度评分指南

多页 TIFF 处理

Patagames接受System.Drawing.Bitmap。 多帧TIFF包含多个嵌入图像,但GetTextFromImage。帧枚举API不明显,失败时的错误消息没有描述性。

巴塔哥姆方法:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;

public string ProcessMultiPageTiff(string tiffPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    using var tiffImage = Image.FromFile(tiffPath);
    var frameCount = tiffImage.GetFrameCount(FrameDimension.Page);

    for (int i = 0; i < frameCount; i++)
    {
        // Manual frame selection — FrameDimension.Page required
        tiffImage.SelectActiveFrame(FrameDimension.Page, i);

        using var frameBitmap = new Bitmap(tiffImage);
        var pageText = api.GetTextFromImage(frameBitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

IronOCR方法:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string ProcessMultiPageTiff(string tiffPath)
{
    using var input = new OcrInput();
    // LoadImageFrames handles all frames automatically
    input.LoadImageFrames(tiffPath);

    // Optional: apply preprocessing to all frames at once
    input.Deskew();
    input.DeNoise();

    var result = new IronTesseract().Read(input);

    // Per-page access if needed
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words");
    }

    return result.Text;
}
C#

System.Drawing帧选择仪式完全消失。 有关更多选项,包括仅需特定页面时的单帧选择,请参阅TIFF 和 GIF 输入指南

无需外部渲染器的 PDF 输入

Patagames 本身不支持 PDF 文件。 基于Patagames的PDF OCR管道需要外部PDF渲染库——PdfiumViewer、iText或PDFSharp——将每一页转换为GetTextFromImage。 这种外部依赖关系增加了软件包管理开销、单独的许可考虑因素以及第二个故障点。 渲染质量在不同的库之间也存在差异,这会影响 OCR 的准确性,而与 Tesseract 引擎无关。

巴塔哥姆方法:

// NuGet: Tesseract.Net.SDK + PdfiumViewer (external dependency)
using Patagames.Ocr;
using PdfiumViewer; // separate NuGet package required
using System.Drawing;
using System.Text;

public string OcrPdfDocument(string pdfPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    // External renderer required — Patagames has no PDF support
    using var pdfDoc = PdfDocument.Load(pdfPath);

    for (int page = 0; page < pdfDoc.PageCount; page++)
    {
        // Render at 300 DPI for acceptable OCR accuracy
        using var img = pdfDoc.Render(page, 300, 300, false);
        using var bitmap = new Bitmap(img);

        var pageText = api.GetTextFromImage(bitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

IronOCR方法:

// NuGet: IronOcr only — no external PDF renderer
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string OcrPdfDocument(string pdfPath)
{
    using var input = new OcrInput();
    input.LoadPdf(pdfPath);

    // Preprocessing applies to every page in one call
    input.Deskew();

    var ocr = new IronTesseract();
    var result = ocr.Read(input);

    // Full per-page structured access
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Paragraphs.Length} paragraphs");
    }

    return result.Text;
}
C#

一个NuGet包即可替代两个。 渲染步骤消失了。 PDF 输入指南涵盖单页、多页和受密码保护的 PDF 文件。 对于可搜索 PDF 输出工作流程(即从扫描的 PDF 生成 Ctrl+F 可搜索文档),可搜索 PDF 指南可搜索 PDF 示例用五行文字展示了完整的流程。

Patagames Tesseract .NET SDK API 到IronOCR映射参考

Patagames Tesseract .NET SDKIronOCR当量
Tesseract.Net.SDK(NuGet包)IronOcr(NuGet包)
Patagames.Ocr(命名空间)IronOcr(命名空间)
Patagames.Ocr.Enums(命名空间)IronOcr(命名空间)
OcrApi.Create()new IronTesseract()
api.Init(tessDataPath, "eng")ocr.Language = OcrLanguage.English(无路径)
api.Init(path, "eng+fra+deu")ocr.Language = OcrLanguage.English + OcrLanguage.French + OcrLanguage.German
api.GetTextFromImage(bitmap)ocr.Read(imagePath).Text
api.SetVariable("tessedit_pageseg_mode", "7")ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine
api.SetVariable(key, value)(任何原始变量)ocr.Configuration.[TypedProperty]
new Bitmap(imagePath)(输入准备)input.LoadImage(imagePath)
OcrBitmap.FromFile(path)input.LoadImage(path)
不支持多帧 TIFFinput.LoadImageFrames(tiffPath)
无 PDF 输入input.LoadPdf(pdfPath)ocr.Read(pdfPath)
没有可搜索的PDFresult.SaveAsSearchablePdf("output.pdf")
无需预处理input.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize()
无区域 OCRinput.LoadImage(path, new CropRectangle(x, y, w, h))
无法读取条形码ocr.Configuration.ReadBarCodes = true
仅平字符串结果result.Pages, result.Lines, result.Words, result.Paragraphs
不逐字自信result.Words[i].Confidence, result.Confidence
PageSegmentationMode 枚举TesseractPageSegmentationMode 枚举
无 hOCR 导出结果.ToHOcrString()输出
仅限 Windows x64/x86Windows、Linux、macOS、Docker、Azure、AWS

常见迁移问题和解决方案

问题 1:新环境中缺少 Tessdata 目录

Patagames: 如果没有api.Init(@"./tessdata", "eng")调用在运行时失败。 在容器化环境中,这是部署时失败,不会在构建时发出警告。 使用 Docker 进行部署的团队经常在镜像推送完成后才发现这个问题。

解决方案: IronOCR完全移除了 tessdata 目录的概念。 安装语言数据为NuGet包:

dotnet add package IronOcr.Languages.English

语言数据在构建时解析,并自动包含在dotnet publish输出中。 语言文件没有出错的路径,也没有部署清单项目。

问题 2:System.Drawing.Bitmap 在 Linux 系统上失效

Patagames: 除非安装了PlatformNotSupportedException。 即使存在libgdiplus,在不同的发型上行为也不一致。 Microsoft明确建议在新的开发中不要在非Windows平台上使用System.Drawing

解决方案: IronOCR直接接受文件路径、字节数组和流。 System.Drawing依赖项不是必需的:

// Replace this pattern:
using var bitmap = new Bitmap(imagePath); // fails without libgdiplus on Linux
api.GetTextFromImage(bitmap);

// With:
var result = new IronTesseract().Read(imagePath); // no System.Drawing required
C#

请参阅图像输入指南,了解所有支持的输入类型,包括字节数组和流。

问题 3:静默设置变量失败

Patagames: bool但大多数调用方会丢弃返回值。 当变量名拼写错误或传递了不支持的值时,Tesseract 会默默地应用默认值并继续执行。 由此导致的精度下降很难追溯到配置调用。

解决方案: IronOCR配置属性是强类型的。 无效赋值会产生编译器错误,而不是静默运行时默认值:

// Compile-time safety — no silent failures
var ocr = new IronTesseract();
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // also strongly typed
C#

问题 4:OcrApi 在循环内初始化

Patagames: 在处理循环中初始化OcrApi的团队在每次迭代中会产生tessdata加载开销。 典型模式——foreach内——从线程隔离的角度来看是正确的,但在处理数百个文档时开销很大。

解决方案: 每个线程创建一个IronTesseract并在分配给该线程的所有文档中重复使用。 在.Read()调用之间实例是无状态的:

// One instance, many reads — engine initialized once
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

foreach (var file in imageFiles)
{
    var text = ocr.Read(file).Text;
    ProcessText(text);
}
C#

对于并行批处理工作负载,每个任务创建一个实例。 请参阅速度优化指南,以获取吞吐量调整选项,包括IronTesseract.Configuration.TesseractVersion和读取速度预设。

问题 5:没有可用的 Linux Docker 基础镜像

**Patagames:**没有与 Linux 兼容的 Patagames 二进制文件。 在 Linux Docker 容器中运行基于 Patagames 的应用程序的任何尝试均会失败。 唯一的解决方法是基于Windows的容器(FROM mcr.microsoft.com/windows/servercore),它显著更大,更慢拉取,并且与大多数使用Linux节点池的Kubernetes配置不兼容。

解决方案: IronOCR支持标准 Linux 基础镜像。 Docker部署指南详细介绍了Dockerfile的配置:

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/publish .
#IronOCRresolves the Linux native runtime from NuGet automatically
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text

无需Windows容器。 没有单独的二进制分发包。 同一个 Docker 镜像可以在任何基于 Linux 的容器主机上运行。

问题 6:PDF OCR 需要两个NuGet包

**Patagames:**向 Patagames 应用程序添加 PDF OCR 需要第二个NuGet包用于 PDF 渲染(PdfiumViewer、iTextSharp.LGPLv2.Core 或类似程序)。 每家公司都有自己的许可条款、更新节奏和潜在的兼容性问题。 当 PDF 渲染器版本与 Patagames 版本发生冲突时,两个团队都必须参与解决。

解决方案: IronOCR可直接处理 PDF 输入,无需其他软件包。 完全移除PDF渲染器依赖项:

# Remove the PDF rendering shim
dotnet remove package PdfiumViewer

#IronOCRhandles PDF natively
var result = new IronTesseract().Read("document.pdf");
SHELL

Patagames Tesseract .NET SDK 迁移清单

迁移前

在开始之前,请审核代码库,找出所有对 Patagames 的引用:

# Find all files using Patagames namespaces
grep -r "Patagames.Ocr" --include="*.cs" . -l

# Find all OcrApi usage patterns
grep -r "OcrApi\|GetTextFromImage\|api\.Init\|SetVariable" --include="*.cs" .

# Find tessdata path references
grep -r "tessdata\|TessDataPath\|traineddata" --include="*.cs" .

# Find System.Drawing.Bitmap usage tied to OCR
grep -r "new Bitmap\|System\.Drawing" --include="*.cs" . -l

# Find any PDF rendering libraries used to feed Patagames
grep -r "PdfiumViewer\|iTextSharp\|PdfSharp" --include="*.csproj" .
SHELL

文档:ImageSharp编写包裹Patagames调用的预处理代码。

代码迁移

  1. 从所有项目中删除Tesseract.Net.SDK NuGet包引用。
  2. 删除任何只是为提供给Patagames的PDF渲染NuGet包(PdfiumViewer、iText等)。
  3. 安装IronOcr NuGet包。
  4. 安装IronOcr.Languages.English和其他所需的语言包。
  5. 在应用程序启动时添加IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
  6. using Patagames.Ocr.Enums;
  7. new IronTesseract() + OcrApi.Create() + api.Init(path, lang)块。
  8. Bitmap构造函数)。
  9. 用类型化的api.SetVariable("tessedit_pageseg_mode", value)调用。
  10. 删除所有仅为将图像传递给Patagames而存在的System.Drawing.Bitmap实例化。
  11. input.LoadPdf(pdfPath)替换PDF渲染循环(如果存在)。
  12. 使用Image.SelectActiveFrame()的多帧TIFF循环。
  13. 将任何自定义预处理代码(System.Drawing大小调整、对比度、阈值)替换为等效的OcrInput过滤器调用。
  14. 从所有部署清单、Dockerfile 和 CI 复制步骤中删除 tessdata 目录。
  15. 更新集成测试,使其在 Linux CI 运行器(GitHub Actions ubuntu-latest 等)上运行,以验证跨平台行为。

后迁移

  • 在 Linux(而不仅仅是 Windows)上运行完整的测试Suite,以确认跨平台部署解锁功能是否正常工作。
  • 验证 OCR 准确率是否等于或优于 Patagames 基线在同一组测试图像上的表现。
  • 确认多语言文档使用OcrLanguage枚举方法生成正确的输出。
  • 直接测试 PDF 输入,不使用外部渲染库,并将输出精度与旧的渲染位图路径进行比较。
  • 验证多帧 TIFF 处理是否产生与前一帧枚举循环相同的页数和文本内容。
  • 确认部署工件中不存在 tessdata 目录,并且没有发生运行时路径错误。
  • 运行目标为linux/amd64的Docker构建,并在容器内执行至少一个OCR调用。
  • 验证 CI 流水线(GitHub Actions、GitLab CI、Azure DevOps)在其默认 Linux 运行器上成功完成。
  • 检查结果中是否有置信度分数,以及任何基于置信度的过滤逻辑是否按预期工作。
  • 确认许可证密钥初始化在生产启动代码中创建第一个IronTesseract实例之前运行。

迁移到IronOCR的主要优势

**无需修改代码即可实现跨平台部署。**迁移后,同一个二进制文件可以在 Windows Server、Ubuntu Docker 容器、macOS 开发人员机器、Linux 上的 Azure 应用服务和 AWS Lambda 上运行。 没有平台条件,没有运行时标识符标志,也没有针对每个操作系统的单独部署工件。 之前因仅限 Windows 系统的 OCR 库而受阻的云迁移,现在变成了标准的容器部署。 LinuxDockerAzureAWS部署指南涵盖了每个目标平台的生产配置。

Tessdata 管理从运维中消失。tessdata目录——其位置、内容以及在每个环境中的存在——不再作为运维事项而存在。 语言数据是NuGet依赖项,在构建时解析。它会自动出现在dotnet publish输出中。 添加新语言时无需更新部署运行手册,tessdata 文件更改时无需使 Docker 层失效,也无需调查缺少 tessdata 的生产事件。

结构化输出取代字符串解析。 以前从OcrResult直接访问该数据。 词坐标、行边界、段落分组和每个词的置信度得分都是一等属性。 通过边界框提取字段——发票处理和表单OCR的基础——是一种直接的CropRectangle调用,而不是脆弱的子字符串搜索。

内置预处理取代自定义图像管道。 任何为了弥补Patagames缺乏内置过滤器而编写的预处理代码都可以用OcrInput方法调用替代。 去斜、去噪、对比度增强、二值化和分辨率归一化都是一行操作。 花费20-40小时构建和调整System.Drawing预处理管道的团队可以用五个方法调用替换它,并将维护工作转向其他地方。 有关完整的过滤器目录,请参阅预处理功能概述

**原生 PDF 支持移除了一个依赖类。**之前仅为弥补 Patagames PDF 功能缺陷而添加的 PDF 渲染库将被移除。 一个以前需要协调三个包更新的生产OCR系统——System.Drawing依赖项——现在有一个无桥接依赖项的OCR包。 PDF 输入,包括受密码保护的文档和多页文档,是一种一流的输入类型。 对于合规性和记录管理使用场景,result.SaveAsSearchablePdf()在单次调用中生成文本层PDF输出,无需额外的库。

透明定价和商业支持。 IronOCR的$999永久Lite许可证涵盖一个开发者和一个部署位置,包含一年的更新。 定价公开透明,分级结构清晰明了,无需Enterprise合同即可获得商业支持。 之前为仅限 Windows 平台的 Tesseract 封装支付 Patagames 价格的团队,现在可以获得跨平台部署、预处理、PDF 支持和 125 多种语言——同时采用一种在评估完成之前就知道成本的定价模式。 有关完整分级详情,请参阅IronOCR许可;有关免费试用许可,请参阅IronOCR产品页面

请注意: PDFium、PDFSharp、Tesseract 和 iText 是各自所有者的注册商标。 本网站与Chromium项目、Google、empira Software GmbH或iText Group无关,未被其认可或资助。所有产品名称、徽标和品牌均为其各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户