Exemplo n.º 1
0
        /// <summary>
        /// Apply ocr settings
        /// </summary>
        /// <param name="ocr"></param>
        /// <param name="options"></param>
        private void ApplySettings(GdPictureOCR ocr, OCROption options)
        {
            if (string.IsNullOrWhiteSpace(options.ResourceFolder))
            {
                options.ResourceFolder = GdPictureHelper.OCRDirectory;
            }

            ocr.Context = (GdPicture14.OCRContext)(int) options.Context;
            ocr.LanguageModelPenaltyNonDictWords     = 0.15f;
            ocr.LanguageModelPenaltyNonFreqDictWords = 0.1f;
            ocr.ResourceFolder             = options.ResourceFolder;
            ocr.LoadMainDictionary         = options.UseMainDictionary;
            ocr.LoadFreqWordsDictionary    = options.UseFreqWordsDictionary;
            ocr.EnableOrientationDetection = options.EnableOrientationDetection;
            ocr.EnableSkewDetection        = options.EnableSkewDetection;

            ocr.ResetSelectedDictionaries();

            if (options.Languages != null)
            {
                foreach (var language in options.Languages)
                {
                    ocr.AddLanguage((GdPicture14.OCRLanguage)(int) language);
                }
            }
            else
            {
                //using german by default.
                ocr.AddLanguage(GdPicture14.OCRLanguage.German);
            }

            ocr.OCRMode      = (GdPicture14.OCRMode)(int) options.Mode;
            ocr.CharacterSet = options.CharacterSet;

            if (options.Left != 0 && options.Top != 0 && options.Width != 0 && options.Height != 0)
            {
                ocr.SetROI(options.Left, options.Top, options.Width, options.Height);
            }
            else
            {
                ocr.ResetROI();
            }
        }
Exemplo n.º 2
0
        public OCRResult ExtractText(OCROption options)
        {
            using (var ocr = GdPictureHelper.GetOCRInstance())
            {
                try
                {
                    var result         = new OCRResult();
                    var contentBuilder = new StringBuilder();

                    ocr.SetImage(imageId);

                    ApplySettings(ocr, options ?? DefaultOptions);

                    var pages = new List <int>();

                    if (options.Pages.Count == 0)
                    {
                        for (int i = 1; i <= PageCount; i++)
                        {
                            pages.Add(i);
                        }
                    }
                    else
                    {
                        pages.AddRange(options.Pages);
                    }

                    foreach (var page in pages)
                    {
                        GdPictureStatus status;
                        if (isMultipageImage)
                        {
                            status = imaging.TiffSelectPage(imageId, page);
                        }
                        else
                        {
                            status = imaging.SelectPage(imageId, page);
                        }

                        if (status != GdPictureStatus.OK)
                        {
                            result.ErrorOccured = true;
                            result.ErrorMessages.Add($"Error during page selection. Page: {page}");
                            continue;
                        }

                        if (ocr.SetImage(imageId) != GdPictureStatus.OK)
                        {
                            result.ErrorOccured = true;
                            result.ErrorMessages.Add($"Error during setting image. Page: {page}");
                            continue;
                        }

                        var    resultId = ocr.RunOCR();
                        string text     = ocr.GetOCRResultText(resultId);

                        // Add result
                        var regionResult = new OCRRegionResult
                        {
                            OptionName = options.OptionName,
                            Height     = options.Height,
                            Left       = options.Left,
                            Page       = page,
                            Top        = options.Top,
                            Width      = options.Width,
                            Text       = text
                        };
                        result.RegionResults.Add(regionResult);

                        contentBuilder.AppendLine(text);
                    }

                    result.Text = contentBuilder.ToString();

                    ocr.ReleaseOCRResults();

                    return(result);
                }
                catch (Exception ex)
                {
                    ocr.ReleaseOCRResults();

                    return(new OCRResult
                    {
                        Text = "",
                        ErrorMessages = new[] { ex.Message },
                        ErrorOccured = true
                    });
                }
            }
        }