手动识别和处理形式——Java

本教程展示了如何手动识别填表格样本对的集合MasterForm模板,然后手动过程表单使用LEADTOOLS低级形式接口来检索信息。这提供了更多比做自动控制过程。

概述
总结 本教程介绍了如何手动识别和流程表单使用LEADTOOLS低级形式接口的Java应用程序。
完成时间 30分钟
Visual Studio项目 下载教程项目(112 KB)
平台 Java应用程序
IDE Eclipse或IntelliJ
开发许可 下载LEADTOOLS
试试用另一种语言

所需的知识

熟悉基本的步骤创建一个项目的审查添加引用和设置一个许可证教程,在工作之前手动识别和处理形式——Java教程。

创建项目并添加LEADTOOLS引用

从项目中创建的副本添加引用和设置一个许可证教程。如果项目是不可用,按照这个教程中的步骤创建它。

的引用需要取决于项目的目的。可以由当地添加引用. jar文件位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ Java

对于这个项目,还需要以下引用:

对于一个完整的列表的应用程序所需的JAR文件,请参考文件包含在Java应用程序中

设置许可文件

许可解锁项目需要的特性。它必须设置工具箱函数被调用之前。详情,包括教程为不同的平台,请参考设置一个运行时许可

有两种类型的运行时许可证:

请注意

添加LEADTOOLS引用和设置许可中会详细介绍添加引用和设置一个许可证教程。

添加表单识别和处理代码

与项目创建、添加引用,许可,可以开始编码。

打开_Main.java类的Package Explorer。重命名_Main.javaManuallyRecognizeAndProcessAFormTutorial.java。添加以下语句的进口块顶部。

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 ()方法,可以传递程序中的参数之后,可以使用。这种方法将是下一个定义。

Java
公共静态无效main (String [] args){ManuallyRecognizeAndProcessAFormTutorial () .run (args);}

run ()方法,添加以下设置库路径为C DLL文件所在的地方,以及加载LEADTOOLS库以前进口的。

Java
私人无效运行(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 ();}}

请注意

的实例OcrEngineRasterCodecs需要处理后为了正确地使用这些资源,有空和调用如上所示吗处理()方法。

添加下面的全局变量ManuallyRecognizeAndProcessAFormTutorial类。

Java
私人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

Java
私人无效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 ()将下面的代码添加到创建方法。斌文件为每个主形式,它将包含主表单属性用于对主表单填充形式在形式的认可。

Java
私人无效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和运行形式认可了形式和相应的主表单。

Java
私人无效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 ()方法填充表单的处理结果显示到控制台。

Java
私人无效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类。

另请参阅

iOS
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2023领先的技术公司。保留所有权利。