跳至頁尾內容
與其他組件的比較

AWS vs Google Vision(OCR 功能比較)

Dynamsoft Label Recognizer 在以計算機可讀的方式從護照中提取MRZ,從車輛中掃描VIN,以及從工業包裝中識別結構化標籤這三方面做得非常出色,拒絕去做其他任何事情。 一旦您的應用程式需要一般文件的光學字元識別(OCR)同時處理,這種專長就會成為預算問題,因為您需要為MRZ採取Dynamsoft Label Recognizer的許可證,為QR碼採取Dynamsoft Barcode Reader的許可證,為邊緣檢測採取Dynamsoft Document Normalizer的許可證,並且仍然在尋找一個第四的程式庫來處理全頁文件。 IronOCR 將所有這些能力整合到一個NuGet package中,以$999永久授權的形式提供。

Understanding Dynamsoft Label Recognizer

總部位於加拿大溫哥華的Dynamsoft Corporation,將其Label Recognizer產品建立在一項特定主張上:可靠地識別受限格式中的機器可讀結構化文字。 該產品NuGet package是Dynamsoft.DotNet.LabelRecognizer,其商業許可證僅限於年度訂閱——沒有永久選擇。 聯繫Dynamsoft以了解當前價格。

該程式庫的識別模型是基於模板的。 您通過JSON設置API(RecognizeByFile。 結果以線條結果集合的形式返回,其中包含原始文字字串。 將這些字串解析為有意義的結構化資料——欄位偏移、日期轉換、檢查位驗證——完全由您負責。

Dynamsoft Label Recognizer的關鍵架構特徵:

  • 基於模板的識別引擎:MRZ、VIN和標籤模式在識別前需要JSON模板配置
  • 僅原始文字輸出:LineResult物件; 不提供結構化欄位解析
  • 僅限影像輸入:不支持原生PDF; PDF需要在處理前轉換為影像
  • 年度訂閱許可:提供每裝置和每伺服器級; 聯繫Dynamsoft了解當前價格; no one-time purchase
  • 每種能力需單獨產品:條碼識別、文件標準化和相機優化各需單獨的許可產品
  • 語言支持有限:專注於拉丁字元MRZ格式; 缺乏廣泛的多語言文件支持

The JSON Runtime Settings API

每個Dynamsoft Label Recognizer工作流程都始於模板配置步驟。例如,MRZ識別需要載入一個JSON文件,該文件聲明了識別參數、字元模型和區域參考,然後才能進行任何影像處理:

using Dynamsoft.DLR;

public class DynamsoftMrzService : IDisposable
{
    private readonly LabelRecognizer _recognizer;

    public DynamsoftMrzService(string licenseKey)
    {
        // Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey);
        _recognizer = new LabelRecognizer();

        // MRZ requires specific template configuration loaded as JSON
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _recognizer.AppendSettingsFromString(mrzTemplate);
    }

    public string ExtractRawMrz(string passportImagePath)
    {
        var results = _recognizer.RecognizeFile(passportImagePath);

        // Returns raw MRZ text lines only — no field parsing
        var mrzLines = new StringBuilder();
        foreach (var result in results)
        {
            foreach (var lineResult in result.LineResults)
            {
                mrzLines.AppendLine(lineResult.Text);
            }
        }
        return mrzLines.ToString().Trim();
    }

    public void Dispose() => _recognizer?.Dispose();
}
using Dynamsoft.DLR;

public class DynamsoftMrzService : IDisposable
{
    private readonly LabelRecognizer _recognizer;

    public DynamsoftMrzService(string licenseKey)
    {
        // Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey);
        _recognizer = new LabelRecognizer();

        // MRZ requires specific template configuration loaded as JSON
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _recognizer.AppendSettingsFromString(mrzTemplate);
    }

    public string ExtractRawMrz(string passportImagePath)
    {
        var results = _recognizer.RecognizeFile(passportImagePath);

        // Returns raw MRZ text lines only — no field parsing
        var mrzLines = new StringBuilder();
        foreach (var result in results)
        {
            foreach (var lineResult in result.LineResults)
            {
                mrzLines.AppendLine(lineResult.Text);
            }
        }
        return mrzLines.ToString().Trim();
    }

    public void Dispose() => _recognizer?.Dispose();
}
Imports Dynamsoft.DLR
Imports System.Text

Public Class DynamsoftMrzService
    Implements IDisposable

    Private ReadOnly _recognizer As LabelRecognizer

    Public Sub New(licenseKey As String)
        ' Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey)
        _recognizer = New LabelRecognizer()

        ' MRZ requires specific template configuration loaded as JSON
        Dim mrzTemplate As String = "{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }"
        _recognizer.AppendSettingsFromString(mrzTemplate)
    End Sub

    Public Function ExtractRawMrz(passportImagePath As String) As String
        Dim results = _recognizer.RecognizeFile(passportImagePath)

        ' Returns raw MRZ text lines only — no field parsing
        Dim mrzLines As New StringBuilder()
        For Each result In results
            For Each lineResult In result.LineResults
                mrzLines.AppendLine(lineResult.Text)
            Next
        Next
        Return mrzLines.ToString().Trim()
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _recognizer?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

P<GBRSMITH<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<<的原始MRZ文字。 要獲得ExpiryDate作為型別屬性,您需要自己實現一個TD1/TD2/TD3解析器。 Dynamsoft文件和此儲存庫中的源文件估計該解析器約需150行解析程式碼——處理字元偏移、<<名稱分隔符、兩位年份消歧以及檢查位驗證——這些都不是Dynamsoft提供的。

理解 IronOCR

IronOCR是一個商業.NET OCR程式庫,基於優化的Tesseract 5引擎,其擁有一個管理API層來處理預處理、輸入格式、結構化輸出和專業化文件解析。 安裝僅需一個NuGet命令:dotnet add package IronOcr。 無需原生二進制管理,無需tessdata文件夾設置,無需模板配置文件。

關鍵特徵:

  • 通用和專業:處理全頁文件OCR、多頁PDF、掃描影像批次和專業格式(護照、條碼、車牌),所有這些都在同一package中
  • 自動預處理管道:對低質量輸入無需手動配置,自動進行傾斜矯正、降噪、對比度、二值化及提高解析度
  • 原生PDF支持:直接讀取掃描和數位PDF文件,包括受密碼保護的文件,無需外部轉換步驟
  • 結構化輸出層次:結果公開頁面、段落、行、單詞和字元邊界框以及置信分數
  • 內建條碼識別:啟用ocr.Configuration.ReadBarCodes = true,條碼和文字在同一次掃描中提取
  • 125+個語言包:每種語言作為單獨的NuGet package安裝; 不需要tessdata文件夾管理
  • 永久許可:$999 Lite,$1,499 Plus,$2,999 Professional——一次性購買,所有平台和功能都可以使用
  • 跨平台部署:Windows、Linux、macOS、Docker、AWS和Azure都可以使用同一package運行,無需特定於平台的配置

功能比較

功能 Dynamsoft Label Recognizer IronOCR
一般文件OCR 不支持 全支持
MRZ提取 專業(原始文字) 內建並解析欄位
本地PDF輸入 不支持
條碼讀取 單獨產品(Dynamsoft Barcode Reader) 內建(ReadBarCodes
可搜尋的 PDF 輸出 不支持
語言支持 有限(拉丁MRZ) 125+種語言
許可模式 僅年度訂閱 永久+訂閱選項
為全面覆蓋需要的產品 3+ 1

詳細功能比較

功能 Dynamsoft Label Recognizer IronOCR
識別範圍
一般文件OCR 不支持
MRZ識別 專業 是(ReadPassport
VIN識別 專業 是(通過標準OCR)
工業標籤識別 專業
手寫識別 不支持
表格提取 不支持
輸入格式
圖像文件(JPG, PNG, TIFF)
PDF(原生) 不支持
受密碼保護的 PDF 不支持
字節陣列/流
多頁文件 手動聚合 是(本地)
輸出格式
純文字 是(原始行)
結構化欄位(解析) 未提供 是(頁面、行、單詞)
可搜尋的PDF 不支持
hOCR 不支持
置信分數 按行 按字、行和頁面
預處理
自動預處理 基礎 是(智能管道)
傾斜/旋轉校正 有限
噪音去除 有限
對比增強 有限
DPI標準化 未提供
整合能力
條碼讀取 單獨產品 內建
文件標準化 單獨產品 不需要
基於區域的OCR 是(通過模板) 是(CropRectangle
執行緒安全並行處理
平台和部署
Windows
Linux
macOS
Docker
Azure/AWS
氣隙/離線
許可和成本
年度訂閱 是(聯繫Dynamsoft獲取定價) 可選
永久許可 不可用 是($999 一次性)
全功能單一package 否(3+產品)
免費試用 30天

專家模式與通才模式

Dynamsoft做出的最重要的架構決定是打造一個專家,而非通才。該決定對於任何始於MRZ或標籤讀取但最終需要更多的應用程式直接產生後果。

Dynamsoft的方式

Dynamsoft Label Recognizer 僅處理其JSON模板所描述內容,除此之外一概不處理。 基於Dynamsoft構建的護照處理應用程式需要三個產品才能處理真實世界的文件工作流程:

// Dynamsoft passport processing — MULTIPLE PRODUCTS REQUIRED

using Dynamsoft.DLR;  // Label Recognizer — for MRZ (annual subscription)
using Dynamsoft.DBR;  // Barcode Reader — for any barcodes (additional license)
// Plus: a separate OCR library — for full page text (more budget)

public class DynamsoftPassportProcessor : IDisposable
{
    private readonly LabelRecognizer _mrzRecognizer;
    private readonly BarcodeReader _barcodeReader;
    // private readonly SomeOtherOcrLibrary _fullTextOcr;  // third product

    public DynamsoftPassportProcessor(
        string mrzLicenseKey,
        string barcodeLicenseKey)
    {
        // License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey);
        _mrzRecognizer = new LabelRecognizer();

        // Configure MRZ template — JSON required before any recognition
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate);

        // Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();
    }

    public PassportResult ProcessPassport(string imagePath)
    {
        // Step 1:MRZ提取— raw text only, no field parsing
        var mrzResults = _mrzRecognizer.RecognizeFile(imagePath);
        var mrzText = new StringBuilder();
        foreach (var r in mrzResults)
            foreach (var line in r.LineResults)
                mrzText.AppendLine(line.Text);

        // Step 2: Parse MRZ manually — your 150-line TD3 parser here
        var parsedMrz = ParseMrzManually(mrzText.ToString());

        // Step 3: Barcodes — second product, second API
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);

        // Step 4: Full page text — THIRD library, no Dynamsoft option
        // var fullText = _fullTextOcr.ReadImage(imagePath);

        return new PassportResult
        {
            ParsedMrz = parsedMrz,
            Barcodes = barcodeResults.Select(b => b.BarcodeText).ToList(),
            FullPageText = null  // requires a fourth product
        };
    }

    public void Dispose()
    {
        _mrzRecognizer?.Dispose();
        _barcodeReader?.Dispose();
    }
}
// Dynamsoft passport processing — MULTIPLE PRODUCTS REQUIRED

using Dynamsoft.DLR;  // Label Recognizer — for MRZ (annual subscription)
using Dynamsoft.DBR;  // Barcode Reader — for any barcodes (additional license)
// Plus: a separate OCR library — for full page text (more budget)

public class DynamsoftPassportProcessor : IDisposable
{
    private readonly LabelRecognizer _mrzRecognizer;
    private readonly BarcodeReader _barcodeReader;
    // private readonly SomeOtherOcrLibrary _fullTextOcr;  // third product

    public DynamsoftPassportProcessor(
        string mrzLicenseKey,
        string barcodeLicenseKey)
    {
        // License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey);
        _mrzRecognizer = new LabelRecognizer();

        // Configure MRZ template — JSON required before any recognition
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate);

        // Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();
    }

    public PassportResult ProcessPassport(string imagePath)
    {
        // Step 1:MRZ提取— raw text only, no field parsing
        var mrzResults = _mrzRecognizer.RecognizeFile(imagePath);
        var mrzText = new StringBuilder();
        foreach (var r in mrzResults)
            foreach (var line in r.LineResults)
                mrzText.AppendLine(line.Text);

        // Step 2: Parse MRZ manually — your 150-line TD3 parser here
        var parsedMrz = ParseMrzManually(mrzText.ToString());

        // Step 3: Barcodes — second product, second API
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);

        // Step 4: Full page text — THIRD library, no Dynamsoft option
        // var fullText = _fullTextOcr.ReadImage(imagePath);

        return new PassportResult
        {
            ParsedMrz = parsedMrz,
            Barcodes = barcodeResults.Select(b => b.BarcodeText).ToList(),
            FullPageText = null  // requires a fourth product
        };
    }

    public void Dispose()
    {
        _mrzRecognizer?.Dispose();
        _barcodeReader?.Dispose();
    }
}
Imports Dynamsoft.DLR  ' Label Recognizer — for MRZ (annual subscription)
Imports Dynamsoft.DBR  ' Barcode Reader — for any barcodes (additional license)
' Plus: a separate OCR library — for full page text (more budget)

