使用ABBYY FlexiCapture Engine SDK开发OCR应用的心得分享

介绍

几周前,我在空闲时间使用泰比公司(ABBYY)的FlexiCapture
Engine试用版创建了一些简单的OCR应用。FlexiCapture Engine是一款用于创建数据捕捉应用的SDK,能够打开图像、PDF文件及扫描文件,对有价值的数据及字段进行分类及提取。提取的数据可导出至Excel、XML、CSV、PDF
格式文件,也可以导出至外部数据库、DMS及ECM系统。

开始创建

在已经装有开发工具(如MS Visual
Studio)的电脑上安装SDK,之后SDK会出现10多种示例应用程序,包括C++、C#、VB.NET、VB、Delphi、Java及数种脚本语言(JavaScript、Perl及
VBScript)的示例。如需快速着手开发,你可以使用代码开发库。代码开发库会对SDK编程的方方面面进行介绍。每一代码开发库组包含一个或多个代码片段,并附有完成任务的逐步描述。

选择需要处理的任务,然后阅读完成任务的步骤介绍,查看已备好样本的源代码或运行准备执行。

我想单独介绍的其中一个样本是FlexiCapture
Engine代码片段,该样本提供了一个简短代码片段集,显示了快速进入应用程序界面(API)并开始开发应用程序不可缺少的典型应用范围及编程任务。

现在,让我们看看使用FlexiCapture Engine识别文件及导出结果的基本方法。

利用ABBYY FlexiCapture预配置项目进行处理

ABBYY FlexiCapture Engine能够处理ABBYY
FlexiCapture项目内的固定格式表格及灵活格式文件。要使用此功能,必须利用ABBYY FlexiCapture先创建一个项目,然后在ABBYY
FlexiCapture Engine中使用该项目。ABBYY FlexiCapture
Engine工具包及样本库中已包含了一个备好的FlexiCapture样本项目。

一个FlexiCapture项目是一个将文档集和处理这些文档所需设置统一起来的单一环境。这些需要处理的文档集称作批量文件。项目结构(包括批量文件及零散文件)将在FlexiCapture
Engine对象中重现。项目最关键的部分是一套针对固定格式及灵活格式页面布局的【文件定义】,该【文件定义】用于数据提取,将决定所得数据的质量。

为了处理文件,我在项目中将图像添加至一批量处理中。在识别过程中,程序选择适合文件页面的【文件定义】,应用该【文件定义】,然后利用选定的【文件定义】提取文件相关区域的数据。处理后的数据随后被转至外部文件夹。

在单一预配置项目中识别文件并导出其结果,需要采取以下基本步骤:

步骤1:加载FlexiCapture Engine

在利用ABBYY FlexiCapture
Engine开始处理任务之前,需要创建引擎对象。引擎对象是ABBYY FlexiCapture Engine对象层级结构中的顶级对象,是ABBYY
FlexiCapture Engine唯一可在外部创建的对象。

要创建引擎对象,需要使用InitializeEngine (InitializeEngineEx)导出功能。以下是ABBYY FlexiCapture
Engine在C#中加载和初始化过程中的样本代码:

private IEngine loadEngine()

{

IEngine
engine;

int
hResult = InitializeEngine( FceConfig.GetDeveloperSN(), null, null, out engine
);

Marshal.ThrowExceptionForHR( hResult
);

return
engine;

}

导出的引擎对象为单体形态,因此在使用ABBYY FlexiCapture
Engine的单一实例应用中,仅可以创建一个此类对象。创建引擎对象的重复性尝试将回归同一对象。需要重点注意的是创建引擎对象的过程比较久,因为不仅需要加载FCEngine.dll,还需要加载一整套其它DLLs。

在创建引擎对象之后,就能够在我的应用中使用ABBYY FlexiCapture
Engine对象。然后可以根据选定的处理方法打开一个FlexiCapture项目或创建FlexiCapture处理程序。我会考虑使用第一种方法——通过配置好的FlexiCapture项目进行处理。

步骤2:打开项目

要准备预配置ABBYY FlexiCapture项目处理文件所需的程序,需要打开在ABBYY
FlexiCapture中创建的项目。一个项目含有处理某一类型文件所需的所有设置:图像导入参数、文件定义及批量文件处理。该项目文件夹必须含有该项目文件(.fcproj
file)以及一个带有【文件定义】的文件夹。

在ABBYY FlexiCapture
Engine中,该项目由项目对象表示。要打开一个现有项目,可以使用引擎对象的OpenProject方法,并将完整路径加入该项目文件作为第一个参数。这是用C#打开项目时的代码示例:

//打开该项目示例

IProject
project =
engine.OpenProject("D:\\TestProject\\TestProject.fcproj\\Invoices_eng.fcproj"
);

