/// <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(); } }
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 }); } } }