Public Class DynamsoftPassportProcessor
    Implements IDisposable

    Private ReadOnly _mrzRecognizer As LabelRecognizer
    Private ReadOnly _barcodeReader As BarcodeReader
    ' Private ReadOnly _fullTextOcr As SomeOtherOcrLibrary  ' third product

    Public Sub New(mrzLicenseKey As String, barcodeLicenseKey As String)
        ' License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey)
        _mrzRecognizer = New LabelRecognizer()

        ' Configure MRZ template — JSON required before any recognition
        Dim mrzTemplate As String = "{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }"
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate)

        ' Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey)
        _barcodeReader = New BarcodeReader()
    End Sub

    Public Function ProcessPassport(imagePath As String) As PassportResult
        ' Step 1: MRZ提取— raw text only, no field parsing
        Dim mrzResults = _mrzRecognizer.RecognizeFile(imagePath)
        Dim mrzText = New StringBuilder()
        For Each r In mrzResults
            For Each line In r.LineResults
                mrzText.AppendLine(line.Text)
            Next
        Next

        ' Step 2: Parse MRZ manually — your 150-line TD3 parser here
        Dim parsedMrz = ParseMrzManually(mrzText.ToString())

        ' Step 3: Barcodes — second product, second API
        Dim barcodeResults = _barcodeReader.DecodeFile(imagePath)

        ' Step 4: Full page text — THIRD library, no Dynamsoft option
        ' Dim fullText = _fullTextOcr.ReadImage(imagePath)

        Return New PassportResult With {
            .ParsedMrz = parsedMrz,
            .Barcodes = barcodeResults.Select(Function(b) b.BarcodeText).ToList(),
            .FullPageText = Nothing  ' requires a fourth product
        }
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _mrzRecognizer?.Dispose()
        _barcodeReader?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

