Beispiel #1
0
        public async Task <IRecognitionResults> RecognizeAsync(IRecognitionConfiguration config, bool runParallel = true)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            var type = await _recognizer.GetFileTypeAsync(config.File.DataStream);

            if (type == ImageFileTypes.Unrecognized)
            {
                throw new InvalidOperationException("Image file type not recognized.");
            }

            var tesseractFactory = _tesseractFactory.CreateFactory(config.Engine.TessData, config.Engine.Language, (EngineMode)config.Engine.EngineMode);
            var preprocessors    = config.Preprocessors.Select(x => _preprocessorFactory.Create(x)).ToArray();

            using var storedFile = await _storage.StoreAsync(config.File);

            if (config.File.DisposeStream)
            {
                config.File.DataStream.Dispose();
            }

            var job = _jobFactory.Create(type, storedFile, tesseractFactory, preprocessors);

            if (runParallel)
            {
                return(await _jobQueue.EnqueueAsync(job));
            }
            return(await job.ExecuteAsync());
        }
Beispiel #2
0
 public IRecognitionResults Recognize(IRecognitionConfiguration config, bool runParallel = true)
 {
     return(RecognizeAsync(config, runParallel)
            .ConfigureAwait(false)
            .GetAwaiter()
            .GetResult());
 }
Beispiel #3
0
        public IRecognitionConfigurationBuilder ConfigureFrom(IRecognitionConfiguration clonedConfiguration)
        {
            var newConfiguration = new RecognitionConfiguration();

            newConfiguration.TessData   = clonedConfiguration.Engine.TessData;
            newConfiguration.Language   = clonedConfiguration.Engine.Language;
            newConfiguration.EngineMode = clonedConfiguration.Engine.EngineMode;

            newConfiguration.DataStream    = clonedConfiguration.File.DataStream;
            newConfiguration.DisposeStream = clonedConfiguration.File.DisposeStream;
            newConfiguration.Name          = clonedConfiguration.File.Name;
            newConfiguration.Extension     = clonedConfiguration.File.Extension;

            var newPreprocessors = new Dictionary <string, PreprocessorConfigurationBuilder>();

            foreach (var preprocessor in clonedConfiguration.Preprocessors)
            {
                newPreprocessors.Add(preprocessor.Type, new PreprocessorConfigurationBuilder(preprocessor.Parameters));
            }

            _configuration = newConfiguration;
            _preprocessors = newPreprocessors;
            return(this);
        }