Texterkennung in Bildern mit einer .NET-Anwendung für Linux

Blog Kategorie: BildverarbeitungOCR.NETLinux

23.12.2022

Dieser Artikel erklärt, wie Sie eine .NET-Konsolenanwendung erstellen und Text aus Bildern unter Ubuntu erkennen. Für die Texterkennung aus Bildern werden das VintaSoft Imaging .NET SDK und seine PDF-, OCR- und Dokumentbereinigungs-Plug-ins verwendet.

Die folgenden Schritte sind erforderlich:
  1. Öffnen Sie den Ubuntu-Desktop.

  2. Erstellen Sie einen Ordner, in dem die Dateien der .NET-Anwendung gespeichert werden. Erstellen Sie den Ordner "Recognize_Text_In_Image" auf dem Desktop des aktuellen Benutzers und wechseln Sie in diesen Ordner.


  3. Öffnen Sie das Terminal. Dies kann über den Menüpunkt "Im Terminal öffnen" im Kontextmenü oder durch Drücken der Tastenkombination Strg+Alt+T erfolgen.


  4. Führen Sie den Befehl im Terminal aus, der ein neues Konsolenprojekt für eine .NET-Anwendung erstellt:
    dotnet new console --framework net6.0
    



    Das erstellte Projekt enthält die Projektdatei "Recognize_Text_In_Image.csproj" und die Datei "Program.cs", die den C#-Code der Anwendung enthält. Schließen Sie das Terminal.

  5. Öffnen Sie die Projektdatei "Recognize_Text_In_Image.csproj" in einem Texteditor und ändern Sie den Dateitext wie folgt:
    <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>
    



    Das geänderte Projekt referenziert NuGet-Pakete für 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) und VintaSoft PDF .NET Plug-in (Vintasoft.Imaging.Pdf, Vintasoft.Imaging.Pdf.Ocr).

  6. Öffnen Sie die Datei "Program.cs" und ändern Sie deren Code in folgenden C#-Code:
    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();
                }
            }
        }
    }
    



    Der Anwendungscode erkennt Text aus einem Bild und speichert das Ergebnis in einem durchsuchbaren PDF-Dokument.

  7. Den Code für die Verwendung der Evaluierungsversion unter Linux gemäß der Beschreibung in Dokumentation abrufen und in den C#-Code der Datei "Program.cs" einfügen.


  8. Kopieren Sie die Datei "OCR.tif" in den Projektordner.


    Sie können anstelle der Datei "OCR.tif" auch eine andere Datei mit einem Dokumentbild verwenden.

  9. Öffnen Sie das Terminal und kompilieren Sie das .NET-Projekt mit folgendem Befehl:
    dotnet build Recognize_Text_In_Image.csproj
    



    Schließen Sie das Terminal.

  10. Wechseln Sie in den Ordner "bin/Debug/net6.0/".


  11. Öffnen Sie das Terminal und führen Sie die .NET-Anwendung mit folgendem Befehl aus:
    dotnet ./Recognize_Text_In_Image.dll
    



    Schließen Sie das Terminal.

  12. Öffnen Sie das erstellte PDF-Dokument und sehen Sie sich die Ergebnisse an: