.NET에서 텍스트 문서 이미지의 방향 감지

블로그 카테고리: 이미징.NET

2022/02/03

VintaSoft Imaging .NET SDKVintaSoft Document Cleanup .NET Plug-in은 문서 이미지 처리 및 정리를 위한 명령을 제공합니다.
GetTextOrientationCommand 명령의 목적은 90도, 180도 또는 270도로 회전된 라틴어 텍스트가 포함된 이미지의 방향을 감지하는 것입니다.
GetTextOrientationCommand는 다음과 같은 이미지 처리에 적합하지 않습니다.


VintaSoft Imaging .NET SDKVintaSoft OCR .NET Plug-in은 Tesseract OCR 엔진을 사용하여 문서 이미지의 방향을 감지하는 GetTesseractOcrTextOrientationCommand 명령을 제공합니다. GetTesseractOcrTextOrientationCommand 명령은 텍스트가 포함된 모든 이미지의 방향을 감지할 수 있습니다( GetTextOrientationCommand 명령과 같은 제한 사항이 없습니다). GetTesseractOcrTextOrientationCommand 명령은 GetTextOrientationCommand 명령보다 최대 5배 느리게 작동합니다.


위에 명시된 내용을 바탕으로 입력 문서 이미지 유형에 따라 GetTextOrientationCommand 명령 또는 GetTesseractOcrTextOrientationCommand 명령을 사용해야 합니다.

두 명령어를 함께 사용할 수도 있습니다. 구체적으로:

두 명령어를 함께 사용하면 문서 이미지 방향 감지의 효율성과 품질을 극대화할 수 있습니다.


다음은 GetTextOrientationCommand 명령을 사용하여 문서 이미지의 방향을 감지하는 방법을 보여주는 C# 코드입니다.
/// <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();
    }
}


다음은 GetTesseractOcrTextOrientationCommand 명령을 사용하여 문서 이미지의 방향을 감지하는 방법을 보여주는 C# 코드입니다.
/// <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();
    }
}


다음은 GetTextOrientationCommand 명령과 GetTesseractOcrTextOrientationCommand 명령을 사용하여 문서 이미지의 방향을 감지하는 방법을 보여주는 C# 코드입니다.
/// <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();
    }
}