本教程展示了如何使用LEADTOOLS SDK在c# Window控制台应用程序中多线程化OCR引擎进行并行处理。
概述 | |
---|---|
总结 | 方法使OCR引擎多线程化IOcrAutoRecognizeManager 在c# Windows控制台应用程序中。 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(3kb) |
平台 | c# Windows控制台应用程序 |
IDE | Visual Studio 2017, 2019 |
开发许可 | 下载LEADTOOLS |
在开始之前多线程OCR与自动识别管理器-控制台c#本教程中,通过回顾添加引用和设置License教程。
中创建的项目的副本开始添加引用和设置License教程。如果您没有该项目,请按照该教程中的步骤创建它。
所需要的参考资料取决于项目的目的。引用可以通过以下两种方法中的一种添加(但不能同时添加)。
如果使用NuGet引用,本教程需要以下NuGet包:
Leadtools。光学字符识别
如果使用本地DLL引用,则需要以下DLL。
dll位于< INSTALL_DIR > \ LEADTOOLS21 \ Bin \ Dotnet4 \ x64
:
Leadtools.dll
Leadtools.Codecs.dll
Leadtools.Document.Writer.dll
Leadtools.Ocr.dll
Leadtools.Ocr.LEADEngine.dll
有关应用程序需要哪些DLL文件的完整列表,请参阅你的申请中包含的文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关包括针对不同平台的教程的详细信息,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
如何正确添加LEADTOOLS NuGet和本地引用涵盖在添加引用和设置License教程。
随着项目的创建、引用的添加和许可的设置,编码就可以开始了。
在解决方案资源管理器,打开Program.cs
.将下列语句添加到使用
块的顶部Program.cs
:
//在顶部使用块
使用系统;
使用先;
使用Leadtools;
使用Leadtools.Ocr;
使用Leadtools.Document.Writer;
使用System.Diagnostics;
使用System.Threading.Tasks;
的IOcrAutoRecognizeManager
接口支持在处理作业时使用多个线程。线程的数量可以使用MaximumThreadsPerJob
财产。
也可以在自己的线程中执行每个作业,这在下面的代码中使用平行的。ForEach
.
控件中添加一个新方法程序
类,命名OCR ()
.方法中的新方法Main ()
方法的下面调用SetLicense
.将下面的代码添加到OCR ()
方法来测试顺序和并行处理的四种不同组合。
静态无效OCR ()
{
使用(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead))
{
字符串inputDirectory =@"文件路径到输入目录";
字符串outputDirectory =@"输出目录的文件路径";
秒表=新秒表();
ocrEngine。启动(零,零,零,零);
控制台。WriteLine (“OCR引擎启动”);
Console.WriteLine ();
IOcrAutoRecognizeManager manager = ocreengine . autorecognizemanager;
varfiles =目录。EnumerateFiles (inputDirectory“* .tif”);
经理。MaximumThreadsPerJob = 1;//每个任务1个线程
控制台。WriteLine (“按顺序处理一切……”);
stopwatch.Reset ();
stopwatch.Start ();
控制台。写($“已处理文件”);
foreach(var文件在文件)
{
Guid id = Guid. newguid ();//创建新的文件名
经理。运行(file, outputDirectory + id.ToString() +. pdf”DocumentFormat.Pdf,零,零);
控制台。写($“{Path.GetFileName(文件)}. .”);
}
stopwatch.Stop ();
控制台。WriteLine (“处理”。);
控制台。WriteLine ($“总时间:{秒表。ElapsedMilliseconds} ms(所有顺序)");
Console.WriteLine ();
//设置当前机器的最大CPU /内核数。
经理。MaximumThreadsPerJob = 0;
控制台。WriteLine (“并行处理页面,按顺序处理目录……”);
stopwatch.Reset ();
stopwatch.Start ();
控制台。写($“已处理文件”);
foreach(var文件在文件)
{
Guid id = Guid. newguid ();//创建新的文件名
经理。运行(file, outputDirectory + id.ToString() +. pdf”DocumentFormat.Pdf,零,零);
控制台。写($“{Path.GetFileName(文件)}. .”);
}
stopwatch.Stop ();
控制台。WriteLine (“处理”。);
控制台。WriteLine ($“总时间:{秒表。ElapsedMilliseconds} ms(并行页面,目录顺序)");
Console.WriteLine ();
控制台。WriteLine (“并行处理一切……”);
stopwatch.Reset ();
stopwatch.Start ();
控制台。写($“已处理文件”);
平行的。ForEach(文件s, (file) =>
{
Guid id = Guid. newguid ();//创建新的文件名
经理。运行(file, outputDirectory + id.ToString() +. pdf”DocumentFormat.Pdf,零,零);
控制台。写($“{Path.GetFileName(文件)}. .”);
});
stopwatch.Stop ();
控制台。WriteLine (“处理”。);
控制台。WriteLine ($“总时间:{秒表。ElapsedMilliseconds} ms(一切并行)");
Console.WriteLine ();
经理。MaximumThreadsPerJob = 1;//每个任务1个线程
控制台。WriteLine (“按顺序处理页面,并行处理目录……”);
stopwatch.Reset ();
stopwatch.Start ();
控制台。写($“已处理文件”);
平行的。ForEach(文件s, (file) =>
{
Guid id = Guid. newguid ();//创建新的文件名
经理。运行(file, outputDirectory + id.ToString() +. pdf”DocumentFormat.Pdf,零,零);
控制台。写($“{Path.GetFileName(文件)}. .”);
});
stopwatch.Stop ();
控制台。WriteLine (“处理”。);
控制台。WriteLine ($“总时间:{秒表。ElapsedMilliseconds} ms(页面顺序,目录并行)");
Console.WriteLine ();
控制台。WriteLine (“按任意键…”);
Console.ReadKey ();
}
}
请注意
中设置适当的文件夹名称
inputDirectory
而且outputDirectory
变量。输入目录必须包含TIFF文件(* .tif)
由本教程中创建的应用程序处理。
按下运行项目F5,或选择Debug ->开始调试.
如果正确地执行了这些步骤,将出现控制台,应用程序将TIFF图像转换为PDF格式,并将它们保存到指定的位置。使用顺序处理和并行处理的不同组合,重复执行四次。
重要提示
在图片所示的测试中,顺序处理页面和并行处理目录的效果最好。然而,情况并非总是如此,使用不同的图像集或使用具有不同CPU核数的不同计算机时,不同的组合可以产生更好的结果。因此,在应用程序将要使用的实际硬件上,使用代表用例的实际图像进行测试是很重要的。
本教程展示了如何创建一个基于控制台的OCR应用程序,该应用程序使用LEAD OCR引擎来比较使用不同的顺序处理和并行处理技术时的性能。