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.




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:



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:













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.