Ճանաչել պատկերի տեքստը՝ օգտագործելով Linux-ի .NET ծրագիրը

Բլոգի կատեգորիա՝ ՊատկերավորումOCR ; .NETLinux

23.12.2022

Այս հոդվածը բացատրում է, թե ինչպես ստեղծել կոնսոլային .NET հավելված և ճանաչել պատկերներից տեքստը Ubuntu-ում: Պատկերներից տեքստը ճանաչելու համար օգտագործվում են VintaSoft Imaging .NET SDK-ն և դրա PDF, OCR և փաստաթղթերի մաքրման հավելվածները:

Ահա այդ առաջադրանքը կատարելու քայլերը.
  1. Բացեք Ubuntu աշխատասեղանը:

  2. Ստեղծել թղթապանակ, որը կպահի .NET ծրագրի ֆայլերը: Եկեք ստեղծենք "Recognize_Text_In_Image" թղթապանակը ընթացիկ օգտատիրոջ աշխատասեղանին և անցնենք այդ թղթապանակին:


  3. Բացեք կոնսոլային հրամանների տերմինալը: Դա կարելի է անել՝ ընտրելով "Բացել տերմինալում" կետը համատեքստային ցանկում կամ սեղմելով Ctrl+Alt+T ստեղների համադրությունը:


  4. Կանչեք հրամանը տերմինալում, որը կստեղծի նոր կոնսոլային .NET ծրագրի նախագիծ՝
    dotnet new console --framework net6.0
    



    Ստեղծված նախագիծը պարունակում է "Recognize_Text_In_Image.csproj" նախագծի ֆայլերը և "Program.cs" ֆայլը, որը պարունակում է ծրագրի C# կոդը: Փակել տերմինալը:

  5. Բացեք "Recognize_Text_In_Image.csproj" նախագծի ֆայլը տեքստային խմբագրիչում և փոխեք ֆայլի տեքստը հետևյալ տեքստի՝
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <RootNamespace>ConsoleApp1</RootNamespace>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="SkiaSharp" Version="2.88.0" />
        <PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.0" />
        <PackageReference Include="Vintasoft.Imaging" Version="12.1.5.1" />
        <PackageReference Include="Vintasoft.Imaging.Drawing.SkiaSharp" Version="12.1.5.1" />
        <PackageReference Include="Vintasoft.Imaging.DocCleanup" Version="7.1.5.1" />
        <PackageReference Include="Vintasoft.Imaging.Ocr" Version="7.1.5.1" />
        <PackageReference Include="Vintasoft.Imaging.Ocr.Tesseract" Version="7.1.5.1" />
        <PackageReference Include="Vintasoft.Imaging.Pdf" Version="9.1.5.1" />
        <PackageReference Include="Vintasoft.Imaging.Pdf.Ocr" Version="9.1.5.1" />
        <PackageReference Include="Vintasoft.Shared" Version="3.3.1.1" />
      </ItemGroup>
    
      <ItemGroup>
        <Content Include="OCR.tif">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
      </ItemGroup>
    
    </Project>
    



    Փոփոխված նախագծի nuget-փաթեթների հղումները VintaSoft Imaging .NET SDK (Vintasoft.Shared.dll, Vintasoft.Imaging.dll, Vintasoft.Imaging.Drawing.SkiaSharp.dll), VintaSoft Document Cleanup .NET Plug-in (Vintasoft.Imaging.DocCleanup.dll), VintaSoft OCR .NET Plug-in (Vintasoft.Imaging.Ocr.dll, Vintasoft.Imaging.Ocr.Tesseract.dll) և VintaSoft PDF .NET Plug-in (Vintasoft.Imaging.Pdf, Vintasoft.Imaging.Pdf.Ocr) համար։

  6. Բացեք "Program.cs" ֆայլը և փոխեք դրա կոդը հետևյալ C# կոդով՝
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Vintasoft.Imaging.ImagingGlobalSettings.Register("%EVAL_LIC_USER_NAME%", "%EVAL_LIC_USER_EMAIL%", "%EVAL_LIC_DATE%", "%EVAL_LIC_REG_CODE%");
    
                string imageFilePath = "OCR.tif";
    
                string tesseractOcrPath = "TesseractOCR";
                // create the OCR engine
                using (Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr tesseractOcr = new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr(tesseractOcrPath))
                {
                    // specify that OCR engine will recognize English text
                    Vintasoft.Imaging.Ocr.OcrLanguage language = Vintasoft.Imaging.Ocr.OcrLanguage.English;
                    // create the OCR engine settings
                    Vintasoft.Imaging.Ocr.Tesseract.TesseractOcrSettings settings = new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcrSettings(language);
                    // initialize the OCR engine
                    tesseractOcr.Init(settings);
    
                    // load an image with text
                    using (Vintasoft.Imaging.VintasoftImage image = new Vintasoft.Imaging.VintasoftImage(imageFilePath))
                    {
                        // preprocess image before text recognition
    
                        // remove noise from image
                        Vintasoft.Imaging.ImageProcessing.Document.DespeckleCommand despeckleCommand = new Vintasoft.Imaging.ImageProcessing.Document.DespeckleCommand();
                        despeckleCommand.ExecuteInPlace(image);
                        // remove lines from image
                        Vintasoft.Imaging.ImageProcessing.Document.LineRemovalCommand lineRemovalCommand = new Vintasoft.Imaging.ImageProcessing.Document.LineRemovalCommand();
                        lineRemovalCommand.ExecuteInPlace(image);
    
                        // specify an image with text
                        tesseractOcr.SetImage(image);
    
                        // recognize text in image
                        Vintasoft.Imaging.Ocr.Results.OcrPage ocrResult = tesseractOcr.Recognize();
    
                        // create PDF document
                        using (Vintasoft.Imaging.Pdf.PdfDocument pdfDocument = new Vintasoft.Imaging.Pdf.PdfDocument("OCR.pdf", Vintasoft.Imaging.Pdf.PdfFormat.Pdf_14))
                        {
                            // create PDF document builder
                            Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder documentBuilder = new Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder(pdfDocument);
                            documentBuilder.ImageCompression = Vintasoft.Imaging.Pdf.PdfCompression.Auto;
                            documentBuilder.PageCreationMode = Vintasoft.Imaging.Pdf.Ocr.PdfPageCreationMode.ImageOverText;
    
                            // add OCR result to the PDF document
                            documentBuilder.AddPage(image, ocrResult);
    
                            // save changes in PDF document
                            pdfDocument.SaveChanges();
                        }
    
                        // clear the image
                        tesseractOcr.ClearImage();
                    }
                    // shutdown the OCR engine
                    tesseractOcr.Shutdown();
                }
            }
        }
    }
    



    Ծրագրի կոդը կճանաչի տեքստը պատկերից և կպահպանի արդյունքը որոնելի PDF փաստաթղթում։

  7. Ստացեք կոդը Linux-ում գնահատման տարբերակն օգտագործելու համար՝ օգտագործելով փաստաթղթերում նկարագրված եղանակը և տեղադրեք ստացված կոդը "Program.cs" ֆայլի C# կոդի մեջ։


  8. Պատճենել "OCR."tif" ֆայլը նախագծի թղթապանակում։


    "OCR.tif" ֆայլի փոխարեն կարող եք օգտագործել փաստաթղթի պատկեր պարունակող ցանկացած այլ ֆայլ։

  9. Բացեք տերմինալը և կոմպիլացրեք .NET նախագիծը՝ օգտագործելով հետևյալ հրամանը՝
    dotnet build Recognize_Text_In_Image.csproj
    



    Փակեք տերմինալը։

  10. Անցեք "bin/Debug/net6.0/" թղթապանակ։


  11. Բացեք տերմինալը և գործարկեք .NET ծրագիրը՝ օգտագործելով հետևյալ հրամանը.
    dotnet ./Recognize_Text_In_Image.dll
    



    Փակեք տերմինալը։

  12. Բացեք ստեղծված PDF փաստաթուղթը և տեսեք արդյունքները՝