本教程展示了如何使用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.dllLeadtools.Codecs.dllLeadtools.Document.Writer.dllLeadtools.Ocr.dllLeadtools.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引擎来比较使用不同的顺序处理和并行处理技术时的性能。