Nicomsoft OCR: Developer's Guide


Engine_InitializeAdvanced


Syntax

C++:int Engine_InitializeAdvanced(HCFG* CfgObj, HOCR* OcrObj, HIMG* ImgObj)
C#:int Engine_InitializeAdvanced(out int CfgObj, out int OcrObj, out int ImgObj)
Visual Basic: Function Engine_InitializeAdvanced(ByRef CfgObj As Integer, ByRef OcrObj As Integer, ByRef ImgObj As Integer) As Integer
Java:int Engine_InitializeAdvanced(HCFG CfgObj, HOCR OcrObj, HIMG ImgObj)
Delphi: function Engine_InitializeAdvanced(out CfgObj:HCFG; out OcrObj:HOCR; out ImgObj:HIMG):integer


Description

Initializes the NSOCR engine, creates the CFG object, loads the configuration from the "Config.dat" file, and creates the OCR and IMG objects. You can call this function instead of Engine_Initialize before using any other NSOCR functions. Call this function only once; any subsequent calls without calling "Engine_Uninitialize" will be ignored.


Parameters

CfgObj [OUT] – the variable that will get the new CFG object.
OcrObj [OUT] – the variable that will get the new OCR object.
ImgObj [OUT] – the variable that will get the new IMG object.


Return value

Zero if success, otherwise an error code.


Remarks

1. This function is useful to reduce the initialization code. It only calls the following functions (with additional error checking):

      Engine_Initialize();
      Cfg_Create(&CfgObj);
      Cfg_LoadOptions(CfgObj, L"Config.dat");
      Ocr_Create(CfgObj, &OcrObj);
      Img_Create(OcrObj, &ImgObj);

2. For more details, see the OCR Objects section.
3. If you need to process multiple images, do not initalize/uninitialize NSOCR every time. Initialization takes some time, and processing of the first image takes more time than processing of any subsequent images. For the best performance, this function should be called only once while your application is running.


Example

The following code initializes the OCR engine, creates the OCR-related objects, and recognizes an image:

C++
int CfgObj, OcrObj, ImgObj, res, n;
wchar_t* txt;
Engine_InitializeAdvanced(&CfgObj, &OcrObj, &ImgObj); //initialize OCR engine, create objects and load configuration
res = Img_LoadFile(ImgObj, L"c:\\sample.bmp"); //load some image for OCR
if (res > ERROR_FIRST) {}; //insert error handler here
res = Img_OCR(ImgObj, OCRSTEP_FIRST, OCRSTEP_LAST, OCRFLAG_NONE); //perform OCR
if (res > ERROR_FIRST) {}; //insert error handler here
n = Img_GetImgText(ImgObj, NULL, 0, FMT_EXACTCOPY) + 1; //get buffer size plus terminating NULL character
txt = (wchar_t*) malloc(sizeof(wchar_t) * n); //allocate memory for text
Img_GetImgText(ImgObj, txt, n, FMT_EXACTCOPY); //get text
Engine_Uninitialize(); //release all created objects and uninitialize OCR engine
//use "txt" value now
free(txt); //free memory


C#
//assume reference to NSOCR COM was added
using NSOCR_NameSpace; //Add NSOCR namespace from "NSOCR.cs" file
//...
int CfgObj, OcrObj, ImgObj, res;
string txt;
NSOCRLib.NSOCRClass NsOCR = new NSOCRLib.NSOCRClass(); //create NSOCR COM object instance
NsOCR.Engine_InitializeAdvanced(out CfgObj, out OcrObj, out ImgObj); //initialize OCR engine, create objects and load configuration
res = NsOCR.Img_LoadFile(ImgObj, "c:\\sample.bmp"); //load some image for OCR
if (res > TNSOCR.ERROR_FIRST) {}; //insert error handler here
res = NsOCR.Img_OCR(ImgObj, TNSOCR.OCRSTEP_FIRST, TNSOCR.OCRSTEP_LAST, TNSOCR.OCRFLAG_NONE); //perform OCR
if (res > TNSOCR.ERROR_FIRST) {}; //insert error handler here
NsOCR.Img_GetImgText(ImgObj, out txt, TNSOCR.FMT_EXACTCOPY); //get text
NsOCR.Engine_Uninitialize(); //release all created objects and uninitialize OCR engine


VB.NET
'assume reference to NSOCR COM was added
'assume "NSOCR.vb" file was added to project
Dim CfgObj, OcrObj, ImgObj, res As Integer
Dim txt As String = ""
Dim NsOCR As New NSOCRLib.NSOCRClass 'create NSOCR COM object instance
NsOCR.Engine_InitializeAdvanced(CfgObj, OcrObj, ImgObj) 'initialize OCR engine, create objects and load configuration
res = NsOCR.Img_LoadFile(ImgObj, "c:\sample.bmp") 'load some image for OCR
If res > TNSOCR.ERROR_FIRST Then 'insert error handler here
End If
res = NsOCR.Img_OCR(ImgObj, TNSOCR.OCRSTEP_FIRST, TNSOCR.OCRSTEP_LAST, TNSOCR.OCRFLAG_NONE) 'perform OCR
If res > TNSOCR.ERROR_FIRST Then 'insert error handler here
End If
NsOCR.Img_GetImgText(ImgObj, txt, TNSOCR.FMT_EXACTCOPY) 'get text
NsOCR.Engine_Uninitialize() 'release all created objects and uninitialize OCR engine


Java
//assume NSOCR package was included
//Java VM option "-Djava.library.path" must point to "Bin" folder (x86 platform) or to "Bin_64" folder (x64 platform)
//...
NSOCR.HCFG CfgObj = new NSOCR.HCFG();
NSOCR.HOCR OcrObj = new NSOCR.HOCR();
NSOCR.HIMG ImgObj = new NSOCR.HIMG();
int res;
StringBuffer txt = new StringBuffer();
NSOCR.Engine.Engine_InitializeAdvanced(CfgObj, OcrObj, ImgObj); //initialize OCR engine, create objects and load configuration
res = NSOCR.Engine.Img_LoadFile(ImgObj, "c:\\sample.bmp"); //load some image for OCR
if (res > NSOCR.Error.ERROR_FIRST) {}; //insert error handler here
res = NSOCR.Engine.Img_OCR(ImgObj, NSOCR.Constant.OCRSTEP_FIRST, NSOCR.Constant.OCRSTEP_LAST, NSOCR.Constant.OCRFLAG_NONE); //perform OCR
if (res > NSOCR.Error.ERROR_FIRST) {}; //insert error handler here
NSOCR.Engine.Img_GetImgText(ImgObj, txt, NSOCR.Constant.FMT_EXACTCOPY); //get text
System.out.println(txt.toString());
NSOCR.Engine.Engine_Uninitialize(); //release all created objects and uninitialize OCR engine