上述程式碼仍不支持PDF輸入。 如果護照掃描作為PDF到達而非JPEG,則在運行這些之前新增PDF渲染程式庫。 實際護照工作流程的完整整合:四個產品,四個許可金鑰,四個維護面。

IronOCR方法

IronOCR處理同一護照工作流程——MRZ解析、全頁OCR、條碼和PDF輸入——來自一個package:

using IronOcr;

public class IronOcrPassportProcessor
{
    private readonly IronTesseract _ocr;

    public IronOcrPassportProcessor()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes included
    }

    public CompletePassportResult ProcessPassport(string imagePath)
    {
        // Structured MRZ fields — no manual parsing required
        var mrzData = _ocr.ReadPassport(imagePath);

        // Full page OCR + barcodes in the same call
        var fullResult = _ocr.Read(imagePath);

        return new CompletePassportResult
        {
            // MRZ fields are already parsed properties
            DocumentType    = mrzData.DocumentType,
            IssuingCountry  = mrzData.IssuingCountry,
            Surname         = mrzData.Surname,
            GivenNames      = mrzData.GivenNames,
            PassportNumber  = mrzData.DocumentNumber,
            Nationality     = mrzData.Nationality,
            DateOfBirth     = mrzData.DateOfBirth,
            ExpiryDate      = mrzData.ExpiryDate,
            RawMrz          = mrzData.MRZ,

            // Full page text from same package
            FullPageText    = fullResult.Text,

            // Barcodes alongside text — no separate product
            Barcodes        = fullResult.Barcodes.Select(b => b.Value).ToList(),

            Confidence      = fullResult.Confidence
        };
    }
}
using IronOcr;

public class IronOcrPassportProcessor
{
    private readonly IronTesseract _ocr;

    public IronOcrPassportProcessor()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes included
    }

    public CompletePassportResult ProcessPassport(string imagePath)
    {
        // Structured MRZ fields — no manual parsing required
        var mrzData = _ocr.ReadPassport(imagePath);

        // Full page OCR + barcodes in the same call
        var fullResult = _ocr.Read(imagePath);

        return new CompletePassportResult
        {
            // MRZ fields are already parsed properties
            DocumentType    = mrzData.DocumentType,
            IssuingCountry  = mrzData.IssuingCountry,
            Surname         = mrzData.Surname,
            GivenNames      = mrzData.GivenNames,
            PassportNumber  = mrzData.DocumentNumber,
            Nationality     = mrzData.Nationality,
            DateOfBirth     = mrzData.DateOfBirth,
            ExpiryDate      = mrzData.ExpiryDate,
            RawMrz          = mrzData.MRZ,

            // Full page text from same package
            FullPageText    = fullResult.Text,

            // Barcodes alongside text — no separate product
            Barcodes        = fullResult.Barcodes.Select(b => b.Value).ToList(),

            Confidence      = fullResult.Confidence
        };
    }
}
Imports IronOcr

