Generar y reconocer códigos de barras en AWS Lambda

Categoría del blog: Barcode.NET

22.05.2020

AWS Lambda es una plataforma informática sin servidor y basada en eventos proporcionada por Amazon como parte de Amazon Web Services.

Este tutorial muestra cómo crear un proyecto de AWS Lambda en Visual Studio .NET 2017, generar una imagen de código de barras DataMatrix y reconocer el código de barras DataMatrix en la imagen generada en la función de AWS Lambda.

Primero, tenemos que abrir Visual Studio 2017 y crear un nuevo proyecto de AWS Lambda:
Crear un proyecto de AWS Lambda en Visual Studio

A continuación, debemos especificar que se debe usar una función SQS simple como contenido para la función de AWS Lambda:
Use una función SQS simple como contenido para la función AWS Lambda en Visual Studio

Aquí hay un proyecto de AWS Lambda creado en Visual Studio 2017:
Proyecto de AWS Lambda en Visual Studio



A continuación, debemos agregar referencias a System.Drawing.Common nuget-package y Vintasoft.Barcode.dll para .NET Core.
System.Drawing.Common es necesario para el ensamblado Vintasoft.Barcode. El ensamblado Vintasoft.Barcode es necesario para generar y reconocer códigos de barras.
Añadir Vintasoft.Barcode.dll al proyecto de AWS Lambda en Visual Studio



A continuación, debemos abrir el código de la función de AWS Lambda:
Código abierto de la función AWS Lambda en Visual Studio

A continuación, debemos agregar el código para la generación y el reconocimiento de códigos de barras a la función AWS Lambda:
Código C# para la generación y reconocimiento de códigos de barras mediante la función AWS Lambda

Aquí está el código C# de la función AWS Lambda, que permite generar imágenes con códigos de barras DataMatrix y reconocer códigos de barras en la imagen generada:
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: Amazon.Lambda.Core.LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda1
{
    public class Function
    {

        /// <summary>
        /// Default constructor. This constructor is used by Lambda to construct the instance. When invoked in a Lambda environment
        /// the AWS credentials will come from the IAM role associated with the function and the AWS region will be set to the
        /// region the Lambda function is executed in.
        /// </summary>
        public Function()
        {
        }



        /// <summary>
        /// This method is called for every Lambda invocation. This method takes in an SQS event object and can be used
        /// to respond to SQS messages.
        /// </summary>
        public async System.Threading.Tasks.Task FunctionHandler(Amazon.Lambda.SQSEvents.SQSEvent evnt, Amazon.Lambda.Core.ILambdaContext context)
        {
            foreach (var message in evnt.Records)
            {
                await ProcessMessageAsync(message, context);
            }
        }

        private async System.Threading.Tasks.Task ProcessMessageAsync(Amazon.Lambda.SQSEvents.SQSEvent.SQSMessage message, Amazon.Lambda.Core.ILambdaContext context)
        {
            context.Logger.LogLine($"Processed message {message.Body}");

            try
            {
                // create memory stream, where image with barcode will be stored
                using (System.IO.MemoryStream mem = new System.IO.MemoryStream())
                {
                    // create the barcode writer
                    Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter();
                    // specify that DataMatrix barcode must be created
                    barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.DataMatrix;
                    // specify the barcode value
                    barcodeWriter.Settings.Value = "1234567890987654321";
                    // generate barcode image and save to the memory stream as PNG file
                    barcodeWriter.SaveBarcodeAsImage(mem, Vintasoft.Barcode.BarcodeImageFormat.Png);

                    // create the barcode reader
                    using (Vintasoft.Barcode.BarcodeReader barcodeReader = new Vintasoft.Barcode.BarcodeReader())
                    {
                        // specify that reader must search for DataMatrix barcodes
                        barcodeReader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.DataMatrix;
                        // specify that reader must search horizontal barcodes only
                        barcodeReader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal;

                        // read barcodes from image
                        Vintasoft.Barcode.IBarcodeInfo[] infos = barcodeReader.ReadBarcodes(mem);

                        // if barcodes are not detected
                        if (infos.Length == 0)
                        {
                            context.Logger.LogLine($"No barcodes found.");
                        }
                        // if barcodes are detected
                        else
                        {
                            // get information about searched barcodes

                            for (int i = 0; i &lt; infos.Length; i++)
                            {
                                Vintasoft.Barcode.IBarcodeInfo info = infos[i];
                                context.Logger.LogLine(string.Format("Barcode: Type={0}, Value={1}", info.BarcodeType, info.Value));
                            }
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                context.Logger.LogLine(string.Format("Error: {0}", ex.Message));
            }

            await System.Threading.Tasks.Task.CompletedTask;
        }
    }
}



Finalmente, necesitamos ejecutar nuestra función AWS Lambda en la herramienta de prueba Mock Lambda de AWS .NET:
Ejecutar la función AWS Lambda en la herramienta de prueba Mock Lambda de AWS .NET

Envíe una solicitud SQS a nuestra función AWS Lambda:
Enviar una solicitud SQS a nuestra función AWS Lambda

Y vea el resultado del reconocimiento de código de barras usando la función AWS Lambda:
Resultado del reconocimiento de código de barras usando la función AWS Lambda