ImageEn, unit iexHelperFunctions

TIEBitmapHelper.OCR_GetOrientation

TIEBitmapHelper.OCR_GetOrientation

Declaration

function OCR_GetOrientation(Language: TIEOCRLanguages = OCR_English_Language; const LanguagePath: string = ''; Engine: TIEVisionOCREngine = ievOCRDefault): Double; overload;
function OCR_GetOrientation(const LanguageCode: string; const LanguagePath: string = ''; Engine: TIEVisionOCREngine = ievOCRDefault): Double; overload;

Description

A shortcut method that creates a TIEVisionOCR object and calls getTextAngle and getOrientation to accurately calculate the text angle of a document.
The language can be specified by type or as a language code string (e.g. 'eng').
You can call Rotate with the -1 * result to correctly rotate the image.


Note:
◼You must add the iexHelperFunctions unit to your uses clause
◼Delphi/C++ 2005 or newer is required to use helper classes
◼LanguagePath and Engine cannot be changed after first use (without restarting the application)
◼You will require a TrainedData file for the specified language (e.g. "eng.TrainedData") and the orientation file "osd.TrainedData". An exception is raised if either is not found
◼OCR requires IEVision. You will need to register it before calling the method

Method Behavior

The following call:
deskewAngle := ImageEnView1.IEBitmap.OCR_GetOrientation();
if deskewAngle <> 0 then
  ImageEnView1.Proc.Rotate( -deskewAngle, ierFast, clWhite );

Is the same as calling:
// Create OCR object
mOCR := IEVisionLib.createOCR( PAnsiChar( AnsiString( '' )), PAnsiChar( AnsiString( IEOCRLanguageList[langCode].Code )), ievOCRDefault );

// Set page layout
mOCR.setSegmentationMode( ievOCRAuto_OSD );

// Calculate Orientation and text angle
mOCR.getTextAngle( ImageEnView1.IEBitmap.GetIEVisionImage() );
mOCR.getOrientation( orientation, writingDirection, textlineOrder, deskewAngle );

// Calculate optimal rotation angle
deskewAngle := -deskewAngle * 180 / PI;
if orientation = ievOCROrientPAGE_RIGHT then
  deskewAngle := deskewAngle - 90
else
if orientation = ievOCROrientPAGE_DOWN then
  deskewAngle := deskewAngle - 180
else
if orientation = ievOCROrientPAGE_LEFT then
  deskewAngle := deskewAngle - 270;

if deskewAngle <> 0 then
  ImageEnView1.Proc.Rotate( -deskewAngle, ierFast, clWhite );

Demo

Demo  Demos\ImageEditing\EveryMethod\EveryMethod.dpr

Example

// Auto-fix the orientation and skew of the image
ShowTempHourglass();
deskewAngle := ImageEnView1.IEBitmap.OCR_GetOrientation();
if deskewAngle <> 0 then
  ImageEnView1.Proc.Rotate( -deskewAngle, ierFast, clWhite );

For the following image, the returned value would be -92.94°:

See Also

◼TIEOCRLanguages