步骤3:添加图像


项目打开后,就可以将新图像添加至该项目中进行处理。图像添加后,这些图像被分组成文件,而这些文件会被添加至批处理。向批处理分配文件的原则由用户自定义:可以在单个批处理中处理所有文件,或将同一日期添加的文件或单一批次扫描的批量文件生成批处理。

FlexiCapture
Engine提供一组复制了项目逻辑结构的对象。批量处理项目对象分别对应一个批处理及一个项目。项目对象含有一个批量处理对象集,由批量处理对象代表。这个对象集可以通过项目对象的批量处理属性获得。每一个批处理含有一套文件,可以通过项目对象的批量处理属性获得。文件由文件对象表示,一份文件由文件对象表示。

以下是添加图像的C#代码格式:

//添加一个新的批量处理

IBatch batch = project.Batches.AddNew( "TestBatch" );

//打开批量处理

batch.Open();

//添加图像到批量处理

batch.AddImage("D:\\SampleImages\\Invoices_1.tif" );

batch.AddImage("D:\\SampleImages\\Invoices_2.tif" );

batch.AddImage("D:\\SampleImages\\Invoices_3.tif" );

步骤4:识别文件


在文件处理过程中,程序选择适合文件页面的【文件定义】,应用该【文件定义】,然后利用选定的【文件定义】提取文件相关区域的数据。ABBYY FlexiCapture
Engine允许通过使用一种方法完成所有这些文件的处理步骤。一种识别文件的简单途径是使用批量处理对象的识别方法。你可以指定处理文件、识别方式以及适用的【文件定义】。

//在批量处理中识别所有图像

batch.Recognize( null, RecognitionModeEnum.RM_ReRecognizeMinimal, null );

步骤5:导出结果


文件被识别后,需要保存识别的数据。首先,可以将提取的数据保存至XLS、DBF、TXT、CSV或XML格式的文件中,然后将文件的电子文档保存为需要的格式,如PDF或PDF/A格式。这里可以使用项目批量处理对象的导出方法。前者允许你从多个批处理中将结果导出,而后者用于将批处理中的多个文件导出。在导出时,可以通过ExportParams对象改变导出参数。例如,可以指定是否将字段坐标导入XML,或为图像文件设定压缩比等等。在默认模式下,【文件定义】中指定的参数将被使用。

//导出结果

batch.Export( null, null );

如果由于某些原因ABBYY FlexiCapture
Engine提供的导出方法不合适我的任务,那么可以使用我自己的导出程序。例如,我可以转化一份文件的所有字段,并将他们的数值导出至自定义格式文件。样本代码可以在我之前提到的代码片段样本中获得。

完成批处理工作后,我调出对应批量处理对象的【关闭】方法关闭批量处理,并释放一些资源(打开的批量处理不能被关闭)。该方法同样适用于项目——我需要调出【项目】目标的【关闭】方法释放一些资源(打开的项目不能被关闭)。

//关闭和删除批处理

} finally {

batch.Close(); // Before the batch could be deleted, it has to be closed

project.Batches.DeleteAll();

}

最后步骤:卸载FlexiCapture Engine

使用ABBYY FlexiCapture
Engine完成工作后,我需要使用DeinitializeEngine功能卸载引擎对象。

private void unloadEngine( ref IEngine engine )

{

engine =
null;

int
hResult = DeinitializeEngine();

Marshal.ThrowExceptionForHR( hResult
);

}

在此,我分享一个非常有用的心得:你可以使用引擎对象的StartLogging方法让错误、警告及方法调用记录进入日志文件,同时它也可以帮助追踪未被删除及正确释放的对象。

    

      结论

如果你正在开发用于处理诸如发票、医疗表格、投保单、问卷调查表、测试表及身份证等的数据捕捉解决方案,开发人员可以考虑使用ABBYY FlexiCapture
Engine
SDK。它还可以针对各种不同的扫描设备和终端创建自定义数据捕捉解决方案。除了通过预配置FlexiCapture项目处理任务之外,FlexiCapture
Engine还有其它方法实施数据捕捉应用——FlexiCapture
Engine提供就绪的应用程序界面(API)用于创建简单的【文件定义】,而无需使用FlexiCapture项目。这又是另一个完整的主题,我会尽快在另一篇心得中分享。

     关于下载

我是在ABBYY官网提交申请下载的免费试用版本,试用申请页面请点击

使用ABBYY FlexiCapture Engine SDK开发OCR应用的心得分享,布布扣,bubuko.com

时间: 2024-10-13 12:41:54

使用ABBYY FlexiCapture Engine SDK开发OCR应用的心得分享的相关文章

ABBYY FineReader Engine泰比OCR文字识别控件桌面版说明

