Reconhecer códigos de barras matriciais 2D com distorções espaciais em .NET

Categoria do blog: Código de barras.NET

06.05.2020

O VintaSoft Barcode .NET SDK pode ser usado em aplicações .NET/C# para reconhecimento de códigos de barras bidimensionais Aztec, QR Code e Han Xin Code com distorções de superfície aleatórias. Na prática, isso simplifica significativamente o reconhecimento de códigos de barras por câmeras fotográficas, webcams ou câmeras de smartphones, pois agora não é necessário alinhar o código de barras em frente à câmera, sendo possível até mesmo reconhecer códigos de barras em superfícies irregulares.

First sample of Aztec barcode with spatial distortions


Nossos desenvolvedores dedicaram muitas horas fascinantes desenvolvendo e aprimorando o algoritmo de correção de distorção usando câmeras web e fotográficas. Abaixo, você pode ver esses códigos de barras através dos "olhos" do nosso leitor de código de barras:

View to the Aztec barcode with spatial distortions via 'eyes' of barcode reader of VintaSoft Barcode .NET SDK

Em determinado momento, nossos desenvolvedores começaram a enxergar os códigos de barras exatamente dessa forma. :)


Aqui está o código C# que permite reconhecer códigos de barras Aztec, QR e Han Xin com distorções espaciais:
/// <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();
            }
        }
    }
}


Os testes mostraram que o leitor de código de barras consegue lidar com sucesso com um ou mais tipos de distorções especificadas abaixo:

Aqui estão algumas imagens com códigos de barras distorcidos:
Second sample of Aztec barcode with spatial distortions

Third sample of Aztec barcode with spatial distortions

First sample of Han Xin Code barcode with spatial distortions

Second sample of Han Xin Code barcode with spatial distortions

First sample of QR barcode with spatial distortions

Second sample of QR barcode with spatial distortions


Mais imagens com códigos de barras distorcidos podem ser encontradas no pacote de distribuição do VintaSoft Barcode .NET SDK.

Se você enfrentar algum problema no reconhecimento de código de barras e achar que nosso algoritmo de reconhecimento de código de barras pode resolvê-lo, envie suas imagens para teste e avaliação para support@vintasoft.com.