Public Class IronOcrPassportProcessor
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()
        _ocr.Configuration.ReadBarCodes = True ' barcodes included
    End Sub

    Public Function ProcessPassport(imagePath As String) As CompletePassportResult
        ' Structured MRZ fields — no manual parsing required
        Dim mrzData = _ocr.ReadPassport(imagePath)

        ' Full page OCR + barcodes in the same call
        Dim fullResult = _ocr.Read(imagePath)

        Return New CompletePassportResult With {
            ' MRZ fields are already parsed properties
            .DocumentType = mrzData.DocumentType,
            .IssuingCountry = mrzData.IssuingCountry,
            .Surname = mrzData.Surname,
            .GivenNames = mrzData.GivenNames,
            .PassportNumber = mrzData.DocumentNumber,
            .Nationality = mrzData.Nationality,
            .DateOfBirth = mrzData.DateOfBirth,
            .ExpiryDate = mrzData.ExpiryDate,
            .RawMrz = mrzData.MRZ,

            ' Full page text from same package
            .FullPageText = fullResult.Text,

            ' Barcodes alongside text — no separate product
            .Barcodes = fullResult.Barcodes.Select(Function(b) b.Value).ToList(),

            .Confidence = fullResult.Confidence
        }
    End Function
End Class
$vbLabelText   $csharpLabel

一個package,一個許可金鑰,一個API。 IronOCR文件涵蓋護照讀取指南條碼讀取功能,因為它們是在同一產品背景下完成的。

多產品成本和複雜性

構建倉庫庫存掃描器最清楚地演示了成本模式的分歧。 系統需要讀取產品標籤(文字)、掃描條碼(QR/EAN)和處理附帶的發貨PDF。 使用Dynamsoft,需要三個單獨授權的產品及獨立的初始化模式。

Dynamsoft的方式

// Dynamsoft warehouse scanner — THREE products, THREE license keys

using Dynamsoft.DLR;  // Label Recognizer — product labels
using Dynamsoft.DBR;  // Barcode Reader — product barcodes
using Dynamsoft.DDN;  // Document Normalizer — document edge detection

public class DynamsoftWarehouseScanner : IDisposable
{
    private readonly LabelRecognizer _labelRecognizer;
    private readonly BarcodeReader _barcodeReader;
    private readonly DocumentNormalizer _documentNormalizer;

    public DynamsoftWarehouseScanner(
        string labelLicenseKey,
        string barcodeLicenseKey,
        string documentLicenseKey)
    {
        LabelRecognizer.InitLicense(labelLicenseKey);
        _labelRecognizer = new LabelRecognizer();

        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();

        DocumentNormalizer.InitLicense(documentLicenseKey);
        _documentNormalizer = new DocumentNormalizer();
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // Three separate API calls, three result types to aggregate manually
        var labelResults   = _labelRecognizer.RecognizeFile(imagePath);
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);
        var docResults     = _documentNormalizer.Normalize(imagePath);

        // Merge three result sets into one model — your code
        return AggregateResults(labelResults, barcodeResults, docResults);
    }

    public void Dispose()
    {
        _labelRecognizer?.Dispose();
        _barcodeReader?.Dispose();
        _documentNormalizer?.Dispose();
    }
}
// Dynamsoft warehouse scanner — THREE products, THREE license keys

using Dynamsoft.DLR;  // Label Recognizer — product labels
using Dynamsoft.DBR;  // Barcode Reader — product barcodes
using Dynamsoft.DDN;  // Document Normalizer — document edge detection

public class DynamsoftWarehouseScanner : IDisposable
{
    private readonly LabelRecognizer _labelRecognizer;
    private readonly BarcodeReader _barcodeReader;
    private readonly DocumentNormalizer _documentNormalizer;

    public DynamsoftWarehouseScanner(
        string labelLicenseKey,
        string barcodeLicenseKey,
        string documentLicenseKey)
    {
        LabelRecognizer.InitLicense(labelLicenseKey);
        _labelRecognizer = new LabelRecognizer();

        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();

        DocumentNormalizer.InitLicense(documentLicenseKey);
        _documentNormalizer = new DocumentNormalizer();
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // Three separate API calls, three result types to aggregate manually
        var labelResults   = _labelRecognizer.RecognizeFile(imagePath);
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);
        var docResults     = _documentNormalizer.Normalize(imagePath);

        // Merge three result sets into one model — your code
        return AggregateResults(labelResults, barcodeResults, docResults);
    }

    public void Dispose()
    {
        _labelRecognizer?.Dispose();
        _barcodeReader?.Dispose();
        _documentNormalizer?.Dispose();
    }
}
Imports Dynamsoft.DLR  ' Label Recognizer — product labels
Imports Dynamsoft.DBR  ' Barcode Reader — product barcodes
Imports Dynamsoft.DDN  ' Document Normalizer — document edge detection

Public Class DynamsoftWarehouseScanner
    Implements IDisposable

    Private ReadOnly _labelRecognizer As LabelRecognizer
    Private ReadOnly _barcodeReader As BarcodeReader
    Private ReadOnly _documentNormalizer As DocumentNormalizer

    Public Sub New(labelLicenseKey As String, barcodeLicenseKey As String, documentLicenseKey As String)
        LabelRecognizer.InitLicense(labelLicenseKey)
        _labelRecognizer = New LabelRecognizer()

        BarcodeReader.InitLicense(barcodeLicenseKey)
        _barcodeReader = New BarcodeReader()

        DocumentNormalizer.InitLicense(documentLicenseKey)
        _documentNormalizer = New DocumentNormalizer()
    End Sub

    Public Function ScanItem(imagePath As String) As WarehouseItemResult
        ' Three separate API calls, three result types to aggregate manually
        Dim labelResults = _labelRecognizer.RecognizeFile(imagePath)
        Dim barcodeResults = _barcodeReader.DecodeFile(imagePath)
        Dim docResults = _documentNormalizer.Normalize(imagePath)

        ' Merge three result sets into one model — your code
        Return AggregateResults(labelResults, barcodeResults, docResults)
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _labelRecognizer?.Dispose()
        _barcodeReader?.Dispose()
        _documentNormalizer?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

