自动识别和处理表单 - Java-LEADTOOLS SDK 23.0
本教程介绍如何创建一组主表单,然后使用 Java 应用程序中的 LEADTOOLS 高级表单界面自动识别和处理表单。
概述 | |
---|---|
概括 | 本教程介绍如何在 Java 应用程序中使用 LEADTOOLS 高级表单界面识别和处理表单。 |
完成时间 | 30分钟 |
Visual Studio 项目 | 下载教程项目 (2 KB) |
平台 | Java 应用程序 |
集成开发环境 | Eclipse/IntelliJ |
开发许可证 | 下载 LEADTOOLS |
尝试使用其他语言 |
|
所需知识
在开始自动识别和处理表单教程之前,请先查看添加引用和设置许可证教程,熟悉创建项目的基本步骤。
创建项目并添加 LEADTOOLS 引用
从“添加引用”和“设置许可证”教程中创建的项目副本开始。如果该项目不可用,请按照该教程中的步骤创建它。
所需的引用取决于项目的目的。可以通过.jar
位于 的本地文件添加引用<INSTALL_DIR>\LEADTOOLS23\Bin\Java
。
对于该项目,需要以下参考文献:
leadtools.jar
leadtools.barcode.jar
leadtools.codecs.jar
leadtools.document.writer.jar
leadtools.forms.auto.jar
leadtools.forms.common.jar
leadtools.forms.processing.jar
leadtools.forms.recognition.jar
leadtools.forms.recognition.ocr.jar
leadtools.imageprocessing.core.jar
leadtools.ocr.jar
leadtools.svg.jar
有关应用程序所需的 JAR 文件的完整列表,请参阅Java 应用程序要包含的文件
设置许可证文件
许可证用于解锁项目所需的功能。必须在调用任何工具包函数之前设置许可证。有关详细信息(包括不同平台的教程),请参阅设置运行时许可证。
运行时许可证有两种类型:
- 评估许可证,在下载评估工具包时获得。它允许对工具包进行评估。
- 部署许可证。如果需要部署许可证文件和开发者密钥,请参阅获取许可证。
添加表单识别和处理代码
创建项目、添加参考并设置许可证后,就可以开始编码了。
在包资源管理器_Main.java
中打开该类。将以下语句添加到顶部的块中。import
import java.io.*;
import java.nio.file.*;
import leadtools.*;
import leadtools.codecs.*;
import leadtools.document.writer.*;
import leadtools.forms.auto.*;
import leadtools.forms.processing.*;
import leadtools.ocr.*;
向类中添加以下全局变量_Main
。
private OcrEngine ocrEngine = null;
private AutoFormsEngine autoEngine = null;
修改该run()
方法,如下所示,以加载 LEADTOOLS 库,将库路径设置为 CDLL 所在的位置,并调用必要的方法。autoEngine
和ocrEngine
在使用后都需要进行处理,以便正确释放这些资源。
public static void main(String[] args) throws IOException
{
new _Main().run(args);
}
private void run(String[] args) {
try {
Platform.setLibPath("C:\\LEADTOOLS23\\Bin\\CDLL\\x64");
Platform.loadLibrary(LTLibrary.LEADTOOLS);
Platform.loadLibrary(LTLibrary.CODECS);
Platform.loadLibrary(LTLibrary.OCR);
String formToRecognize = "C:\\LEADTOOLS23\\Resources\\Images\\Forms\\Forms to be Recognized\\OCR\\W9_OCR_Filled.tif";
SetLicense();
InitFormsEngines();
RecognizeAndProcessForm(formToRecognize);
}
catch(Exception ex) {
System.err.println(ex.getMessage());
ex.printStackTrace();
}
finally {
if (autoEngine!=null)
autoEngine.dispose();
if (ocrEngine != null) {
ocrEngine.shutdown();
ocrEngine.dispose();
}
}
}
_Main
向名为 的类添加一个新方法InitFormsEngines()
。在方法内部调用此方法,run()
位于方法调用SetLicense()
下方,如上所示。将代码添加到InitFormsEngines()
方法中以初始化OcrEngine
、DiskMasterFormsRepository
和AutoFormsEngine
。
private void InitFormsEngines() {
try {
ocrEngine = OcrEngineManager.createEngine(OcrEngineType.LEAD);
ocrEngine.startup(new RasterCodecs(), new DocumentWriter(), null, null);
DiskMasterFormsRepository formsRepository = new DiskMasterFormsRepository(ocrEngine.getRasterCodecsInstance(),
"C:\\LEADTOOLS23\\Resources\\Images\\Forms\\MasterForm Sets\\OCR");
autoEngine = new AutoFormsEngine(formsRepository, ocrEngine, null);
System.out.println("Engines initialized successfully!");
} catch (Exception ex) {
System.err.println(ex.getMessage());
ex.printStackTrace();
}
}
在 _Main 类中创建一个名为 的新方法。在调用 下方的方法RecognizeAndProcessForm(String formToRecognize)
中调用此方法,并传入如上所示的字符串值。在本教程中,使用以下目录中的表单:run()
InitFormsEngines()
formToRecognizeC:\LEADTOOLS23\Resources\Images\Forms\Forms to be Recognized\OCR\W9_OCR_Filled.tif
将以下代码添加到RecognizeAndProcessForm()
方法中,以在给定文件路径内的表单上运行自动识别。
private void RecognizeAndProcessForm(String formToRecognize) {
try {
String resultMessage = "Form not recognized";
AutoFormsRunResult runResult = autoEngine.run(formToRecognize, null);
if (runResult != null) {
resultMessage = String.format("This form has been recognized as a %s with %d confidence.",
runResult.getRecognitionResult().getMasterForm().getName(),
runResult.getRecognitionResult().getResult().getConfidence());
}
System.out.println("Recognition results:");
System.out.println(resultMessage);
System.out.println("========================================================");
ShowProcessedResults(runResult);
} catch (Exception ex) {
System.err.println(ex.getMessage());
ex.printStackTrace();
}
}
_Main
向名为 的类添加一个新方法ShowProcessedResults(AutoFormsRunResult runResult)
。此方法将在方法底部调用RecognizeAndProcessForm()
,如上所示,并传入runResult
从类run()
内部方法收集的数据AutoFormsRunResult
。将以下代码添加到ShowProcessedResults()
方法中以处理表单并输出结果。
private void ShowProcessedResults(AutoFormsRunResult runResult) {
if (runResult == null)
return;
String resultsMessage = "";
try {
for (FormPage formPage : runResult.getFormFields()) {
for (FormField field : formPage) {
if (field != null) {
TextFormFieldResult textResult = (TextFormFieldResult) field.getResult();
resultsMessage = String.format("%s%s = %s%n",
resultsMessage,
field.getName(),
textResult.getText());
}
}
}
} catch (Exception ex) {
System.err.println(ex.getMessage());
ex.printStackTrace();
}
System.out.println("Field Processing Results");
System.out.println(resultsMessage!=null && !resultsMessage.isEmpty()
? resultsMessage
: "No fields were processed");
}
笔记
The functionality utilized for this tutorial is not supported in Java SE 11+. It is recommended to use Java SE 8 for this tutorial.
运行项目
通过按Ctrl + F11或选择Run -> Run来运行项目。
如果正确遵循这些步骤,应用程序将加载表单图像,从一组主表单中识别表单,并处理表单字段并将结果输出到控制台。
本教程展示了如何在 Java 应用程序中使用 LEADTOOLS 工具包将图像识别为特定表单,并从表单字段中提取文本。我们还介绍了如何使用OcrEngine
、AutoFormsEngine
、DiskMasterFormsRepository
、AutoFormsRunResult
、FormPage
和FormField
类。