本教程展示了如何手动识别填表格样本对的集合MasterForm模板,然后手动过程表单使用LEADTOOLS低级形式接口来检索信息。这提供了更多比做自动控制过程。
| 概述 | |
|---|---|
| 总结 | 本教程介绍了如何手动识别和流程表单使用LEADTOOLS低级形式接口的Java应用程序。 |
| 完成时间 | 30分钟 |
| Visual Studio项目 | 下载教程项目(112 KB) |
| 平台 | Java应用程序 |
| IDE | Eclipse或IntelliJ |
| 开发许可 | 下载LEADTOOLS |
| 试试用另一种语言 |
|
熟悉基本的步骤创建一个项目的审查添加引用和设置一个许可证教程,在工作之前手动识别和处理形式——Java教程。
从项目中创建的副本添加引用和设置一个许可证教程。如果项目是不可用,按照这个教程中的步骤创建它。
的引用需要取决于项目的目的。可以由当地添加引用. jar文件位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ Java。
对于这个项目,还需要以下引用:
leadtools.jarleadtools.barcode.jarleadtools.codecs.jarleadtools.document.writer.jarleadtools.forms.auto.jarleadtools.forms.common.jarleadtools.forms.processing.jarleadtools.forms.recognition.jarleadtools.forms.recognition.ocr.jarleadtools.imageprocessing.core.jarleadtools.ocr.jarleadtools.svg.jar对于一个完整的列表的应用程序所需的JAR文件,请参考文件包含在Java应用程序中。
许可解锁项目需要的特性。它必须设置工具箱函数被调用之前。详情,包括教程为不同的平台,请参考设置一个运行时许可。
有两种类型的运行时许可证:
请注意
添加LEADTOOLS引用和设置许可中会详细介绍添加引用和设置一个许可证教程。
与项目创建、添加引用,许可,可以开始编码。
打开_Main.java类的Package Explorer。重命名_Main.java类ManuallyRecognizeAndProcessAFormTutorial.java。添加以下语句的进口块顶部。
进口java.io.File;进口java.io.IOException;进口java.nio.file.Files;进口java.nio.file.Paths;进口java.util。*;进口leadtools。*;进口leadtools.codecs。*;进口leadtools.document.writer。*;进口leadtools.forms.common。*;进口leadtools.forms.processing。*;进口leadtools.forms.recognition。*;进口leadtools.forms.recognition.ocr。*;进口leadtools.ocr。*;
修改main ()的方法来创建一个新的实例ManuallyRecognizeAndProcessAFormTutorial类和调用run ()方法,可以传递程序中的参数之后,可以使用。这种方法将是下一个定义。
公共静态无效main (String [] args){新ManuallyRecognizeAndProcessAFormTutorial () .run (args);}
在run ()方法,添加以下设置库路径为C DLL文件所在的地方,以及加载LEADTOOLS库以前进口的。
私人无效运行(String [] args){试一试{Platform.setLibPath (“C: \ \ LEADTOOLS22 \ \ Bin \ \ CDLL \ \ x64”);Platform.loadLibrary (LTLibrary.LEADTOOLS);Platform.loadLibrary (LTLibrary.CODECS);Platform.loadLibrary (LTLibrary.OCR);SetLicense ();InitFormsEngines ();CreateMasterFormAttributes ();RecognizeForm (formToRecognize);}抓(异常交货){System.err.println (ex.getMessage ());ex.printStackTrace ();}最后{如果(ocrEngine ! =零){ocrEngine.shutdown ();ocrEngine.dispose ();}如果(编解码器! =零)codecs.dispose ();}}
请注意
的实例OcrEngine和RasterCodecs需要处理后为了正确地使用这些资源,有空和调用如上所示吗处理()方法。
添加下面的全局变量ManuallyRecognizeAndProcessAFormTutorial类。
私人OcrEngine OcrEngine =零;私人RasterCodecs编解码器=零;私人FormRecognitionEngine recognitionEngine =零;私人FormProcessingEngine processingEngine =零;私人字符串masterformDir =“C: \ \ LEADTOOLS22 \ \资源\ \图片\ \ \ \ \ \ OCR MasterForm集形式”;私人字符串formToRecognize =“C: \ \ LEADTOOLS22 \ \资源\ \ \ \ \ \图片形式形式识别\ \ \ \ OCR W9_OCR_Filled.tif”;
在ManuallyRecognizeAndProcessAFormTutorial类添加三个新方法命名InitFormsEngines (),CreateMasterFormAttributes (),RecognizeForm(字符串unindentifiedForm)。为了在调用这三个方法run ()方法,如上所示。的字符串内部参数传递RecognizeForm ()方法将字符串变量包含文件路径到你想认识形式。对于本教程的TIFF文件将使用以下文件路径:C: \ LEADTOOLS22 \ Resources \ \形式\形式识别\ OCR图像\ W9_OCR_Filled.tif
将下面的代码添加到InitFormsEngines ()初始化方法FormRecognitionEngine,FormProcessingEngine和设置OcrEngine。
私人无效InitFormsEngines () {试一试{System.out.println (“初始化引擎……”);编解码器=新RasterCodecs ();.getLoad .getRasterizeDocument codecs.getOptions () () () .setResolution (300);recognitionEngine =新FormRecognitionEngine ();processingEngine =新FormProcessingEngine ();ocrEngine = OcrEngineManager.createEngine (OcrEngineType.LEAD);ocrEngine.startup(编解码器,新DocumentWriter (),零,零);OcrObjectsManager OcrObjectsManager =新OcrObjectsManager (ocrEngine);recognitionEngine.getObjectsManagers阀门()(ocrObjectsManager);processingEngine.setOcrEngine (ocrEngine);System.out.println (“引擎初始化成功。”);}抓(异常交货){System.err.println (ex.getMessage ());ex.printStackTrace ();}}
在CreateMasterFormAttributes ()将下面的代码添加到创建方法。斌文件为每个主形式,它将包含主表单属性用于对主表单填充形式在形式的认可。
私人无效CreateMasterFormAttributes () {System.out.println (“处理MasterForm……”);/ /遍历所有.tif图像文件夹文件masterformOcrFolder =新文件(masterformDir);为(文件masterformFile: masterformOcrFolder.listFiles((文件名)- >.endsWith .toLowerCase filename.toString () () (“.tif”))){字符串masterformfileName = masterformFile.toString ();字符串masterformName = masterformfileName.substring (masterformfileName.lastIndexOf (File.separator) + 1,masterformfileName.lastIndexOf (“。”));RasterImage图像=零;试一试{形象=编解码器。加载(masterformfileName 0 CodecsLoadByteOrder。BGR_OR_GRAY 1 1);FormRecognitionAttributes masterFormAttributes = recognitionEngine。createMasterForm (masterformName UUID.randomUUID (),零);/ /获取表单属性为每个页面为(int我= 0;我< image.getPageCount ();我+ +){image.setPage (i + 1);recognitionEngine。addMasterFormPage (masterFormAttributes形象,零);}recognitionEngine.closeMasterForm (masterFormAttributes);/ /写一个文件的属性Files.write(路径。get (masterformName +“。斌”)、masterFormAttributes.getData ());}抓(异常交货){System.err.println (ex.getMessage ());ex.printStackTrace ();}最后{如果(图片! =零)image.dispose ();如果(编解码器! =零)codecs.dispose ();}}System.out.println (“MasterForm处理完成。”);}
将下面的代码添加到RecognizeForm ()加载给定的形式作为一个方法RasterImage和运行形式认可了形式和相应的主表单。
私人无效RecognizeForm(字符串unindentifiedForm) {System.out.println (“认识形式……”);字符串projectDirectory = System.getProperty (“user.dir”);RasterImage图像=零;试一试{形象=编解码器。加载(unindentifiedForm 0 CodecsLoadByteOrder。BGR_OR_GRAY 1 1);FormRecognitionAttributes filledFormAttributes = recognitionEngine.createForm (零);为(int我= 0;我< image.getPageCount ();我+ +){image.setPage (i + 1);recognitionEngine。addFormPage (filledFormAttributes形象,零);}recognitionEngine.closeForm (filledFormAttributes);布尔发现=假;文件夹=新文件(projectDirectory);文件[]folderBinFiles = folder.listFiles((文件名)- > filename.toString () .toLowerCase () .endsWith (“。斌”));为(文件masterformBinFile: folderBinFiles) {字符串masterformBinFileName = masterformBinFile.toString ();字符串masterformName = masterformBinFileName.substring (masterformBinFileName.lastIndexOf (File.separator) + 1,masterformBinFileName.lastIndexOf (“。”));字符串masterformXmlFilename = masterformDir +“\ \”+ masterformName +”. xml”;processingEngine.loadFields (masterformXmlFilename);/ /比较填充表单属性masterform属性FormRecognitionAttributes masterformAttributes =新FormRecognitionAttributes ();masterformAttributes.setData (Files.readAllBytes (masterformBinFile.toPath ()));FormRecognitionResult recognitionResult = recognitionEngine.compareForm (masterformAttributes filledFormAttributes,零);/ /如果信心> = 80,然后我们发现masterform如果(recognitionResult.getConfidence () > = 80) {< PageAlignment >对齐=列表新ArrayList < PageAlignment > ();为(PageRecognitionResult pageResult: recognitionResult.getPageResults ())alignments.add (pageResult.getAlignment ());System.out.println (”这种形式被认为是“+ masterformName +":\ n ");ProcessForm(图片、平面图);发现=真正的;打破;}}如果(!)System.out.println (“表单不能认可。”);}抓(异常交货){System.err.println (ex.getMessage ());ex.printStackTrace ();}最后{如果(图片! =零)image.dispose ();}}
在创建一个新的方法ManuallyRecognizeAndProcessAFormTutorial类命名ProcessForm (RasterImage形象,列表< PageAlignment >对齐)。在调用此方法RecognizeForm ()方法,如上所示。将下面的代码添加到ProcessForm ()方法填充表单的处理结果显示到控制台。
私人无效ProcessForm (RasterImage形象,列表< PageAlignment >对齐){字符串resultsMessage =”“;/ /所有表单字段在所有页面,显示文本值处理processingEngine。过程(图片、排列);为(FormPage FormPage: processingEngine.getPages ())为(FormField FormField formPage):如果(formField ! =零)/ /为了演示,假设所有的文本字段resultsMessage + = String.format (“% s % s = % s \ n ",formField.getName (),.toString formField.getBounds () (),((TextFormFieldResult) formField.getResult ()) .getText ());如果(resultsMessage = =零| | resultsMessage = =”“)System.out.println (“没有加工过的领域。”);其他的System.out.println (resultsMessage);}
按运行项目Ctrl +季,或通过选择- >跑。
如果遵循正确的步骤,应用程序创建确定在给定的属性为每个主表单目录,加载指定的形式,经营形式认可了形式与适当的主表单,然后处理填充表单,将处理信息显示到控制台。
本教程演示了如何使用LEADTOOLS低级形式接口来识别一个图像作为一个特定的形式,然后提取所有文本字段值显示到控制台。它还介绍了如何使用OcrEngine,FormRecognitionEngine,FormProcessingEngine,FormRecognitionAttributes,FormRecognitionResult类。