發貨PDF仍需要第四個產品——Dynamsoft沒有原生PDF OCR。 三個Dynamsoft產品的年度許可費用(每伺服器級):每年$5,997+。 新增一個PDF程式庫後,每年將達到$6,300+,還未撰寫業務邏輯的一行程式碼。

IronOCR方法

using IronOcr;

public class IronOcrWarehouseScanner
{
    private readonly IronTesseract _ocr;

    public IronOcrWarehouseScanner()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes in same pass
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // One call: text + barcodes + structured word positions
        var result = _ocr.Read(imagePath);

        return new WarehouseItemResult
        {
            AllText    = result.Text,
            Barcodes   = result.Barcodes.Select(b => new BarcodeInfo
                         { Format = b.Format.ToString(), Value = b.Value }).ToList(),
            Confidence = result.Confidence
        };
    }

    public string ScanLabelRegion(string imagePath, int x, int y, int width, int height)
    {
        // Target a specific label area — no template JSON required
        var region = new CropRectangle(x, y, width, height);
        using var input = new OcrInput();
        input.LoadImage(imagePath, region);
        input.Deskew();
        input.Contrast();

        return _ocr.Read(input).Text;
    }

    public string ProcessShipmentPdf(string pdfPath)
    {
        // Native PDF — no external library, no page conversion loop
        return _ocr.Read(pdfPath).Text;
    }
}
using IronOcr;

public class IronOcrWarehouseScanner
{
    private readonly IronTesseract _ocr;

    public IronOcrWarehouseScanner()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes in same pass
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // One call: text + barcodes + structured word positions
        var result = _ocr.Read(imagePath);

        return new WarehouseItemResult
        {
            AllText    = result.Text,
            Barcodes   = result.Barcodes.Select(b => new BarcodeInfo
                         { Format = b.Format.ToString(), Value = b.Value }).ToList(),
            Confidence = result.Confidence
        };
    }

    public string ScanLabelRegion(string imagePath, int x, int y, int width, int height)
    {
        // Target a specific label area — no template JSON required
        var region = new CropRectangle(x, y, width, height);
        using var input = new OcrInput();
        input.LoadImage(imagePath, region);
        input.Deskew();
        input.Contrast();

        return _ocr.Read(input).Text;
    }

    public string ProcessShipmentPdf(string pdfPath)
    {
        // Native PDF — no external library, no page conversion loop
        return _ocr.Read(pdfPath).Text;
    }
}
Imports IronOcr

Public Class IronOcrWarehouseScanner
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()
        _ocr.Configuration.ReadBarCodes = True ' barcodes in same pass
    End Sub

    Public Function ScanItem(imagePath As String) As WarehouseItemResult
        ' One call: text + barcodes + structured word positions
        Dim result = _ocr.Read(imagePath)

        Return New WarehouseItemResult With {
            .AllText = result.Text,
            .Barcodes = result.Barcodes.Select(Function(b) New BarcodeInfo With {
                .Format = b.Format.ToString(),
                .Value = b.Value
            }).ToList(),
            .Confidence = result.Confidence
        }
    End Function

    Public Function ScanLabelRegion(imagePath As String, x As Integer, y As Integer, width As Integer, height As Integer) As String
        ' Target a specific label area — no template JSON required
        Dim region = New CropRectangle(x, y, width, height)
        Using input As New OcrInput()
            input.LoadImage(imagePath, region)
            input.Deskew()
            input.Contrast()

            Return _ocr.Read(input).Text
        End Using
    End Function

    Public Function ProcessShipmentPdf(pdfPath As String) As String
        ' Native PDF — no external library, no page conversion loop
        Return _ocr.Read(pdfPath).Text
    End Function
End Class
$vbLabelText   $csharpLabel

IronOCR的區域OCR文件PDF輸入指南,不需要任何額外產品即可涵蓋。

部署模式

兩個程式庫均在本地運行,無需雲端傳輸文件資料。 關鍵部署差異涉及初始化模式、配置文件管理以及每個程式庫包含在其部署工件中的內容。

Dynamsoft的方式

Dynamsoft需要在建立任何實例之前在SDK類上進行靜態初始化調用。 每個產品都有其自己的初始化模式,且許可金鑰僅激活特定產品。 模板配置文件——MRZ、VIN或自定義標籤模式的JSON設置文件——必須存在並在運行時正確引用。包含Label Recognizer和Barcode Reader的部署管理兩個激活流程、兩組模板和兩條Dispose鏈。

對於倉庫或自助終端裝置部署,配置文件依賴性增加了超越二進制文件的部署工件。 JSON模板是獨立文件,未編譯進package中。 在新伺服器上錯誤配置模板路徑,則識別將無聲返回空結果或在運行時於AppendSettingsFromString調用中拋出錯誤。

IronOCR方法

IronOCR作為單個NuGet package進行部署。 許可激活是一行字串賦值:

// Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
' Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
$vbLabelText   $csharpLabel

沒有模板文件。 沒有原生二進制管理。 沒有tessdata文件夾。 Docker部署指南僅需在Linux上apt-get install

FROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y libgdiplus
COPY --from=build /app/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]

相同的package支持LinuxAWS Lambda,和Azure App Service,無需特定於平台的配置。 對於運行CI/CD管道的團隊,沒有要版本控制或單獨部署的模板文件。

API 地圖參考

Dynamsoft Label Recognizer IronOCR 等效
LabelRecognizer.InitLicense(key) IronOcr.License.LicenseKey = key
new LabelRecognizer() new IronTesseract()
_recognizer.AppendSettingsFromString(json) 不需要——引擎自動配置
_recognizer.RecognizeFile(path) ocr.Read(path)
_recognizer.RecognizeByFile(path, "") ocr.Read(path)
result.LineResults[i].Text result.Lines[i].Text
手動TD3 MRZ解析器(150+行) ocr.ReadPassport(path).Surname等。
BarcodeReader.InitLicense(key)(獨立產品) ocr.Configuration.ReadBarCodes = true
_barcodeReader.DecodeFile(path) result.Barcodes(與OCR相同調用)
barcode.BarcodeFormatString barcode.Format.ToString()
barcode.BarcodeText barcode.Value
DocumentNormalizer.InitLicense(key)(獨立產品) 不需要
無PDF支持 ocr.Read("document.pdf")
無可搜尋PDF輸出 result.SaveAsSearchablePdf(path)
recognizer.Dispose() using var ocr = new IronTesseract()

