Riconoscimento di codici a barre a matrice 2D con distorsioni spaziali in .NET

Categoria del blog: Barcode.NET

06.05.2020

VintaSoft Barcode .NET SDK può essere utilizzato in applicazioni .NET/C# per il riconoscimento di codici a barre bidimensionali Aztec, QR Code e Han Xin Code con distorsioni superficiali casuali. In pratica Ciò consente di semplificare notevolmente il riconoscimento dei codici a barre da fotocamere, webcam o smartphone, perché ora non è necessario allineare il codice a barre davanti alla fotocamera ed è persino possibile riconoscere i codici a barre da superfici irregolari.

Primo esempio di codice a barre azteco con distorsioni spaziali


I nostri sviluppatori hanno trascorso molte ore affascinanti a sviluppare e migliorare l'algoritmo di correzione della distorsione utilizzando webcam e fotocamere. Di seguito è possibile osservare tali codici a barre tramite gli "occhi" del nostro lettore di codici a barre:

Visualizzazione del codice a barre Aztec con distorsioni spaziali tramite gli

A un certo punto i nostri sviluppatori hanno iniziato a vedere i codici a barre esattamente in questo modo. :)


Ecco il codice C# che consente di riconoscere i codici a barre Aztec, QR e Han Xin Code con distorsioni spaziali:
/// <summary>
/// Recognizes 2D matrix barcodes (Aztec, QR Code and Han Xin Code) with spatial distortions.
/// </summary>
public void Recognize2dBarcodeWithSpatialDistortions()
{
    // create barcode reader
    using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
    {
        // specify that reader must search for Aztec, QR and Han Xin Code barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Aztec |
            Vintasoft.Barcode.BarcodeType.QR |
            Vintasoft.Barcode.BarcodeType.HanXinCode;

        // specify that reader must search for horizontal and vertical barcodes only
        reader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal | Vintasoft.Barcode.ScanDirection.Vertical;

        // read barcodes from image file
        Vintasoft.Barcode.IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes("barcodes.png");

        // if barcodes are not detected
        if (barcodeInfos.Length == 0)
        {
            System.Console.WriteLine("Barcodes are not found.");
        }
        // if barcodes are detected
        else
        {
            // get information about recognized barcodes

            System.Console.WriteLine(string.Format("{0} barcode(s) found:", barcodeInfos.Length));
            System.Console.WriteLine();
            for (int i = 0; i &lt; barcodeInfos.Length; i++)
            {
                Vintasoft.Barcode.IBarcodeInfo barcodeInfo = barcodeInfos[i];
                System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, barcodeInfo.BarcodeType));
                System.Console.WriteLine(string.Format("Value:      {0}", barcodeInfo.Value));
                System.Console.WriteLine(string.Format("Region:     {0}", barcodeInfo.Region));
                System.Console.WriteLine();
            }
        }
    }
}


I test hanno dimostrato che il lettore di codici a barre può gestire con successo uno o più tipi di distorsioni specificati di seguito:

Ecco alcune immagini con codici a barre distorti:
Secondo esempio di codice a barre azteco con distorsioni spaziali

Terzo esempio di codice a barre azteco con distorsioni spaziali

Primo campione di codice a barre Han Xin Code con distorsioni spaziali

Secondo campione di codice a barre Han Xin Code con distorsioni spaziali

Primo esempio di codice a barre QR con distorsioni spaziali

Secondo esempio di codice a barre QR con distorsioni spaziali


Altre immagini con codici a barre distorti sono disponibili nel pacchetto di distribuzione di VintaSoft Barcode .NET SDK.

Se riscontri problemi nel riconoscimento dei codici a barre e ritieni che il nostro algoritmo di riconoscimento dei codici a barre possa risolverli, invia le tue immagini per test e revisione a support@vintasoft.com.