Image processing: How to detect orientation of document image?
In This Topic
VintaSoft Imaging .NET SDK and
VintaSoft Document Cleanup .NET Plug-in provide commands for processing and cleanup images of documents.
The
GetTextOrientationCommand command purpose is to detect orientation of images, which contain Latin text rotated on 90, 180 or 270 degrees.
GetTextOrientationCommand is not suitable for processing of:
- images, which do not contain text
- images, which contain non-Latin text
- images, which contain Latin text with capital letters only
- images, which are rotated on angle different from 0, 90, 180 or 270 degrees (use DeskewCommand command to deskew the image before detection of its orientation)
- images, which contain just few words (this is not enough to make a decision about image orientation)
VintaSoft Imaging .NET SDK and
VintaSoft OCR .NET Plug-in provide
GetTesseractOcrTextOrientationCommand command, which purpose is to detect orientation of document image using Tesseract OCR engine. The
GetTesseractOcrTextOrientationCommand command can detect orientation of any image with text (does not have limitations like
GetTextOrientationCommand command), but
GetTesseractOcrTextOrientationCommand command works up to 5 times slower than
GetTextOrientationCommand command.
Based on the stated above it is necessary to use
GetTextOrientationCommand command or
GetTesseractOcrTextOrientationCommand command depending on type of input document images.
Also it is possible to use both commands together, specifically:
Combined use of both commands allows to get the maximum efficiency and quality of document image orientation detection.
Here is example that demonstrates how to detect orientation of document image using
GetTextOrientationCommand command:
/// <summary>
/// Returns an orientation angle of document image using statistics for Latin symbols.
/// </summary>
/// <param name="filename">The path to a file with document image.</param>
public static void GetDocumentImageOrientationUsingLatinSymbolStat(string filename)
{
// create an image collection
using (Vintasoft.Imaging.ImageCollection images = new Vintasoft.Imaging.ImageCollection())
{
// add images from file to the image collection
images.Add(filename);
// create an instance of GetTextOrientationCommand class
Vintasoft.Imaging.ImageProcessing.Info.GetTextOrientationCommand getTextOrientationCommand1 =
new Vintasoft.Imaging.ImageProcessing.Info.GetTextOrientationCommand();
// for each image in image collection
for (int i = 0; i < images.Count; i++)
{
// get image
Vintasoft.Imaging.VintasoftImage image = images[i];
// determine orientation of document image using statistics for Latin symbols
getTextOrientationCommand1.ExecuteInPlace(image);
// write result to the console
System.Console.WriteLine(string.Format("Filename: {0}, page: {1}, page orientation: {2}, confidence: {3}",
System.IO.Path.GetFileName(filename),
i,
getTextOrientationCommand1.Orientation,
getTextOrientationCommand1.Confidence));
}
// free images
images.ClearAndDisposeItems();
}
}
''' <summary>
''' Returns an orientation angle of document image using statistics for Latin symbols.
''' </summary>
''' <param name="filename">The path to a file with document image.</param>
Public Shared Sub GetDocumentImageOrientationUsingLatinSymbolStat(filename As String)
' create an image collection
Using images As New Vintasoft.Imaging.ImageCollection()
' add images from file to the image collection
images.Add(filename)
' create an instance of GetTextOrientationCommand class
Dim getTextOrientationCommand1 As New Vintasoft.Imaging.ImageProcessing.Info.GetTextOrientationCommand()
' for each image in image collection
For i As Integer = 0 To images.Count - 1
' get image
Dim image As Vintasoft.Imaging.VintasoftImage = images(i)
' determine orientation of document image using statistics for Latin symbols
getTextOrientationCommand1.ExecuteInPlace(image)
' write result to the console
System.Console.WriteLine(String.Format("Filename: {0}, page: {1}, page orientation: {2}, confidence: {3}", System.IO.Path.GetFileName(filename), i, getTextOrientationCommand1.Orientation, getTextOrientationCommand1.Confidence))
Next
' free images
images.ClearAndDisposeItems()
End Using
End Sub
Here is example that demonstrates how to detect orientation of document image using
GetTesseractOcrTextOrientationCommand command:
/// <summary>
/// Returns an orientation angle of document image using Tesseract OCR.
/// </summary>
/// <param name="filename">The path to a file with document image.</param>
/// <param name="tesseractOcrDllDirectory">A path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located.</param>
public static void GetDocumentImageOrientationUsingTesseractOCR(string filename, string tesseractOcrDllDirectory)
{
// create an image collection
using (Vintasoft.Imaging.ImageCollection images = new Vintasoft.Imaging.ImageCollection())
{
// add images from file to the image collection
images.Add(filename);
// create an instance of GetTesseractOcrTextOrientationCommand class
using (Vintasoft.Imaging.ImageProcessing.Ocr.Tesseract.GetTesseractOcrTextOrientationCommand getTextOrientationCommand =
new Vintasoft.Imaging.ImageProcessing.Ocr.Tesseract.GetTesseractOcrTextOrientationCommand())
{
// specify path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located
getTextOrientationCommand.TesseractOcrDllDirectory = tesseractOcrDllDirectory;
// for each image in image collection
for (int i = 0; i < images.Count; i++)
{
// get image
Vintasoft.Imaging.VintasoftImage image = images[i];
// determine orientation of document image using Tesseract OCR
getTextOrientationCommand.ExecuteInPlace(image);
// write result to the console
System.Console.WriteLine(string.Format("Filename: {0}, page: {1}, page orientation: {2}",
System.IO.Path.GetFileName(filename),
i,
getTextOrientationCommand.Orientation));
}
}
// free images
images.ClearAndDisposeItems();
}
}
''' <summary>
''' Returns an orientation angle of document image using Tesseract OCR.
''' </summary>
''' <param name="filename">The path to a file with document image.</param>
''' <param name="tesseractOcrDllDirectory">A path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located.</param>
Public Shared Sub GetDocumentImageOrientationUsingTesseractOCR(filename As String, tesseractOcrDllDirectory As String)
' create an image collection
Using images As New Vintasoft.Imaging.ImageCollection()
' add images from file to the image collection
images.Add(filename)
' create an instance of GetTesseractOcrTextOrientationCommand class
Using getTextOrientationCommand As New Vintasoft.Imaging.ImageProcessing.Ocr.Tesseract.GetTesseractOcrTextOrientationCommand()
' specify path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located
getTextOrientationCommand.TesseractOcrDllDirectory = tesseractOcrDllDirectory
' for each image in image collection
For i As Integer = 0 To images.Count - 1
' get image
Dim image As Vintasoft.Imaging.VintasoftImage = images(i)
' determine orientation of document image using Tesseract OCR
getTextOrientationCommand.ExecuteInPlace(image)
' write result to the console
System.Console.WriteLine(String.Format("Filename: {0}, page: {1}, page orientation: {2}", System.IO.Path.GetFileName(filename), i, getTextOrientationCommand.Orientation))
Next
End Using
' free images
images.ClearAndDisposeItems()
End Using
End Sub
Here is example that demonstrates how to detect orientation of document image using
GetTextOrientationCommand command and
GetTesseractOcrTextOrientationCommand command:
/// <summary>
/// Returns an orientation angle of document image using statistics for Latin symbols and using Tesseract OCR.
/// </summary>
/// <param name="filename">The path to a file with document image.</param>
/// <param name="tesseractOcrDllDirectory">A path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located.</param>
public static void GetDocumentImageOrientationUsingLatinSymbolStatAndOcrTesseract(string filename, string tesseractOcrDllDirectory)
{
// create an image collection
using (Vintasoft.Imaging.ImageCollection images = new Vintasoft.Imaging.ImageCollection())
{
// add images from file to the image collection
images.Add(filename);
// create an instance of GetTextOrientationCommand class
Vintasoft.Imaging.ImageProcessing.Info.GetTextOrientationCommand getTextOrientationCommand1 =
new Vintasoft.Imaging.ImageProcessing.Info.GetTextOrientationCommand();
// create an instance of GetTesseractOcrTextOrientationCommand class
using (Vintasoft.Imaging.ImageProcessing.Ocr.Tesseract.GetTesseractOcrTextOrientationCommand getTextOrientationCommand2 =
new Vintasoft.Imaging.ImageProcessing.Ocr.Tesseract.GetTesseractOcrTextOrientationCommand())
{
// specify path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located
getTextOrientationCommand2.TesseractOcrDllDirectory = tesseractOcrDllDirectory;
// for each image in image collection
for (int i = 0; i < images.Count; i++)
{
// get image
Vintasoft.Imaging.VintasoftImage image = images[i];
// determine orientation of document image using statistics for Latin symbols (works for Latin text only)
getTextOrientationCommand1.ExecuteInPlace(image);
// if orientation is detected and orientation result has high confidence
if (getTextOrientationCommand1.Orientation != Vintasoft.Imaging.ImageProcessing.Info.ImageOrthogonalOrientation.Undefined &&
getTextOrientationCommand1.Confidence > 0.3)
{
// write result to the console
System.Console.WriteLine(string.Format("Filename: {0}, page: {1}, page orientation: {2}, confidence: {3}",
System.IO.Path.GetFileName(filename),
i,
getTextOrientationCommand1.Orientation,
getTextOrientationCommand1.Confidence));
}
// if orientation is not detected or orientation result has low confidence
else
{
// determine orientation of document image using Tesseract OCR (works for any text)
getTextOrientationCommand2.ExecuteInPlace(image);
// write result to the console
System.Console.WriteLine(string.Format("Filename: {0}, page: {1}, page orientation: {2}, confidence: {3}",
System.IO.Path.GetFileName(filename),
i,
getTextOrientationCommand2.Orientation,
getTextOrientationCommand2.Confidence));
}
}
}
// free images
images.ClearAndDisposeItems();
}
}
''' <summary>
''' Returns an orientation angle of document image using statistics for Latin symbols and using Tesseract OCR.
''' </summary>
''' <param name="filename">The path to a file with document image.</param>
''' <param name="tesseractOcrDllDirectory">A path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located.</param>
Public Shared Sub GetDocumentImageOrientationUsingLatinSymbolStatAndOcrTesseract(filename As String, tesseractOcrDllDirectory As String)
' create an image collection
Using images As New Vintasoft.Imaging.ImageCollection()
' add images from file to the image collection
images.Add(filename)
' create an instance of GetTextOrientationCommand class
Dim getTextOrientationCommand1 As New Vintasoft.Imaging.ImageProcessing.Info.GetTextOrientationCommand()
' create an instance of GetTesseractOcrTextOrientationCommand class
Using getTextOrientationCommand2 As New Vintasoft.Imaging.ImageProcessing.Ocr.Tesseract.GetTesseractOcrTextOrientationCommand()
' specify path to a directory, where Tesseract5.Vintasoft.xXX.dll files are located
getTextOrientationCommand2.TesseractOcrDllDirectory = tesseractOcrDllDirectory
' for each image in image collection
For i As Integer = 0 To images.Count - 1
' get image
Dim image As Vintasoft.Imaging.VintasoftImage = images(i)
' determine orientation of document image using statistics for Latin symbols (works for Latin text only)
getTextOrientationCommand1.ExecuteInPlace(image)
' if orientation is detected and orientation result has high confidence
If getTextOrientationCommand1.Orientation <> Vintasoft.Imaging.ImageProcessing.Info.ImageOrthogonalOrientation.Undefined AndAlso getTextOrientationCommand1.Confidence > 0.3 Then
' write result to the console
System.Console.WriteLine(String.Format("Filename: {0}, page: {1}, page orientation: {2}, confidence: {3}", System.IO.Path.GetFileName(filename), i, getTextOrientationCommand1.Orientation, getTextOrientationCommand1.Confidence))
Else
' if orientation is not detected or orientation result has low confidence
' determine orientation of document image using Tesseract OCR (works for any text)
getTextOrientationCommand2.ExecuteInPlace(image)
' write result to the console
System.Console.WriteLine(String.Format("Filename: {0}, page: {1}, page orientation: {2}, confidence: {3}", System.IO.Path.GetFileName(filename), i, getTextOrientationCommand2.Orientation, getTextOrientationCommand2.Confidence))
End If
Next
End Using
' free images
images.ClearAndDisposeItems()
End Using
End Sub