65.9K
CodeProject 正在变化。 阅读更多。
Home

LEADTOOLS 识别成像 SDK: 轻松创建成像应用程序

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2015年6月8日

CPOL

6分钟阅读

viewsIcon

19040

LEADTOOLS 识别成像 SDK - 我很荣幸能试用这款 SDK,我可以告诉您,这绝对是值得的。

LEADTOOLS 识别成像 SDK - 我很荣幸能试用这款 SDK,我可以告诉您,这绝对是值得的。LEADTOOLS 已经确立了其在成像 SDK 领域的领导者地位,但对我而言,它远不止于此。技术支持简直是太棒了!这才是将一个好的、功能性的产品与一个出色的产品区分开来的关键。

LEADTOOLS 识别成像 – 技术支持

在深入探讨代码之前,我必须强调一下LEADTOOLS 的技术支持团队。我遇到了一个自己无法解决的问题。我给 LEAD 的技术支持发了邮件,几个小时后就收到了他们的回复。分配给我案例的支持人员给了我几个不同的解决方案供我尝试。这一封邮件当场就解决了我的问题。这正是许多产品的分水岭所在。出色的工具如果没有出色的支持,将毫无意义。LEADTOOLS 超出了我的预期,并用完整且技术上健全的回复回应了我的支持请求。我感觉就像我购买了这款产品(请记住,我这里只有试用版)。

LEADTOOLS 识别成像 – 设置您的代码

我使用的是 Visual Studio 2013 和一个基本的 Windows Forms 应用程序。当然,使用 LEADTOOLS,您也可以创建利用其成像 SDK 功能的 Web 应用程序。首先,您需要在应用程序中添加以下 using 语句。

using System;
using System.Diagnostics.Contracts;
using System.IO;
using System.Windows.Forms;
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms;
using Leadtools.Forms.DocumentWriters;
using Leadtools.Forms.Ocr;
using Leadtools.Twain;
using Leadtools.Documents;
using Leadtools.Documents.UI;

然后在构造函数中,您需要设置 SDK 的许可。为此,您需要定义许可证文件的路径以及您的开发者密钥。然后调用 LeadTools.RasterSupport 类,该类提供了设置您的 LEADTOOLS 运行时许可的方法。这还会解锁对可选 LEADTOOLS 功能的支持,例如 LEADTOOLS 文档/医疗功能。

将 TIFF 转换为可搜索的 PDF 文档

为了展示将 TIFF 转换为文本可搜索 PDF 文档的便捷性,我创建了以下应用程序。它所做的只是读取一个 TIFF 文件并通过 IOcrEngine 进行处理。点击“Tiffs to PDF”按钮将开始处理 TIFF 文件。

// OCR Advantage Engine
private void LoadImage(string fileName)
{
    Contract.Requires<FileNotFoundException>(File.Exists(fileName),
        "The file does not exist at the given file location.");
    try
    {
        using (RasterCodecs codec = new RasterCodecs())
        {
            rasterImageViewer1.Image = codec.Load(fileName);
        }
    }
    catch (Exception ex)
    {
        MessageBoox.Show(ex.Message);
    }
}

然后将 TIFF 文件转换为 PDF 文档。我使用了 LEADTOOLS 文档查看器来显示创建的 PDF 文档。您会注意到,文档查看器还显示了生成的 PDF 文档的缩略图。

当我在 Acrobat Reader 中打开新创建的 PDF 文档时,您可以看到该 PDF 文档是一个完全有效且可搜索的 PDF 文档。

实现这一目标的代码同样简单。在 MultiTiff() 方法中,我创建了 IOcrEngine 的实例。通过将 null 作为参数传递,引擎会以默认选项启动。请务必在您的项目中添加对“Leadtools.Forms.Ocr.Advantage”DLL 的引用。然后运行 AutoRecognizeManager,将 TIFF 文件的路径和您想要创建的 PDF 文件的文件名传递给它。

private void MultiTiff()
{
    // Create the engine instance
    using (IOcrEngine ocrEngine = OcrEngineManager.CreateEngine
        (OcrEngineType.Advantage, false)
        )
    {
        // Start the engine
        ocrEngine.Startup(null, null, null, null);
        
        // Convert the multi-page TIF image to a PDF document
        ocrEngine.AutoRecognizeManager.Run(
            @"C:\temp\LEADTOOLS\tiffs\nda.tif",
            @"C:\temp\LEADTOOLS\tiffs\TiffOutputt\nda.pdf",
            DocumentFormat.Pdf,
            null,
            null);
    }
}

在“Tiffs to PDF”按钮的点击事件中,使用以下代码创建一个拆分容器,该容器将显示生成的 PDF 文档以及缩略图容器。然后,我将创建的 PDF 文档加载到我的 DocumentFactory 对象中。结果是一个精美生成并显示的 PDF 文档,代码量极少。

private void btnProcessTiffs_Click(object sender, EventArgs e)
{
    MultiTiff();
    
    var splitContainer = new SplitContainer
    {
        Dock = DockStyle.Fill
    };
    this.Controls.Add(splitContainer);
    
    // Use a System.Windows.Forms.SplitterPanel
    var createOptions = new DocumentViewerCreateOptions()
    {
        ViewContainer = splitContainer.Panel2,
        ThumbnailsContainer = splitContainer.Panel1
    };
    var documentViewer = 
        DocumentViewerFactory.CreateDocumentViewer
        (createOptions);
        
    // Load a PDF document
    var document =
        DocumentFactory.LoadFromFile
        (@"C:\temp\LEADTOOLS\tiffs\TiffOutput\nda.pdf",
        new LoadDocumentsOptions { UseCache = false });
        
    // Ready, set in the viewer
    documentViewer.SetDocument(document);
    
    // Now set some options, not required
    documentViewer.View.PreferredItemType =
        DocumentViewerItemType.Svg;
    documentViewer.Commands.Run
        (DocumentViewerCommands.InteractivePanZoom);
}

考虑以下应用程序:读取多个 TIFF 文件并将所有这些文件转换为 PDF 文档。使用此代码逻辑非常强大。

如果您遇到“需要 Raster PDF Engine 才能使用此功能”的异常,您需要找到 LEADTOOLS 安装目录中的 *Leadtools.PdfEngine.dll*(通常位于“*C:\LEADTOOLS 19\Bin*”下的某个 *Dotnet* 子文件夹中)。将此 DLL 复制并粘贴到您应用程序的 bin 文件夹中,或者将其添加到项目中并将其“*Build Action*”设置为“Content”,将其“*Copy to Output Directory*”设置为“Copy Always”。您也可以将 *Leadtools.PdfEngine.dll* 复制到一个公共目录,并使用 InitialPath 方法告诉 LEADTOOLS 从给定路径的 DLL 中查找和加载 PDF 引擎。您可以在以下支持文章中阅读更多内容:“InitialPath 属性”。

区域 OCR

您还可以指定 LEADTOOLS 只识别已加载 TIFF 文件中的特定区域。我在这里使用的是 Advantage OCR 引擎。该应用程序还使用一个拆分容器,顶部面板是 LEADTOOLS RasterImageViewer 控件,底部面板是一个普通的文本框。

点击“Load Image”按钮将加载 TIFF 文件(即我上面用作示例的同一 TIFF 文件),并将其显示在 RasterImageViewer 控件中。在这里,您可以使用鼠标选择要 OCR 引擎识别的文本区域。当您点击“Read Zone”按钮时,文本将输出到底部面板的文本框中。

这是选定区域及其识别出的文本的近距离视图,文本已输出到文本框中。如您所见,识别精度非常高。

实现这一目标的代码也很简单。在“Load Image”按钮的逻辑中,我所做的就是将 RasterImageViewer 设置为使用给定路径的 TIFF 编解码器加载的图像。我的按钮点击只是调用了 `LoadImage` 方法,并将 TIFF 文件的路径传递给了它。

// OCR Advantage Engine
private void LoadImage(string fileName)
{
    Contract.Requires<FileNotFoundException>(File.Exists(fileName),
        "The file does not exist at the given file location.");
    try
    {
        using (RasterCodecs codec = new RasterCodecs())
        {
            rasterImageViewer1.Image = codec.Load(fileName);
        }
    }
    catch (Exception ex)
    {
        Message.Show(ex.Message);
    }
}

`ReadFileZone` 方法首先检查加载的 TIFF 文件中是否已选择区域,然后继续创建 Advantage OCR 引擎。您会看到引擎启动,然后从 RasterImageViewer 中的图像创建一个页面。之后,识别出我用鼠标选择的区域并进行识别。识别出的文本随后输出到拆分容器的文本框中。轻而易举。

private void ReadFileZone()
{
    Contract.Requires<FormatException>(rasterImageViewer1.Image.HasRegion,
        "Using your mouse, please select a zone in the viewer.");
        
    try
    {
        using (IOcrEngine engine = OcrEngineManager.CreateEngine
            (OcrEngineType.Advantage, false))
        {
            engine.Startup(null, null, null, null);
            using (IOcrDocument doc = 
                engine.DocumentManager.CreateDocument())
            {
                IOcrPage page = doc.Pages.AddPage
                    (rasterImageViewer1.Image, null);
                OcrZone zone = new OcrZone()
                {
                    Bounds = new LogicalRectangle
                        (
                        rasterImageViewer1.Image.GetRegionBounds(null)),
                        ZoneType = OcrZoneType.Text
                };
                page.Zones.Add(zone);
                page.Recognize(null);
                
                txtEdit.Text = page.GetText(0);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

考虑以下应用程序:在标准文档上识别文本,自动预先选择区域,并将这些区域保存到数据存储中,例如 SQL Server 数据库。然后,您可以提供多个表单的数字副本,这些表单可以从数据库中快速搜索。

结论

LEADTOOLS 识别成像 SDK 是一个非常强大的工具集,可以满足您的 .NET 应用程序需求。我仅仅触及了 SDK 功能的皮毛,因为它包含了许多用于文档、医疗和多媒体成像的附加功能,并且还包含了 CDLL、C++ 类库、HTML5/JavaScript、iOS/OS X、Android 等的开发接口。我鼓励您查看他们的产品线概述并下载试用版进行试玩。

披露:我免费收到了上述一项或多项产品或服务,希望在我的博客上提及。无论如何,我只推荐我个人使用并认为我的读者会喜欢的产品或服务。我在此根据美国联邦贸易委员会第 16 部分第 255 条:“关于在广告中使用认可和推荐的指南”进行披露。

© . All rights reserved.