LEADTOOLS OCR库提供了将光学字符识别(OCR)技术集成到应用程序中的方法。OCR用于将位图文档图像处理为文本。
系统安装了LEADTOOLS . net OCR工具包后,就可以开始使用LEADTOOLS OCR进行编程了。请注意,在使用OCR属性、方法和事件之前,必须解锁OCR特性。有关解锁LEAD功能的更多信息,请参阅解锁特殊的LEAD功能.
要开始在应用程序中使用。net OCR的LEADTOOLS,请添加对Leadtools.Ocr.dll而且Leadtools.Document.Writer.dll程序集。net应用程序。这些程序集包含用于使用LEADTOOLS OCR编程的各种接口、类、结构和委托。
类的实例之后动态加载的独立程序集中存储与引擎接口的代码IOcrEngine完成接口的创建。因此,请确保所使用的引擎组件位于Leadtools.Ocr.dll组装.如果需要,可以将引擎程序集作为项目的引用添加到项目中,以自动检测依赖项,尽管LEADTOOLS并不需要这样做。
LEADTOOLS提供了以下方法:
LEADTOOLS使用OCR句柄与OCR引擎和包含页面列表的OCR文档交互。OCR句柄是LEADTOOLS OCR和安装在系统上的OCR引擎之间的通信会话。这个OCR句柄是一个内部结构,它包含用于识别、获取和设置信息以及文本验证的所有必要信息。
步骤4、5、6和7几乎可以按任何顺序完成,只要这些步骤是在启动OCR引擎后执行的,并且是在识别页面之前执行的。
有关发动机组件的更多信息,请参阅OcrEngineType而且应用程序中包含的文件.
OCR图像文件(或LEADTOOLS)RasterImage对象)并获取具有可选格式和位置信息的文本。在此模式下,anIOcrDocument对象不需要,因为结果不会被保存。的IOcrEngine。CreatePage方法可用于快速创建IOcrPage从RasterImage直接调用必要的方法(例如IOcrPage。识别),然后直接使用IOcrPage。GetText或IOcrPage。GetRecognizedCharacters.示例请参见IOcrEngine。CreatePage.
对一个或多个页面执行低级光学字符识别,然后以最终文档格式(如PDF或DOCX)创建文档。在此模式下,用户通常创建一个IOcrDocument对象(在内存中或基于文件的),然后添加IOcrPage对象。这些页面可以在事前或事后的某个时刻被识别。添加并识别所有页面后,IOcrDocument。保存调用来将识别数据转换为最终文档。示例请参见IOcrDocument.
在输入图像文件上执行高级光学字符识别,并直接输出到PDF或DOCX等最终文档格式。在此模式下,可以使用IOcrAutoRecognizeManager一次转换文档。可以使用各种事件和日志机制来修改和跟踪识别操作。示例请参见IOcrAutoRecognizeManager.
c#
//假设你在这个类的开头添加了"using Leadtools.Codecs;", "using Leadtools.Ocr;"和"using Leadtools.Document.Writer;
// ***步骤1:指定引擎类型并创建IOcrEngine接口的实例。
//这个例子将使用LEADTOOLS OCR模块- LEAD引擎,并在同一个进程中使用它
IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead);
// ***步骤2:启动引擎。
//使用默认参数
ocrEngine。启动(零,零,零,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);
// ***步骤3:创建一个包含一个或多个页面的OCR文档。
IOcrDocument ocrDocument = ocreengine . documentmanager . createdocument ();
//将多页TIF图像的所有页面添加到文档中
ocrDocument.Pages.AddPages (@“C: \ LEADTOOLS22 \资源\ \ Ocr.tif图像”1, -1,零);
// ***步骤4:(可选)在页面上建立区域,手动或自动
//自动分区
ocrDocument.Pages.AutoZone (零);
// ***步骤5:(可选)设置OCR引擎使用的活动语言
//同时启用英语和德语
ocrEngine.LanguageManager.EnableLanguages (新字符串[] {“en”,“德”});
// ***步骤6(可选)设置拼写检查引擎
//启用拼写检查系统
ocreengine . spellcheckmanager . spellcheckengine = OcrSpellCheckEngine.Native;
// ***步骤7:(可选)设置任何特殊识别模块选项
//将第一页的第一个分区的分区方法设置为Graphic,这样它就不会被识别
OcrZone OcrZone = ocrDocument.Pages[0].Zones[0];
ocrZone。ZoneType = OcrZoneType.Graphic;
ocrDocument.Pages[0]。[0] = ocrZone;
// ***步骤8:识别
ocrDocument.Pages.Recognize (零);
// ***步骤9:保存识别结果
//将结果保存为PDF文件
ocrDocument。保存(@“C: \ LEADTOOLS22 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);
ocrDocument.Dispose ();
// ***步骤10:完成后关闭OCR引擎
ocrEngine.Shutdown ();
ocrEngine.Dispose ();
下面的示例演示了使用LEADTOOLS OCR引擎的一些不同方式。
OCR图像文件(或LEADTOOLS)RasterImage对象)并获取具有可选格式和位置信息的文本。在此模式下,anIOcrDocument对象不需要,因为结果不会被保存。使用IOcrEngine。CreatePage方法快速创建IOcrPage从RasterImage直接:调用必要的方法(例如IOcrPage。识别),然后直接使用IOcrPage。GetText或IOcrPage。GetRecognizedCharacters.
注意:该模式仅被LEADTOOLS OCR模块- LEAD引擎支持。调用IOcrEngine。CreatePage使用任何其他OCR引擎都会导致抛出异常。
下面的示例使用没有文档的OCR页面。
c#
//创建引擎实例
使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead))
{
//启动引擎
ocrEngine。启动(零,零,零,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);
//加载第一页作为RasterImage
RasterImage = ocreengine . rastercodecsinstance . load (@“C: \ LEADTOOLS22 \资源\ \ Ocr.tif图像”1);
//从这个图像创建一个OCR页面,转移RasterImage对象的所有权
使用(IOcrPage ocrPage = ocrEngine。CreatePage(rasterImage, OcrImageSharingMode.AutoDispose))
{
//识别页面
ocrPage。识别(零);
//显示所有区域的文本
为(intzoneIndex = 0;zoneIndex < ocrPage.Zones.Count;zoneIndex + +)
{
字符串text = ocrPage.GetText(zoneIndex);
Console.WriteLine(文本);
}
}
//当调用Dispose时,引擎将自动关闭
}
的实例将OCR结果保存到PDF或DOCX等最终文档中IOcrDocument.可以将一个或多个OCR页面添加到文档中,然后添加各种保存方法可以被调用来创建最终文档。
IOcrDocument有两种用法:
在基于内存的模式下,OCR页在保存之前需要在内存中。当文档有大量页面并且是基于文件的文档或LEADTOOLS临时文件格式时,不建议这样做DocumentFormat。有限公司是必需的。
在基于内存的IOcrDocument,IOcrPageCollection保存页面。任何或所有页面都可以在任何时候被识别,并且可以随意添加或删除页面。
下面的示例使用基于内存的文档创建多页PDF文件。注意在保存操作期间,所有页面是如何保存在内存中的。
c#
//创建引擎实例
使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead))
{
//启动引擎
ocrEngine。启动(零,零,零,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);
//在内存中创建OCR文档
使用(IOcrDocument ocrDocument = ocreengine . documentmanager . createdocument (零, OcrCreateDocumentOptions.InMemory))
{
字符串imageFile =@“C: \ LEADTOOLS22 \资源\ \ Ocr.tif图像”;
//将所有页面添加到文档中
ocrDocument.Pages.AddPages (imageFile, 1, -1,零);
//识别所有页面
ocrDocument.Pages.Recognize (零);
//将识别结果保存为PDF格式
ocrDocument。保存(@“C: \ LEADTOOLS22 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);
}
}
在基于文件的文档模式下,OCR页面在保存前不需要在内存中。当文档有大量页面时,这种模式是最好的。
在基于文件的IOcrDocument模式下,IOcrPageCollection仅存储页面的视图。添加页面时,将当前识别数据的快照保存到文档中。不能再修改此数据,也不再需要该页。页面必须在添加到文档之前被识别,并且只能添加页面。它们无法被移除。
下面的示例使用基于文件的文档创建多页PDF文件。请注意,页面在被识别后将被处理,并且在保存操作期间不需要它们。
c#
//创建引擎实例
使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead))
{
//启动引擎
ocrEngine。启动(零,零,零,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);
//创建一个基于文件的OCR文档
使用(IOcrDocument ocrDocument = ocreengine . documentmanager . createdocument (零, OcrCreateDocumentOptions.AutoDeleteFile))
{
字符串imageFile =@“C: \ LEADTOOLS22 \资源\ \ Ocr.tif图像”;
//获取文档的页数
intpageCount = ocreengine . rastercodecsinstance . gettotalpages (imageFile);
//创建一个页面
为(intPage = 1;page <= pageCount;+ +页)
{
//加载一个光栅图像
RasterImage = ocreengine . rastercodecsinstance . load (imageFile, page);
//从这个图像创建一个OCR页面,转移RasterImage对象的所有权
使用(IOcrPage ocrPage = ocrEngine。CreatePage(rasterImage, OcrImageSharingMode.AutoDispose))
{
//识别页面
ocrPage。识别(零);
//添加到文档中
ocrDocument.Pages.Add (ocrPage);
//页面将在这里被释放,其内存将被释放
}
}
//将识别结果保存为PDF格式
ocrDocument。保存(@“C: \ LEADTOOLS22 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);
}
}
基于文件的文档还可以保存并重新加载,以继续添加页面,或在以后将其转换为最终的文档格式。下面的例子展示了如何做到这一点。
c#
私人静态无效Test4 ()
{
//创建引擎实例
IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead);
//启动引擎
ocrEngine。启动(零,零,零,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);
字符串imageFile1 =@“C: \ LEADTOOLS22 \资源\ \ Ocr1.tif图像”;
字符串imageFile2 =@“C: \ LEADTOOLS22 \资源\ \ Ocr2.tif图像”;
//创建一个基于文件的OCR文档
//传递一个文件名(文件名将被重复使用)并告诉文档不要删除它
字符串documentFile =@“C: \ LEADTOOLS22 \资源\ \ document.bin图像”;
使用(IOcrDocument ocrDocument = ocreengine . documentmanager . createdocument (documentFile, OcrCreateDocumentOptions.None))
{
//确认文件没有任何页面
System.Diagnostics.Debug.Assert (ocrDocument.Pages。Count == 0);
//添加一个页面
RasterImage = ocreengine . rastercodecsinstance . load (imageFile1, 1);
使用(IOcrPage ocrPage = ocrEngine。CreatePage(rasterImage, OcrImageSharingMode.AutoDispose))
{
ocrPage。识别(零);
ocrDocument.Pages.Add (ocrPage);
}
//这里文件被处理,但文件不会被删除
}
//重新加载文档
使用(IOcrDocument ocrDocument = ocreengine . documentmanager . createdocument (documentFile, OcrCreateDocumentOptions.LoadExisting))
{
//确认文件只有一页
System.Diagnostics.Debug.Assert (ocrDocument.Pages。Count == 1);
//添加另一个页面
RasterImage = ocreengine . rastercodecsinstance . load (imageFile2, 1);
使用(IOcrPage ocrPage = ocrEngine。CreatePage(rasterImage, OcrImageSharingMode.AutoDispose))
{
ocrPage。识别(零);
ocrDocument.Pages.Add (ocrPage);
}
//确认文档有2页
System.Diagnostics.Debug.Assert (ocrDocument.Pages。Count == 2);
//保存文档
ocrDocument。保存(@“C: \ LEADTOOLS22 \资源\ \ Document.pdf图像”DocumentFormat.Pdf,零);
//结果将是一个两页的PDF文件
}
//最后,删除文档文件
System.IO.File.Delete (documentFile);
ocrEngine.Dispose ();
}
前面的所有技术都需要低级代码来加载页面、识别页面并将其添加到文档中。LEADTOOLS OCR引擎还支持使用一次性“发射并忘记”执行上述相同的任务。IOcrAutoRecognizeManager接口。在这个高级OCR中,输入图像使用最佳选项和一种方法直接转换为输出格式。
c#
//创建引擎实例
使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead))
{
//启动引擎
ocrEngine。启动(零,零,零,@“C: \ LEADTOOLS22 \ Bin \常见\ OcrLEADRuntime”);
//将多页TIF图像转换为PDF文档
ocrEngine.AutoRecognizeManager.Run (
@“C: \ LEADTOOLS22 \资源\ \ Ocr.tif图像”,
@“C: \ LEADTOOLS22 \资源\ \ Document.pdf图像”,
DocumentFormat.Pdf,
零,
零);
}