ABBYY FlexiCapture integration module
ABBYY FlexiCapture integration module
What is FlexiCapture?
ABBYY FlexiCapture is an Intelligent Document Processing platform built for complex digital document processing. FlexiCapture brings together the best NLP, machine learning, and advanced OCR capabilities into a single, enterprise-scale platform to handle every type of document, from simple forms to complex free-form documents. This library available in EasyRPA nexus by:
<dependency> <groupId>eu.ibagroup</groupId> <artifactId>easy-rpa-flexicapture-client</artifactId> <version>1.1</version> </dependency>
Preconditions
- Installed and configured FlexiCapture server v.12 or newer
- To have valid license, including Verification and Scanning stations features
- FlexiLayout project should be created and deployed to the server. FlexiCapture users and developers materials can be found on the official ABBYY FlexiCapture tutorial resource https://help.abbyy.com/en-us/flexicapture/12/flexilayout_studio/tutorial_all
Module usage
Git repository location
https://git.icdc.io/easyrpa/easy-rpa-libs/easy-rpa-flexicapture-client
Maven
To include the module, use maven dependency:
<dependency> <groupId>eu.ibagroup</groupId> <artifactId>easy-rpa-flexicapture-client</artifactId> <version>1.0</version> </dependency>
Development steps
Below provided a list and sequence of methods that are required to implement attended data extraction scenario:
Service Initialization
FlexiCaptureService client = new FlexiCaptureService(String flexiCaptureBaseUrl, String username, String password);
Recognition task creation
SessionContainer createRecognitionTask(String fileName, InputStream stream, String projectName);
Get task completion percentage
int percentCompleted = getTaskStatus(@NotNull SessionContainer recognitionTaskData)
Get list of documents that need verification
List<String> getVerificationQueue(SessionContainer recognitionTaskData)
Build task verification link
{FlexiCaptureServerUrl}/FlexiCapture12/Verification/Verify?taskId={taskId}
Get recognition results
ExtractResultsContainer getBatchExtractResult(SessionContainer recognitionTaskData)
Usage Examples
Synchronous call
public void runAttendedScenario() throws Exception{ String fileNameWithExtension = "ES_Manzana.tif"; String invoiceDemoProject = "MultipageInvoiceProject"; String username = "Administrator"; String password = "password"; FlexiCaptureService client = new FlexiCaptureService("http://10.224.32.19", username, password); InputStream fileStream = this.getClass().getResourceAsStream(fileNameWithExtension); String fileName = FilenameUtils.getName(fileNameWithExtension); SessionContainer task = client.createRecognitionTask(fileName, fileStream, invoiceDemoProject); int percentCompleted = 0; while (percentCompleted < 100){ percentCompleted = client.getTaskStatus(task); logger.info("processed " + percentCompleted + "%"); if(percentCompleted < 100){ if(client.getVerificationQueue(task).size() > 0){ logger.warn("Manual verification required: " + client.getVerificationUrl() + task.getTaskId()); } Thread.sleep(5000); } } ExtractResultsContainer extractResults = client.getBatchExtractResult(task); List<File> savedFiles = CommonUtils.storeToDir(extractResults); logger.info("Recognition results:"); for(File savedFile : savedFiles){ logger.info(savedFile); } }
Asynchronous call
public class FlexiCaptureEventListenerImpl implements FlexiCaptureEventListner { private static final Logger logger = Logger.getLogger(FlexiCaptureEventListenerImpl.class); @Override public void onSuccess(ExtractResultsContainer extractResults, SessionContainer task) throws Exception { List<File> savedFiles = CommonUtils.storeToDir(extractResults); savedFiles.forEach(file -> logger.info(file)); } @Override public void onError(Exception e) { logger.error("Document recognition error: ", e); } @Override public void onValidationRequired(String verificationUrl, SessionContainer task) { System.out.println("Manual verification required: " + verificationUrl + task.getTaskId()); } } public class FlexiCaptureAsyncRunner { public static void main(String[] args) throws UserNotFoundException, ServerFault, MalformedURLException { String fileNameWithExtension = "/ES_Manzana.tif"; String invoiceDemoProject = "InvoiceDemoProject"; String username = "Administrator"; String password = "Start123"; InputStream fileStream = FlexiCaptureAsyncRunner.class.getResourceAsStream(fileNameWithExtension); FlexiCaptureEventListner listener = new FlexiCaptureEventListenerImpl(); FlexiCaptureService client = new FlexiCaptureService("http://10.224.32.19", username, password); String fileName = FilenameUtils.getName(fileNameWithExtension); client.createAsyncRecognitionTask(fileName, fileStream, invoiceDemoProject, listener); } }