Detectar la orientación de la imagen del documento de texto en .NET

Categoría del blog: Imaging.NET

03.02.2022

VintaSoft Imaging .NET SDK y el VintaSoft Document Cleanup .NET Plug-in proporcionan comandos para procesar y limpiar imágenes de documentos.
El propósito del comando GetTextOrientationCommand es detectar la orientación de las imágenes que contienen texto en latín rotado 90, 180 o 270 grados.
GetTextOrientationCommand no es adecuado para el procesamiento de:


VintaSoft Imaging .NET SDK y el VintaSoft OCR .NET Plug-in proporcionan el comando GetTesseractOcrTextOrientationCommand, cuyo propósito es detectar la orientación de la imagen del documento mediante el motor de OCR Tesseract. El comando GetTesseractOcrTextOrientationCommand puede detectar la orientación de cualquier imagen con texto (no tiene limitaciones como el comando GetTextOrientationCommand), pero el comando GetTesseractOcrTextOrientationCommand funciona hasta 5 veces más lento que el comando GetTextOrientationCommand.


De acuerdo con lo anterior, es necesario usar el comando GetTextOrientationCommand o el comando GetTesseractOcrTextOrientationCommand dependiendo de Tipo de imágenes del documento de entrada.

También es posible usar ambos comandos juntos, específicamente:

El uso combinado de ambos comandos permite obtener la máxima eficiencia y calidad en la detección de la orientación de la imagen del documento.


Aquí se muestra el código de C#, que demuestra cómo detectar la orientación de la imagen del documento mediante el comando GetTextOrientationCommand:
/// <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();
    }
}


Aquí se muestra el código de C#, que demuestra cómo detectar la orientación de la imagen del documento mediante el comando GetTesseractOcrTextOrientationCommand:
/// <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();
    }
}


Aquí se muestra el código de C#,que demuestra cómo detectar la orientación de la imagen del documento mediante los comandos GetTextOrientationCommand y GetTesseractOcrTextOrientationCommand:
/// <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();
    }
}