FineReader Engine用于开发ocr文字识别软件和图片识别软件,提供自己的OCR API, 包括光学字符识别(OCR).智能字符识别(ICR).光标识别(OMR).光学条码识别(OBR).文档图片.PDF转换技术和 图像识别技术. 新的泰比(ABBYY)FineReader Engine 10将使你体会到非同一般的OCR文字识别软件质量和可用性: 选择泰比(ABBYY)FineReader Engine 10,将获得无与伦比的准确性.更高的ocr技术的质量和速度.与众不同的功能性以及

RTMPC Hybrid Engine SDK

AnyRTC云通讯RTMPC Hybrid Engine SDK(简称RTMPC)是一套基于RTMP协议可以进行视频连线的混合引擎,由两部分构成:主播端+访客端,本文将主要介绍RTMPC的相关信息. 首先该SDK遵循标准RTMP视频推流拉流协议,完全兼容市场上主流的标准RTMP视频直播服务器及云平台.与此同时,AnyRTC云通讯创新性实现了RTMP+RTC的技术融合,使用RTC技术实现基于标准的RTMP协议的互动连线视频直播,当然SDK内部囊括了AnyRTC音视频团队多年的技术积累,在视频处理.

TortoiseSVN安装以及淘宝 TAE SDK 开发环境的搭建

1.进入TortoiseSVN 官网下载地址http://tortoisesvn.net/downloads.html,根据自己的操作系统位数下载相应最新版本的TortoiseSVN. 2.如果你的英文不太过关,建议你同时下载TortoiseSVN 对应的“Chinese, simplified(简体中文语言包)”. 3.双击下载好的“TortoiseSVN-1.8.10.26129-x64-svn-1.8.11”,以默认选项安装SVN.完成后,双击“LanguagePack_1.8.10.26

【转】微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引

微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引 Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享.也欢迎大家的补充! SDK还在不断优化升级中,开源项目见:https://github.com/JeffreySu/WeiXinMPSDK 微信技术交流社区:http://www.weiweihi.com/QA Senparc

高拍仪拍照SDK开发(良田影像S300L|S500L)

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 高拍仪拍照SDK开发下载地址:点击下载 本SDK适用于:良田影像S300L|S500L 高拍仪如图: SDN开发包安装之后找到安装目录,如图: 大家找到各自需要的版本即可,需要注意的是如果需要上传图片到服务器的话,我已经写好了C#版的接受程序,

Android基础入门教程——1.2.1 使用Eclipse + ADT + SDK开发Android APP

Android基础入门教程--1.2.1 使用Eclipse + ADT + SDK开发Android APP 标签(空格分隔): Android基础入门教程 1.前言 这里我们有两条路可以选,直接使用封装好的用于开发Android的ADT Bundle,或者自己进行配置 因为谷歌已经放弃了ADT的更新,官网上也取消的下载链接,这里提供谷歌放弃更新前最新版本的 ADT Bundle供大家下载! 2.直接使用打包好的Eclipse 32位版:adt-bundle-windows-x86-20140

微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引

Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享.也欢迎大家的补充! SDK还在不断优化升级中,开源项目见:https://github.com/JeffreySu/WeiXinMPSDK 微信技术交流社区:http://www.weiweihi.com/QA Senparc.Weixin.MP SDK的目标是探索微信公众平台更好的SDK模式,并提

新浪微博SDK开发(1):总述

花了几天时间,消耗了九牛六虎之力,新浪微博大部分API已经封装,但有部分API实在太难封装. 说起这封装,我必须严重地.从人品和技术层面鄙视一下新浪的程序员,实在太菜了.估计菜鸟都被大企业吸收了,菜到连面向对象都不懂. 同样的内容,返回的JSON对象居然会出现不同结构,更可恶的,像公共API中获取城市列表,国家区域代码列表的返回结果,实在让人不得不发笑.那些JSON用JS读起来都困难,更何况要进行封装呢.根本没法封装,因此在论坛上抱怨的人不少,可是新浪官方呢,置之不管,就当没看见一样,看来,大企

精品软件 推荐 ABBYY FineReader 世界排名第一的 OCR 文字识别工具

ABBYY FineReader 是世界排名第一的 OCR 文字识别工具,提供高效和精准的文档识别.数据提取解决方案,支持多国字符和彩色文件识别,主要用于将扫描图像.图片型PDF转化成可编辑的文本. ABBYY FineReader 可以看作是超级无敌的 PDF 转换器,能转换任意类型的 PDF,其他 PDF 转换工具.或清华紫光OCR.尚书七号.汉王OCR等在它面前都可谓是浮云.比较常用的功能为:扫描到 Word.将PDF/图像.图片转换为 Word 文档或者可编辑/可搜索的PDF文档,另外也