Գեներացնել և ճանաչել շտրիխ կոդերը AWS Lambda-ում

Բլոգի կատեգորիա՝ Barcode.NET

22.05.2020

AWS Lambda-ն իրադարձությունների վրա հիմնված, սերվերից զուրկ հաշվողական հարթակ է, որը տրամադրվում է Amazon-ի կողմից՝ որպես Amazon Web Services-ի մաս։

Այս ձեռնարկը ցույց է տալիս, թե ինչպես ստեղծել AWS Lambda նախագիծ Visual Studio .NET 2017-ում, ստեղծել DataMatrix շտրիխ կոդի պատկեր և ճանաչել DataMatrix շտրիխ կոդը AWS Lambda ֆունկցիայում ստեղծված պատկերում։

Նախ, մենք պետք է բացենք Visual Studio 2017-ը և ստեղծենք նոր AWS Lambda նախագիծ՝
Create AWS Lambda project in Visual Studio

Հաջորդը, մենք պետք է նշենք, որ պարզ SQS ֆունկցիան պետք է օգտագործվի որպես AWS Lambda ֆունկցիայի բովանդակություն՝
Use simple SQS function as content for AWS Lambda function in Visual Studio

Ահա Visual Studio 2017-ում ստեղծված AWS Lambda նախագիծը՝
AWS Lambda project in Visual Studio



Հաջորդը, մենք պետք է հղումներ ավելացնենք System.Drawing.Common nuget-package-ին և Vintasoft.Barcode.dll-ին .NET Core-ի համար։
System.Drawing.Common-ը անհրաժեշտ է Vintasoft.Barcode հավաքման համար։ Vintasoft.Barcode հավաքումը անհրաժեշտ է շտրիխ կոդեր ստեղծելու և ճանաչելու համար։
Add Vintasoft.Barcode.dll to AWS Lambda project in Visual Studio



Հաջորդը, մենք պետք է բացենք AWS Lambda ֆունկցիայի կոդը՝
Open code of AWS Lambda function in Visual Studio

Հաջորդը, մենք պետք է AWS Lambda ֆունկցիային ավելացնենք շտրիխ կոդի ստեղծման և ճանաչման կոդը՝
C# code for barcode generation and recognition using AWS Lambda function

Ահա AWS Lambda ֆունկցիայի C# կոդը, որը թույլ է տալիս ստեղծել պատկեր DataMatrix շտրիխ կոդով և ճանաչել շտրիխ կոդը ստեղծված պատկերում.
// 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;
        }
    }
}



Վերջապես, մենք պետք է գործարկենք մեր AWS Lambda ֆունկցիան AWS .NET Mock Lambda Test Tool-ում.
Run AWS Lambda function in AWS .NET Mock Lambda Test Tool

Ուղարկեք SQS հարցում մեր AWS Lambda ֆունկցիային.
Send a SQS request to our AWS Lambda function

Եվ տեսեք շտրիխ կոդի ճանաչման արդյունքը՝ օգտագործելով AWS Lambda ֆունկցիան.
Result of barcode recognition using AWS Lambda function