當團隊考慮從Dynamsoft轉向IronOCR時

應用程式範圍超出MRZ或標籤

大多數遷移發生在專案開始狹隘——"僅讀護照MRZ"——然後產品要求來臨時發生。客戶希望將掃描的護照存檔為可搜尋的PDF。 合規團隊希望OCR簽證蓋章。 支持隊列有關於Dynamsoft無法處理的PDF的票證。在那時候,團隊正在維護Dynamsoft用於MRZ以及另一個用於其他所有工作的OCR程式庫。 兩份許可協議,兩個維護舞臺,同一程式碼庫中的兩個API模式。 IronOCR通過IronTesseract實例來處理擴展需求。 從雙程式庫系統移動到單一package的團隊通常報告整合層程式碼減少30-40%。

年度訂閱成本不可持續

多產品Dynamsoft許可費用逐年複合——聯繫Dynamsoft以獲取當前價格。 多年來,跨多種產品的年度訂閱費用結合起來大幅超過IronOCR的$999一次性費用。永久許可模式對於具有清晰商業壽命地產品最為重要——一個將運行7年的政府文件處理系統不想在核心組件上依賴於專業供應商的年度更新。

需要PDF輸入

Dynamsoft Label Recognizer無原生PDF支持。 每個PDF交付的文件都需要預處理:將每頁渲染為影像,將影像傳遞給Dynamsoft,收集並重新組裝結果。 該管道增加了PDF呈現依賴性、頁迭代迴圈以及需要將識別結果與原始PDF幾何相關聯時的坐標映射問題。 IronOCR原生讀取PDF——result.Pages則為您提供對文字、單詞和置信分數的逐頁存取。 對於20%或以上的輸入以PDF形式到達的團隊,Dynamsoft的解決辦法意味著在每次PDF呈現程式庫更新時,增加顯著的維護負擔。

多產品整合負擔過高

每個額外的Dynamsoft產品意味著一個單獨的靜態初始化調用、一條單獨的Dispose鏈條,以及一個要管理的單獨的JSON配置文件。 整合三個Dynamsoft產品的團隊報告,整合表面是主要的維護成本——而不是識別質量。 許可金鑰的輪換、SDK版本升級和模板文件部署必須在所有三個產品中同時協調。 IronOCR的單一package模型意味著只有一個版本可供升級、一個許可金鑰可供輪換,以及一個API表面可供維護,無論應用程式使用多少OCR功能。

需要國際文件型別

Dynamsoft Label Recognizer建立在ICAO Doc 9303的拉丁字元MRZ格式上。處理CJK語言身份文件、阿拉伯文字護照或多語言發貨標籤的應用程式會迅速遇到語言覆蓋限制。 IronOCR提供125+語言包作為單獨的NuGet package——阿拉伯語、簡體中文、繁體中文、日語、韓語等等。 每個安裝通過dotnet add package IronOcr.Languages.Arabic,而不改變識別程式碼。 多語言指南涵蓋僅需幾行配置的多語言同時識別。

常見的遷移考量

替換MRZ解析器

最直接的遷移步驟是用ReadPassport替換Dynamsoft RecognizeFile加手動TD3解析器。 Dynamsoft提取路徑返回如P<GBRSMITH<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<的原始文字,需要150+行字元偏移的解析來處理TD3格式。 IronOCR替代品:

// Before: Dynamsoft raw extraction + manual 150-line parser
var results = _recognizer.RecognizeFile(imagePath);
var rawMrz = string.Join("\n", results.SelectMany(r => r.LineResults).Select(l => l.Text));
var parsed = MyTd3Parser.Parse(rawMrz);  // delete this file

// After:IronOCRparsed output directly
var passportData = new IronTesseract().ReadPassport(imagePath);
string surname  = passportData.Surname;
string docNum   = passportData.DocumentNumber;
DateTime? dob   = passportData.DateOfBirth;
// Before: Dynamsoft raw extraction + manual 150-line parser
var results = _recognizer.RecognizeFile(imagePath);
var rawMrz = string.Join("\n", results.SelectMany(r => r.LineResults).Select(l => l.Text));
var parsed = MyTd3Parser.Parse(rawMrz);  // delete this file

// After:IronOCRparsed output directly
var passportData = new IronTesseract().ReadPassport(imagePath);
string surname  = passportData.Surname;
string docNum   = passportData.DocumentNumber;
DateTime? dob   = passportData.DateOfBirth;
Imports System
Imports System.Linq

' Before: Dynamsoft raw extraction + manual 150-line parser
Dim results = _recognizer.RecognizeFile(imagePath)
Dim rawMrz = String.Join(vbCrLf, results.SelectMany(Function(r) r.LineResults).Select(Function(l) l.Text))
Dim parsed = MyTd3Parser.Parse(rawMrz)  ' delete this file

' After: IronOCR parsed output directly
Dim passportData = New IronTesseract().ReadPassport(imagePath)
Dim surname As String = passportData.Surname
Dim docNum As String = passportData.DocumentNumber
Dim dob As DateTime? = passportData.DateOfBirth
$vbLabelText   $csharpLabel

手動解析器被完全刪除。 TD1(身份證)、TD2(簽證)和TD3(護照)格式檢測在ReadPassport中自動進行。 護照讀取"如何導覽"詳細記錄了每個返回的欄位。

整合多產品初始化

Dynamsoft多產品應用程式在啟動時有多次InitLicense靜態調用,每個需要自己的金鑰。 將這些合併為一行IronOCR許可金鑰,並移除每個產品的初始化塊:

// Before: three static initializations
LabelRecognizer.InitLicense(mrzKey);
BarcodeReader.InitLicense(barcodeKey);
DocumentNormalizer.InitLicense(documentKey);

// After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // barcodes included automatically
// Before: three static initializations
LabelRecognizer.InitLicense(mrzKey);
BarcodeReader.InitLicense(barcodeKey);
DocumentNormalizer.InitLicense(documentKey);

// After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // barcodes included automatically
Imports System

' Before: three static initializations
LabelRecognizer.InitLicense(mrzKey)
BarcodeReader.InitLicense(barcodeKey)
DocumentNormalizer.InitLicense(documentKey)

' After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")

Dim ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True  ' barcodes included automatically
$vbLabelText   $csharpLabel

應在服務類中用標準using塊替換現有Dynamsoft IronTesseract實例上,或是在DI容器中註冊的單一重用實例。 IronTesseract設置指南涵蓋了這兩種模式。

增加PDF支持

遷移期間團隊最常獲得的新功能是原生PDF輸入——Dynamsoft從未提供過這項功能。 在刪除PDF-to-image轉換迴圈之後,原生PDF讀取不需程式碼更改,超出輸入路徑:

// Before: PDF rendering loop (50+ lines with external library)
var pdfDoc = PdfDocument.Load(pdfPath);
foreach (var page in pdfDoc.Pages)
{
    var bitmap = page.RenderAsBitmap(150);
    var results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap));
    // aggregate...
}

// After: native PDF — no loop, no external library
var result = new IronTesseract().Read(pdfPath);
string fullText = result.Text;
result.SaveAsSearchablePdf("searchable-output.pdf");
// Before: PDF rendering loop (50+ lines with external library)
var pdfDoc = PdfDocument.Load(pdfPath);
foreach (var page in pdfDoc.Pages)
{
    var bitmap = page.RenderAsBitmap(150);
    var results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap));
    // aggregate...
}

// After: native PDF — no loop, no external library
var result = new IronTesseract().Read(pdfPath);
string fullText = result.Text;
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr

' Before: PDF rendering loop (50+ lines with external library)
Dim pdfDoc = PdfDocument.Load(pdfPath)
For Each page In pdfDoc.Pages
    Dim bitmap = page.RenderAsBitmap(150)
    Dim results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap))
    ' aggregate...
Next

' After: native PDF — no loop, no external library
Dim result = New IronTesseract().Read(pdfPath)
Dim fullText As String = result.Text
result.SaveAsSearchablePdf("searchable-output.pdf")
$vbLabelText   $csharpLabel

對於也需要從掃描輸入中生成可搜尋PDF存檔的團隊,SaveAsSearchablePdf是一個單一的方法調用。 可搜尋PDF指南詳細說明出輸選項。

工業標籤質量的預處理

Dynamsoft的模板引擎針對受控標籤條件進行優化。 對於退化的影像——磨損的標籤、低對比度的包裝、偏斜的工業掃描——IronOCR的預處理管道彌補了這一差距。影像質量校正指南涵蓋了每個過濾器。 對於標籤專用的工作流程,Contrast是最有用的:

using var input = new OcrInput();
input.LoadImage(labelImagePath);
input.Deskew();    // correct rotation from handheld scanner
input.Contrast();  // recover faded label text
input.DeNoise();   // remove packaging texture interference

var labelText = new IronTesseract().Read(input).Text;
Console.WriteLine($"Confidence: {new IronTesseract().Read(input).Confidence}%");
using var input = new OcrInput();
input.LoadImage(labelImagePath);
input.Deskew();    // correct rotation from handheld scanner
input.Contrast();  // recover faded label text
input.DeNoise();   // remove packaging texture interference

var labelText = new IronTesseract().Read(input).Text;
Console.WriteLine($"Confidence: {new IronTesseract().Read(input).Confidence}%");
Imports IronOcr

Using input As New OcrInput()
    input.LoadImage(labelImagePath)
    input.Deskew()    ' correct rotation from handheld scanner
    input.Contrast()  ' recover faded label text
    input.DeNoise()   ' remove packaging texture interference

    Dim labelText = New IronTesseract().Read(input).Text
    Console.WriteLine($"Confidence: {New IronTesseract().Read(input).Confidence}%")
End Using
$vbLabelText   $csharpLabel

其他IronOCR功能

經常在遷移後團隊使用但未在上面部分涵蓋的功能:

  • 手寫識別處理手寫筆記和標註,以及印刷文字——Dynamsoft不提供的功能
  • 掃描文件處理逐頁自動預處理的多頁掃描PDF
  • 表格提取從發票、貨運單和資料表中檢測並提取表格資料
  • hOCR導出以HTML形式導出識別結果,並帶有下游佈局分析的邊框坐標
  • 異步OCR適用於ASP.NET和高吞吐量伺服器應用程式的不阻塞識別
  • 進度跟踪使用進度回調來監控多頁批次作業
  • 125+種語言索引支持的語言NuGet包完整列表,包括非拉丁字元
  • MICR/支票讀取金融文件處理的磁墨字元識別——另一種專業用途情境,由單個package處理
  • 每字信心分數用於自動文件審核管道的精細質量信號

.NET 相容性和未來準備

IronOCR以.NET 8和.NET 9作為一級支持的運行時為目標,具有完全向後相容.NET Framework 4.6.2和.NET Core 3.1的特性。該程式庫以單個NuGet package提供,通過NuGet的運行時標識符圖自動解決Windows x64、Windows x86、Linux x64、macOS x64 和macOS ARM的正確平台二進制文件——無需有條件的package引用,無需特定於平台的項目文件。 Dynamsoft Label Recognizer同樣支持現代.NET運行時,但其多產品模式意味著每個產品的.NET相容性必須單獨驗證和更新。 IronOCR的主動開發頻率使NuGet package更新與每個.NET釋出週期保持一致,且單一package模型意味著.NET 10的相容性——預計於2026年下半年發布——將均勻應用於所有功能,無需逐產品跟踪。

