Reconocer códigos de barras matriciales 2D con distorsiones espaciales en .NET

Categoría del blog: Barcode.NET

06.05.2020

El VintaSoft Barcode .NET SDK se puede utilizar en aplicaciones .NET/C# para el reconocimiento de códigos de barras bidimensionales Aztec, QR y Han Xin con distorsiones superficiales aleatorias. En la práctica, esto simplifica significativamente el reconocimiento de códigos de barras. de cámara fotográfica, cámara web o cámara de teléfono inteligente, porque ahora no es necesario alinear el código de barras frente a la cámara e incluso es posible reconocer códigos de barras de superficies irregulares.




Nuestros desarrolladores han dedicado muchas horas fascinantes a desarrollar y mejorar el algoritmo de corrección de distorsión utilizando cámaras web y fotográficas. A continuación, puede ver dichos códigos de barras a través de los "ojos" de nuestro lector de códigos de barras:



En algún momento, nuestros desarrolladores comenzaron a ver los códigos de barras exactamente así. :)


Aquí hay un código C# que permite reconocer códigos de barras Aztec, QR y Han Xin con distorsiones espaciales:
/// <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();
            }
        }
    }
}


Las pruebas demostraron que el lector de códigos de barras puede manejar con éxito uno o más tipos de distorsiones especificadas a continuación:

Aquí hay algunas imágenes con códigos de barras distorsionados:













Puede encontrar más imágenes con códigos de barras distorsionados en el paquete de distribución de VintaSoft Barcode .NET SDK.

Si tiene algún problema con el reconocimiento de códigos de barras y cree que nuestro algoritmo de reconocimiento de códigos de barras debería resolverlo, envíe sus imágenes para probarlas y revisarlas a support@vintasoft.com.