Skip to main content

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)
{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);

	}
}