Ejemplo n.º 1
0
        public void Initialize(DigitDetectionOptions options, int target)
        {
            if (options.RecognizeOnlyTarget)
            {
                options.Target = target;
            }

            this.options = options;
        }
Ejemplo n.º 2
0
        private async Task <string> TryRecognizeText(DigitDetectionOptions options, System.Drawing.Bitmap bitmap)
        {
            textExtractor.Initialize(options ?? DigitDetectionOptions.Default, continuityManager.GetCurrentNumber());

            int tries = 10;

            while (tries-- > 0)
            {
                try
                {
                    return(textExtractor.GetText(bitmap));
                }
                catch (InvalidOperationException)
                {
                    await Task.Delay(250);
                }
            }

            return(null);
        }
Ejemplo n.º 3
0
 public async Task <IActionResult> UploadImage(UploadImageViewModel model,
                                               [FromQuery] DigitDetectionOptions options) =>
 await uploadImageCommand.Value.ExecuteAsync(model, options, ModelState);
Ejemplo n.º 4
0
        private async Task <ResponseImageViewModel> ProcessImage(UploadImageViewModel model, DigitDetectionOptions options, ModelStateDictionary modelState)
        {
            int expectedNumber = continuityManager.GetCurrentNumber();

            if (!modelState.IsValid)
            {
                var errors = modelState.SelectMany(pair => pair.Value.Errors.Select(error => error.ErrorMessage))
                             .ToList();
                return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber, errors));
            }

            //preprocess image
            var bitmap = bitmapUtility.FromFormFile(model.File);

            if (!imageRatioValidator.Validate(bitmap))
            {
                return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber,
                                                                                   imageRatioValidator.ErrorMessage));
            }

            //extract text
            string recognizedText = await TryRecognizeText(options, bitmap);

            if (recognizedText == null)
            {
                return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber,
                                                                                   ErrorMessages.SERVER_OVERLOADED));
            }

            //preprocess text
            var sanitizer = new TextSanitizer();

            recognizedText = sanitizer.Process(recognizedText);

            var expectedText = continuityManager.GetCurrentNumber().ToString();

            if (expectedText == recognizedText)
            {
                int recognizedAsNumber = int.Parse(recognizedText);

                var bytes = bitmapUtility.ToByteArray(bitmapUtility.Resize(bitmap));

                var entry = new ImageEntry(bytes, recognizedAsNumber);

                if (await continuityManager.TryIncrementCurrentNumber(entry))
                {
                    return(ResponseImageViewModelSimpleFactory.GenerateSuccessResponse(recognizedText,
                                                                                       expectedNumber));
                }
                else
                {
                    //correct the expected number, as it must've changed
                    expectedNumber = continuityManager.GetCurrentNumber();
                    return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(null, expectedNumber,
                                                                                       ErrorMessages.CONCURRENCY));
                }
            }
            else
            {
                string error = string.Format(ErrorMessages.INVALID_NUMBER, expectedText);
                return(ResponseImageViewModelSimpleFactory.GenerateFailureResponse(recognizedText, expectedNumber,
                                                                                   error));
            }
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> ExecuteAsync(UploadImageViewModel model, DigitDetectionOptions options, ModelStateDictionary modelState)
        {
            var viewModel = await ProcessImage(model, options, modelState);

            return(new JsonResult(viewModel));
        }