Application Program Performance Considerations

Image quality analysis metrics used by Image Quality Analysis are quite calculation intensive. The analysis metrics and the ability to process large quantities of documents requires the high performance capability in Image Compliance. This capability is fulfilled by allowing for processing multiple jobs in parallel. This section describes what can be done in the application program to take advantage of this capability.

When writing an application program to use the Image Compliance API, organize the documents to analyze into multiple groups with meaningful categorization, for example by credit letter. The larger the number of groups, within reasonable limits, the better. For each group, create a thread of execution and analyze the group in a separate job. The one job for every thread organization allows the work to be done in parallel and takes advantage of the multiprocessing capabilities of the workstation running the application. It also groups the results for the documents into summaries (from the endJob() function call), which have a meaningful relationship.

Avoid splitting the job function calls across multiple threads. For example, do not make all startJob() calls on one thread, all analyze() or analyzeWithCodeLine() calls on another, and all endJob() calls on a third. Image Compliance is not designed to synchronize jobs across threads. Splitting jobs causes synchronization overhead for the application program or execution collisions for Image Quality Analysis. Execution collisions result in error return codes from the Image Quality Analysis interface if, for example, an endJob() is received while an analyze() or analyzeWithCodeLine() is still executing. In this situation, the application program has to handle the error return codes and retry. In either case, the result is, at a minimum, reduced performance.

When writing an application program do not use the analyzeWithCodeLine() function call unless codeline matching is required. There is overhead involved with image recognition in preparation for the matching function. The analyze() function call should be used if no fields are required to be matched, in order to improve performance.