結論

Dynamsoft Label Recognizer是一個技術能力很強的專家。對於僅處理護照MRZ的自助服務終端,或僅識別VIN碼的裝配線工作站,其基於模板的識別引擎可靠地執行情況窄的工作。 問題在於實際應用程式很少保持狹隘。 護照需要其完整資料頁的OCR。 運輸標籤以PDF到達。 庫存系統需要在一次掃描中獲取條碼和文字。 每次擴展範圍都會觸發另一個Dynamsoft產品,另一個年度許可證,以及另一個API表面來維護。

成本模型使這個現實具體化。 使用Dynamsoft的年度訂閱模型,對包含MRZ和條碼識別的開發團隊來說,多年的總和大幅增加。 IronOCR涵蓋了兩者的能力——加上原生PDF、可搜尋的PDF輸出、全文件OCR、125+語言,以及預處理——以ocr.Read,刪除手動TD3 MRZ解析器,啟用ReadBarCodes = true,並刪除外部PDF渲染迴圈。

架構差異不僅僅是成本。Dynamsoft的設計迫使團隊先考慮產品而非能力——在寫程式碼之前要問"哪個Dynamsoft產品處理這個?"。 而IronOCR的設計使其倒轉:一個實例,一個配置,一個結果物件,無論文件包含什麼。 這種差異在專案的建立過程中隨著需求的增長而加劇。

對於正在建立需要任何組合的MRZ識別、條碼讀取、一般文件OCR或PDF處理的全新應用程式的團隊,IronOCR的全包模型從一開始就消除了多產品的協調問題。 對於目前同時運行多個Dynamsoft產品和單獨OCR程式庫的團隊,遷移路徑將這個表面整合為單一依賴。 IronOCR文件中心使用工作程式碼範例和部署指南涵蓋了這裡討論的每個功能。

請注意Dynamsoft和Tesseract是其各自所有者的註冊商標。 本網站與Dynamsoft或Google不關聯,也沒有得到它們的支持或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊用途,並反映撰寫時獲得的公開資訊。

常見問題

什麼是Dynamsoft OCR SDK?

Dynamsoft OCR SDK是一種OCR解決方案,開發者和企業用於從影像和文件中提取文字。它是幾種OCR選項之一,與IronOCR一起被評估用於.NET應用程式開發。

IronOCR與Dynamsoft OCR SDK相比,對.NET開發者有何差異?

IronOCR是一個NuGet原始的.NET OCR程式庫,使用IronTesseract作為其核心引擎。與Dynamsoft OCR SDK相比,它提供更簡單的部署(無需SDK安裝程式)、固定費率定價以及乾淨的C# API,無需COM互操作或雲端依賴。

IronOCR的設置是否比Dynamsoft OCR SDK更容易?

IronOCR 通過一個單一的 NuGet 套件安裝。無需 SDK 安裝程式、複製授權文件、註冊 COM 元件或管理單獨的運行時二進位檔案。整個 OCR 引擎都打包在套件中。

Dynamsoft OCR SDK和IronOCR之間有什麼精確性的差異?

IronOCR 在標準商業文件、發票、收據和掃描表單上達到了高識別準確度。對於極度退化的文件或罕見文字,準確度會根據來源品質變化。IronOCR 包含影像預處理篩選器,以改善低品質輸入的識別。

IronOCR 支援 PDF 文字提取嗎?

是的。IronOCR 能從原生 PDF 和掃描的 PDF 圖像中一次性提取文字。它還支持多頁 TIFF 檔案、影像和流。對於掃描的 PDF,OCR 會逐頁應用並生成每頁的結果物件。

Dynamsoft OCR SDK的授權與IronOCR相比如何?

IronOCR 採用固定費率的永久授權,無須為每頁或每次掃描支付費用。處理大量文件的組織無論數量多少都支付相同的授權費用。詳細資訊和批量定價在 IronOCR 授權頁面上。

IronOCR 支援哪些語言?

IronOCR 透過單獨的 NuGet 語言包支持 127 種語言。新增一種語言只需一個 'dotnet add package IronOcr.Languages.{Language}' 命令。無需手動放置文件或配置路徑。

如何在.NET專案中安裝IronOCR?

通過 NuGet 安裝:在套件管理員控制台或 CLI 中分別使用 'Install-Package IronOcr' 或 'dotnet add package IronOcr'。其他語言包也是這樣安裝的。無需本地 SDK 安裝程式。

IronOCR是否適合Docker和容器化部署,而Dynamsoft OCR則不適合?

是的。IronOCR 通過其 NuGet 載於 Docker 容器中運行。授權金鑰通過環境變數設置。無需授權文件、SDK 路徑或量掛載來執行 OCR 引擎。

我能否在購買前試用IronOCR,與Dynamsoft OCR相比?

是的。IronOCR 試用模式中處理文件並在輸出上附上浮水印結果。您可以在購買授權前驗證自己文件的準確性。

IronOCR 支援條碼閱讀與文字提取嗎?

IronOCR 專注於文字提取和 OCR。對於條碼閱讀,Iron Software 提供了額外的 IronBarcode 程式庫。兩者均可個別使用或作為 Iron Suite 套件的一部分。

從Dynamsoft OCR SDK遷移到IronOCR是否容易?

從Dynamsoft OCR SDK遷移到IronOCR通常涉及替換初始化序列為IronTesseract實例化,移除COM生命週期管理,並更新API呼叫。大多數遷移顯著減少程式碼複雜性。

Kannaopat Udonpant
軟體工程師
在成為軟體工程師之前,Kannapat在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat還成為車輛機器人實驗室的一員,該實驗室隸屬於生產工程系。在2022年,他憑藉C#技能加入了Iron Software的工程團隊,專注於IronPDF。Kannapat珍視他的工作,因為他能直接向撰寫大部分IronPDF程式碼的開發者學習。除了同儕學習,Kannapat還喜歡在Iron Software工作的社交方面。不寫程式碼或文件時,Kannapat通常在他的PS5上玩遊戲或重看The Last of Us。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話