public DocumentModificationResult AddDocumentPageBitmap(OrderedBitmap bitmap) { if (_documentPages.ContainsKey((int)bitmap.Order)) { return(DocumentModificationResult.Failure(new AddedBitmapForPageTwice((int)bitmap.Order))); } return(ReplaceDocumentPageBitmap(bitmap)); }
private RecognizedChoicePart RecognizeChoicePart(OrderedBitmap page, IActorRef senderRef, DocumentToProcess document, ICroppedArea croppedPart, ICroppedArea roiExtractResult) { var recognitionResult = _handwrittenChoiceRecognizer.RecognizeFrom(roiExtractResult).Result as RecognizedChoicePart; recognitionResult.AreaName = croppedPart.AreaUsedForCropping.AreaName; senderRef.Tell(new DocumentPageChoiceAreaProcessingCompleted(document.Id, (int)page.Order, croppedPart.AreaUsedForCropping.AreaName, recognitionResult)); return(recognitionResult); }
private RecognizedTextPart RecognizeTextPart(OrderedBitmap page, IActorRef selfRef, DocumentToProcess document, ICroppedArea croppedPart, FlattenedCroppedArea downscaleResult) { var recognitionResult = _handwrittenInputRecognizer.RecognizeFrom(downscaleResult).Result; recognitionResult.AreaName = croppedPart.AreaUsedForCropping.AreaName; selfRef.Tell(new DocumentPageTextAreaProcessingCompleted(document.Id, (int)page.Order, croppedPart.AreaUsedForCropping.AreaName, recognitionResult)); return(recognitionResult as RecognizedTextPart); }
private void ProcessPage(OrderedBitmap page, IActorRef senderRef, DocumentToProcess document) { senderRef.Tell(new DocumentPageProcessingStarted(document.Id, (int)page.Order)); var pageDefinition = document.TemplateDefinition.DefinedPages[(int)page.Order]; //Extracting from input only parts that are handwritten elements (ie. delta between empty document and filled by hand document) var extractedParts = _imagePreparationSteps.HandwrittenInputExtractor.ExtractHandwrittenInput(page.Bitmap, pageDefinition); //And cropping them according to defined template var croppingResult = _imagePreparationSteps.TemplateAreasCropper.CropUserInput(extractedParts.Result, document.Id, pageDefinition); //Processed parts var processedTextAreas = new List <RecognizedTextPart>(); var processedChoiceAreas = new List <RecognizedChoicePart>(); foreach (var croppedPart in croppingResult.Result) { senderRef.Tell(new DocumentPageAreaProcessingStarted(document.Id, (int)page.Order, croppedPart.AreaUsedForCropping.AreaName)); var cleanResult = _imagePreparationSteps.CroppedAreaCleaner.CleanUp(croppedPart).Result; var roiExtractResult = _imagePreparationSteps.RegionOfInterestExtractor.ExtractRegionOfInterestFrom(cleanResult).Result; //Choice part, ie. checkbox on paper if (croppedPart.AreaUsedForCropping.ExpectedData == TemplatePartExpectedDataType.Choice) { processedChoiceAreas.Add(RecognizeChoicePart(page, senderRef, document, croppedPart, roiExtractResult)); } //Text part, ie. field to fill with name/surname/personal id etc. else { var downscaleResult = _imagePreparationSteps.CroppedAreaScaler.ScaleAndFlatten(roiExtractResult).Result; processedTextAreas.Add(RecognizeTextPart(page, senderRef, document, croppedPart, downscaleResult)); } } var processedPage = new ProcessedDocumentPage(processedTextAreas, processedChoiceAreas, (int)page.Order); var savePageResult = _saveProcessedPageHandler.Handle(processedPage.AsSaveCommand()); if (savePageResult.Successful) { senderRef.Tell(new DocumentPageProcessingCompleted(document.Id, processedPage)); } //TODO: Create failure communication, ie. selfRef.Tell(new Failure()) else { Console.WriteLine("Failed to save recognized parts for page: " + page.Order + "of document: " + document.Id); } }
public DocumentModificationResult ReplaceDocumentPageBitmap(OrderedBitmap bitmap) { if (!TemplateDefinition.DefinedPages.ContainsKey((int)bitmap.Order)) { return(DocumentModificationResult.Failure(new AddedBitmapForNonexistentPage((int)bitmap.Order))); } if (_documentPages.ContainsKey((int)bitmap.Order)) { _documentPages[(int)bitmap.Order] = bitmap; } else { _documentPages.Add((int)bitmap.Order, bitmap); } return(DocumentModificationResult.Success()); }