Barcodes in Bildern unter Linux mit einer ..NET-Anwendung

Blog-Kategorie: Barcode.NETLinux

15.12.2023

Dieser Artikel erklärt, wie man unter Ubuntu eine .NET-Konsolenanwendung erstellt, die Barcodes in Bildern erkennt. Für die Barcode-Erkennung wird das VintaSoft Barcode .NET SDK 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 dazu den Ordner "Recognize_Barcodes_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 net8.0
    



    Das erstellte Projekt enthält die Projektdatei "Recognize_Barcodes_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_Barcodes_In_Image.csproj" in einem Texteditor und ändern Sie den Dateitext wie folgt:
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net8.0</TargetFramework>
        <RootNamespace>ConsoleApp1</RootNamespace>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="SkiaSharp" Version="2.88.6" />
        <PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.6" />
        <PackageReference Include="Vintasoft.Barcode" Version="14.2.0.3" />
        <PackageReference Include="Vintasoft.Barcode.SkiaSharp" Version="14.2.0.3" />
        <PackageReference Include="Vintasoft.Shared" Version="4.1.0.3" />
      </ItemGroup>
    
      <ItemGroup>
        <Content Include="AllSupportedBarcodes.png">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
      </ItemGroup>
    
    </Project>
    



    Das geänderte Projekt referenziert die NuGet-Pakete für das VintaSoft Barcode .NET SDK (Vintasoft.Shared.dll, Vintasoft.Barcode.dll, Vintasoft.Barcode.SkiaSharp.dll).

  6. Öffnen Sie die Datei "Program.cs" und ändern Sie deren Code in folgenden C#-Code:
    namespace Recognize_Barcodes_In_Image
    {
        class Program
        {
            static void Main(string[] args)
            {
                // register the evaluation license for VintaSoft Barcode .NET SDK
                Vintasoft.Barcode.BarcodeGlobalSettings.Register("%EVAL_LIC_USER_NAME%", "%EVAL_LIC_USER_EMAIL%", "%EVAL_LIC_DATE%", "%EVAL_LIC_REG_CODE%");
    
                // Vintasoft.Barcode.SkiaSharp.dll allows to load bitmap from BMP, DNG, GIF, HEIF, JPEG, PNG, WEBP files using image codecs from SkiaSharp library
                Vintasoft.Barcode.SkiaSharpAssembly.Init();
    
                // recognize barcodes from image file
                RecognizeBarcodesFromImage("AllSupportedBarcodes.png");
            }
    
            /// <summary>
            /// Recognizes barcodes from an image file.
            /// </summary>
            /// <param name="filename">A path to an image file.</param>
            public static void RecognizeBarcodesFromImage(string filename)
            {
                // create barcode reader
                using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
                {
                    // specify that reader must search for Code39, Code39Extended, Code128, SSCC18 and DataMatrix barcodes
                    reader.Settings.ScanBarcodeTypes =
                        Vintasoft.Barcode.BarcodeType.Code39 |
                        Vintasoft.Barcode.BarcodeType.Code128 |
                        Vintasoft.Barcode.BarcodeType.DataMatrix;
                    reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.Code39Extended);
                    reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.SSCC18);
    
                    // specify that reader must search for horizontal and vertical barcodes only
                    reader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal | Vintasoft.Barcode.ScanDirection.Vertical;
    
                    // use Automatic Recognition
                    reader.Settings.AutomaticRecognition = true;
    
                    // read barcodes from image file
                    Vintasoft.Barcode.IBarcodeInfo[] infos = reader.ReadBarcodes(filename);
    
                    // if barcodes are not detected
                    if (infos.Length == 0)
                    {
                        Console.WriteLine("No barcodes found.");
                    }
                    // if barcodes are detected
                    else
                    {
                        // get information about extracted barcodes
    
                        Console.WriteLine(string.Format("{0} barcodes found:", infos.Length));
                        Console.WriteLine();
                        for (int i = 0; i < infos.Length; i++)
                        {
                            Vintasoft.Barcode.IBarcodeInfo info = infos[i];
                            Console.WriteLine(string.Format("[{0}:{1}]", i + 1, info.BarcodeType));
                            Console.WriteLine(string.Format("Value:      {0}", info.Value));
                            Console.WriteLine(string.Format("Region:     {0}", info.Region));
                            Console.WriteLine();
                        }
                    }
                }
            }
    
        }
    }
    



    Der Anwendungscode erkennt Barcodes in Bildern und gibt das Ergebnis in der Konsole aus.

  7. Holen Sie sich den Code für die Verwendung der Evaluierungsversion unter Linux gemäß der Beschreibung in der Dokumentation und fügen Sie den erhaltenen Code in den C#-Code der Datei "Program.cs" ein.


  8. Kopieren Sie die Datei "AllSupportedBarcodes.png" in den Projektordner.


    Sie können anstelle der Datei "AllSupportedBarcodes.png" auch eine andere Datei mit Barcodes verwenden.

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



    Schließen Sie das Terminal.

  10. Wechseln Sie zum Ordner "bin/Debug/net8.0/".


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



    Sehen Sie sich das Ergebnis der Barcode-Erkennung an und schließen Sie das Terminal.