#include "ltocr.h"
L_LTOCR_API L_INT EXT_FUNCTION L_OcrEngine_GetAutoRecognizeManager(engine, autoRecognizeManager)
Returns a handle to the OCR auto recognize manager.
Handle to the OCR engine.
Pointer to L_OcrAutoRecognizeManager handle to be updated.
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
This function returns a handle to the OCR engine auto recognize manager that allow you to do one shot "fire and forget" OCR operations.
The L_OcrAutoRecognizeManager provides methods to convert a single or multipage image file to an OCR'ed document using one call. This could be desired when the default setting of the engine provides the required final document and no fine tuning is required.
The L_OcrAutoRecognizeManager also provide support for callbacks to monitor the various OCR operations, logging and tracing as well as allowing the user to abort at any time.
Required DLLs and Libraries
static void LogMessage(const wchar_t* message, ...)
{
const unsigned int bufferSize = 1024 * 4;
wchar_t buffer[bufferSize];
if(message != NULL)
{
va_list ap;
va_start(ap, message);
vswprintf_s(buffer, message, ap);
va_end(ap);
}
else
{
wcscpy_s(buffer, L"");
}
_tprintf(buffer);
}
static L_VOID EXT_CALLBACK MyAutoRecognizeTraceWriteLineCallback(L_OcrAutoRecognizeJob job, L_OcrTraceCategory category, const L_TCHAR* message, L_VOID* /*userData*/)
{
static const L_TCHAR* categoryNames[] =
{
L_TEXT("Info"),
L_TEXT("Warning"),
L_TEXT("Error")
};
L_OcrAutoRecognizeJobData jobData = {0};
jobData.StructSize = sizeof(L_OcrAutoRecognizeJobData);
L_OcrAutoRecognizeJob_GetJobData(job, &jobData);
LogMessage(L"Job:%s %s Thread:0x%08X - %s\n", jobData.JobName, categoryNames[category], GetCurrentThreadId(), message);
}
L_INT L_OcrEngine_GetAutoRecognizeManagerExample()
{
//Files to process
L_TCHAR *imageFiles[] = {MAKE_IMAGE_PATH(L_TEXT("OCR1.tif")),
MAKE_IMAGE_PATH(L_TEXT("OCR2.tif")),
MAKE_IMAGE_PATH(L_TEXT("OCR3.tif")),
MAKE_IMAGE_PATH(L_TEXT("OCR4.tif"))};
// Output files
L_TCHAR *documentFiles[] = {MAKE_IMAGE_PATH(L_TEXT("OCR1.pdf")),
MAKE_IMAGE_PATH(L_TEXT("OCR2.pdf")),
MAKE_IMAGE_PATH(L_TEXT("OCR3.pdf")),
MAKE_IMAGE_PATH(L_TEXT("OCR4.pdf"))};
L_INT retCode = -1;
L_OcrEngine ocrEngine = NULL;
L_OcrAutoRecognizeManager autoRecognizeManager = NULL;
L_OcrAutoRecognizeManagerOptions autoRecognizeOptions = { 0 };
L_OcrDocumentManager ocrDocumentManager = NULL;
std::cout << "Creating an instance of the engine...\n";
// Create an instance of the engine
retCode = L_OcrEngineManager_CreateEngine(L_OcrEngineType_Advantage, &ocrEngine);
if(retCode != SUCCESS)
return retCode;
// Start the engine using default parameters
std::cout << "Starting up the engine...\n";
L_OcrEngine_Startup(ocrEngine, NULL, OCR_ADVANTAGE_RUNTIME_DIR);
// Get the AutoRecognizeManager
L_OcrEngine_GetAutoRecognizeManager(ocrEngine, &autoRecognizeManager);
// Set the options we want
autoRecognizeOptions.StructSize = sizeof(L_OcrAutoRecognizeManagerOptions);
L_OcrAutoRecognizeManager_GetOptions(autoRecognizeManager, &autoRecognizeOptions);
// Use maximum CPUs/cores of current machine to speed up recognition
autoRecognizeOptions.UseThreads = true;
// Deskew and auto-orient all pages before recognition
autoRecognizeOptions.PreprocessPageCommands = L_OcrAutoPreprocessPageCommands_Deskew | L_OcrAutoPreprocessPageCommands_Rotate;
// Enable the Trace Callback
autoRecognizeOptions.TraceCallback = MyAutoRecognizeTraceWriteLineCallback;
// Give the manager our updated settings
L_OcrAutoRecognizeManager_SetOptions(autoRecognizeManager, &autoRecognizeOptions);
// Create PDFs with Image/Text option
L_OcrEngine_GetDocumentManager(ocrEngine, &ocrDocumentManager);
DOCWRTPDFOPTIONS pdfOptions;
pdfOptions.Options.uStructSize = sizeof(DOCWRTPDFOPTIONS);
L_OcrDocumentManager_GetFormatOptions(ocrDocumentManager, DOCUMENTFORMAT_PDF, &pdfOptions.Options);
// Set the specific PDF options we want
pdfOptions.bImageOverText = true;
pdfOptions.PdfProfile = DOCWRTPDFPROFILE_PDF;
// Give the engine our updated PDF options
L_OcrDocumentManager_SetFormatOptions(ocrDocumentManager, DOCUMENTFORMAT_PDF, &pdfOptions.Options);
// Loop through all the TIF files & convert to PDF
for(int index=0; index < _countof(imageFiles); index++)
{
// OCR each file
std::wcout << L"Processing " << imageFiles[index] << std::endl;
L_OcrAutoRecognizeManager_Run(autoRecognizeManager, imageFiles[index], documentFiles[index], DOCUMENTFORMAT_PDF, NULL);
std::wcout << "Saved: " << documentFiles[index] << std::endl;
}
//CLEANUP
L_OcrEngine_Destroy(ocrEngine);
return SUCCESS;
}