Added split processors

This commit is contained in:
Simon Gruber
2023-11-14 14:52:19 +01:00
parent db6e403c01
commit fd26cf45e0
12 changed files with 207 additions and 71 deletions
+30 -7
View File
@@ -5,6 +5,7 @@ using Ocr.Tesseract.Configuration;
using Ocr.Tesseract.Models;
using Ocr.Tesseract.Screenshots;
using Ocr.Tesseract.Screenshots.Configuration;
using Ocr.Tesseract.Screenshots.Threshold;
using Process.Abstract.Configuration;
using Process.Interface;
using System.Text.RegularExpressions;
@@ -69,15 +70,37 @@ namespace Common
private IProcessor<MagickImage, ScanResult> MakeProcessor()
{
return new ProcessorChainConfiguration<MagickImage, ScanResult>()
.Use(new ScreenshotProcessor(ImageProcessorConfiguration)) // Preprocess input data
.Use(new ProcessingEvent<MagickImage>(OnProcessing)) // Scan
.Use(new TesseractProcessor(TesseractConfiguration)) // Scan
.Use(new ProcessingEvent<ScanResult>(OnProcessed)) // Scan
.Use(new ConfidenceFilter(50)) // Process output data
.Use(new DuplicateFilter())
var threshold =
new ThresholdAdaptiveProcessor(ImageProcessorConfiguration.ThresholdWidth,
ImageProcessorConfiguration.ThresholdHeight);
// var threshold = new AutoThresholdProcessor(AutoThresholdMethod.Kapur);
// var threshold = new AutoThresholdProcessor(AutoThresholdMethod.OTSU);
// var threshold = new AutoThresholdProcessor(AutoThresholdMethod.Triangle);
// var threshold = new ThresholdProcessor(60);
var preprocessing = new ProcessorChainConfiguration<MagickImage, MagickImage>()
.Use(new CloneImageProcessor())
.Use(new ResizeProcessor(FilterType.Lanczos2Sharp, PixelInterpolateMethod.Mesh))
.Use(new NormalizeProcessor())
.Use(threshold)
.Use(new AddBorderProcessor(10))
.Use(new BinarizeProcessor())
.Complete(new NegateCloneProcessor());
var postprocessing = new ProcessorChainConfiguration<ScanResult, ScanResult>()
.Use(new ConfidenceFilter(50))
.Use(new ToLowerProcessor())
.Use(new DuplicateFilter())
.Complete(new RegexFilter(wordRegex));
var scan = new TesseractProcessor(TesseractConfiguration);
return new ProcessorChainConfiguration<MagickImage, ScanResult>()
.Use(preprocessing)
.Use(new ProcessingEvent<MagickImage>(OnProcessing))
.Use(scan)
.Use(new ProcessingEvent<ScanResult>(OnProcessed))
.Complete(postprocessing);
}
protected virtual void OnProcessing(IProcessor sender, ICollection<MagickImage> inputs)