private RecognitionStatistics computeStatistics(FREngine.IFRDocument frDocument) { RecognitionStatistics result = new RecognitionStatistics(); result.RecognizedText = new List <RecognizedText>(); CustomFile file = new CustomFile(); for (int pageIndex = 0; pageIndex < frDocument.Pages.Count; pageIndex++) { FREngine.IFRPage frPage = frDocument.Pages[pageIndex]; FREngine.ILayout layout = frPage.Layout; int blocksCount = layout.Blocks.Count; for (int blockIndex = 0; blockIndex < blocksCount; blockIndex++) { FREngine.IBlock block = layout.Blocks[blockIndex]; result += computeStatisticsForBlock(pageIndex, block); } result.RecognizedText.Add(new RecognizedText(frPage, pageIndex)); frPage.Flush(false); } return(result); }
public static RecognitionStatistics operator +(RecognitionStatistics a, RecognitionStatistics b) { RecognitionStatistics result = new RecognitionStatistics(); result.TotalCharsCount = a.TotalCharsCount + b.TotalCharsCount; result.SuspiciousCharsCount = a.SuspiciousCharsCount + b.SuspiciousCharsCount; if (a.RecognizedText.Count > 0) { result.RecognizedText = a.RecognizedText; } else if (b.RecognizedText.Count > 0) { result.RecognizedText = b.RecognizedText; } return(result); }
private void Export(string fileName, RecognitionStatistics recognitionStatistics, bool drawTable, bool drawBlock, bool drawLine) { int i = 0; if (drawBlock) { foreach (var imagesItem in recognitionStatistics.PreprocessedImages) { var recognizedItem = recognitionStatistics.RecognizedText[i]; List <Rectangle> rectangleRowItems; List <Rectangle> rectangleLineItems; List <Rectangle> rectangleBlockItems; List <Rectangle> rectangleTableItems; Init(out rectangleRowItems, out rectangleLineItems, out rectangleBlockItems, out rectangleTableItems); AddRectangeBlock(drawLine, recognizedItem.Page.BlockItems, rectangleBlockItems, rectangleLineItems); AddRectangeTable(drawLine, recognizedItem, rectangleBlockItems, rectangleTableItems, rectangleRowItems, rectangleLineItems); string file = AppDomain.CurrentDomain.BaseDirectory + @"OCR\ALL\" + Path.GetFileNameWithoutExtension(fileName) + "_ALL_" + i + ".jpg"; DrawImage(imagesItem, rectangleLineItems, rectangleRowItems, rectangleBlockItems, rectangleTableItems, file); Init(out rectangleRowItems, out rectangleLineItems, out rectangleBlockItems, out rectangleTableItems); AddRectangleLine(drawLine, rectangleLineItems, recognizedItem.Page.LineItems); file = AppDomain.CurrentDomain.BaseDirectory + @"OCR\Line\" + Path.GetFileNameWithoutExtension(fileName) + "_Line_" + i + ".jpg"; DrawImage(imagesItem, rectangleLineItems, rectangleRowItems, rectangleBlockItems, rectangleTableItems, file); //Init(out rectangleRowItems, out rectangleLineItems, out rectangleBlockItems, out rectangleTableItems); //AddRectangeBlock(drawLine, recognizedItem.Page.BlockItemsAll, rectangleBlockItems, rectangleLineItems); //file = AppDomain.CurrentDomain.BaseDirectory + @"OCR\" + Path.GetFileNameWithoutExtension(fileName) + "_Block_" + i + ".jpg"; //DrawImage(imagesItem, null, null, rectangleBlockItems, null, file); i++; } } }
private RecognitionStatistics computeStatisticsForBlock(int pageIndex, FREngine.IBlock block) { RecognitionStatistics result = new RecognitionStatistics(); if (block.Type == FREngine.BlockTypeEnum.BT_Table) { FREngine.TableBlock tableBlock = block.GetAsTableBlock(); for (int iCell = 0; iCell < tableBlock.Cells.Count; iCell++) { result += computeStatisticsForBlock(pageIndex, tableBlock.Cells[iCell].Block); } } else if (block.Type == FREngine.BlockTypeEnum.BT_Text) { FREngine.ITextBlock textBlock = block.GetAsTextBlock(); int paragraphsCount = textBlock.Text.Paragraphs.Count; for (int iPar = 0; iPar < paragraphsCount; iPar++) { FREngine.IParagraph par = textBlock.Text.Paragraphs[iPar]; string text = par.Text; result.TotalCharsCount += text.Length; FREngine.CharParams charParams = engine.CreateCharParams(); for (int iChar = 0; iChar < text.Length; iChar++) { par.GetCharParams(iChar, charParams); if (charParams.IsSuspicious) { result.SuspiciousCharsCount++; } } } } return(result); }
public RecognitionStatistics Run(string sourceImagePath, string language = "English", bool exportImage = false, bool drawTable = false, bool drawBlock = false, bool drawLine = false) { try { using (Processor processor = new Processor()) { ProcessingSettings initialSettings = new ProcessingSettings(); initialSettings.IsRecognize = true; //recognitionCheckBox.Checked; initialSettings.Language = language; //languageComboBox.Text; ProcessingSettings modifiedSettings = new ProcessingSettings(); modifiedSettings.IsRecognize = true; // recognitionCheckBox.Checked; modifiedSettings.Language = language; //languageComboBox.Text; modifiedSettings.CropImage = false; //cropImageCheckBox.Checked; modifiedSettings.EnhanceLocalContrast = false; //enhanceContrastCheckBox.Checked; modifiedSettings.DeskewImage = true; //deskewImageCheckBox.Checked; //if (correctOrientationCheckBox.Checked) //{ modifiedSettings.CorrectOrientationMode = (ProcessingSettings.OrientationCorrectionMode)ProcessingSettings.OrientationCorrectionMode.Automatic; //} //else //{ // modifiedSettings.CorrectOrientationMode = ProcessingSettings.OrientationCorrectionMode.None; //} //if (removeGarbageCheckBox.Checked) //{ modifiedSettings.RemoveGarbage = true; int size = 0;//garbageUpDown.Value; modifiedSettings.GarbageSize = size == 0 ? -1 : size; //} //else //{ // modifiedSettings.RemoveGarbage = false; //} //if (correctResolutionCheckBox.Checked) //{ modifiedSettings.CorrectResolution = true; modifiedSettings.NewResolution = 0;//(int)resolutionUpDown.Value; //} //else //{ // modifiedSettings.CorrectResolution = false; //} modifiedSettings.SplitPages = false; //splitPagesCheckBox.Checked; modifiedSettings.SplitBusinessCards = false; //splitBusinessCardsCheckBox.Checked; modifiedSettings.InvertImage = false; //invertImageCheckBox.Checked; //if (suppressColorCheckBox.Checked) //{ // modifiedSettings.SuppressColor = true; // modifiedSettings.HslHueToSuppress = (byte)hueUpDown.Value; // modifiedSettings.HslSaturationBoundaryToSuppress = (byte)saturationBoundaryUpDown.Value; //} //else //{ modifiedSettings.SuppressColor = false; //} //if (removeObjectsCheckBox.Checked) //{ // modifiedSettings.RemoveObjects = true; // modifiedSettings.ColorToRemove = (ProcessingSettings.ObjectsColorEnum)colorComboBox.SelectedItem; // modifiedSettings.ObjectsTypeToRemove = (ProcessingSettings.ObjectsTypeEnum)typeComboBox.SelectedItem; //} //else //{ modifiedSettings.RemoveObjects = false; //} modifiedSettings.CorrectDistortions = false; //correctDistortionsCheckBox.Checked; modifiedSettings.RemoveNoise = false; //removeNoiseCheckBox.Checked; //if (noiseModelComboBox.Text == "White noise") //{ // modifiedSettings.NoiseModel = FREngine.NoiseModelEnum.NM_WhiteNoise; //} //else //{ // modifiedSettings.NoiseModel = FREngine.NoiseModelEnum.NM_CorrelatedNoise; //} modifiedSettings.HasLargeCharacters = false; // hasLargeCharactersCheckBox.Checked; modifiedSettings.RemoveMotionBlur = false; //removeMotionBlurCheckBox.Checked; //if (convertToBWCheckBox.Checked) //{ modifiedSettings.ConvertToBW = true; modifiedSettings.EnableDithering = true;//enableDitheringCheckBox.Checked; //} //else //{ // modifiedSettings.ConvertToBW = false; //} modifiedSettings.SmoothTexture = true; //smoothTextureCheckBox.Checked; modifiedSettings.EqualizeBrightness = true; // equalizeBrightnessCheckBox.Checked; modifiedSettings.MakeWhiteBackground = true; // makeWhiteBackgroundCheckBox.Checked; processor.WarmUp(sourceImagePath, modifiedSettings); //processor.Process(sourceImagePath, initialSettings); RecognitionStatistics modifiedStatic = processor.Process(sourceImagePath, modifiedSettings); CustomFile csFile = new CustomFile(); foreach (var imagesItem in modifiedStatic.RecognizedText) { //csFile.ImageId = imageID; csFile.PageItems.Add(imagesItem.Page); } modifiedStatic.File = csFile; //WriteXML(csFile, AppDomain.CurrentDomain.BaseDirectory + @"OCR\XML\" + Path.GetFileNameWithoutExtension(sourceImagePath) + ".xml"); //if (exportImage) //{ // Export(sourceImagePath, modifiedStatic, drawTable, drawBlock, drawLine); //} return(modifiedStatic); } } finally { } }
public RecognitionStatistics Process(string imagePath, ProcessingSettings settings) { DateTime startTime = System.DateTime.Now; setStep("Applying profile..."); engine.LoadPredefinedProfile("DocumentConversion_Accuracy"); setStep("Applying settings..."); FREngine.PrepareImageMode pim = engine.CreatePrepareImageMode(); FREngine.DocumentProcessingParams dpp = engine.CreateDocumentProcessingParams(); FREngine.PageProcessingParams ppp = dpp.PageProcessingParams; ppp.RecognizerParams.SetPredefinedTextLanguage(settings.Language); disableAllModifications(pim, ppp); pim.AutoOverwriteResolution = false; if (settings.CorrectResolution) { if (settings.NewResolution == 0) { pim.AutoOverwriteResolution = true; } else if (settings.NewResolution > 0) { pim.OverwriteResolution = true; pim.XResolutionToOverwrite = settings.NewResolution; pim.YResolutionToOverwrite = settings.NewResolution; } } if (settings.ConvertToBW) { pim.DiscardColorImage = true; } if (settings.DeskewImage) { pim.CorrectSkew = true; } // Detect orientation for all pages setStep("Detecting orientation..."); FREngine.RotationTypeEnum[] rotation = null; if (settings.CorrectOrientationMode == ProcessingSettings.OrientationCorrectionMode.Automatic) { rotation = detectOrientation(imagePath, pim, ppp); } setStep("Loading image..."); // Create document FREngine.FRDocument frDocument = engine.CreateFRDocument(); RecognitionStatistics recognitionStats = new RecognitionStatistics(); try { // Add image file to document frDocument.AddImageFile(imagePath, pim, null); if (frDocument.Pages.Count == 0) { throw new Exception("No pages in a file"); } setStep("Performing image modification..."); for (int pageIndex = 0; pageIndex < frDocument.Pages.Count; pageIndex++) { FREngine.IFRPage frPage = frDocument.Pages[pageIndex]; FREngine.RotationTypeEnum pageRotation = FREngine.RotationTypeEnum.RT_UnknownRotation; if (rotation != null && pageIndex < rotation.Length) { pageRotation = rotation[pageIndex]; } applyGeometricalTransformations(frPage, ppp, settings, pageRotation); GC.Collect(); GC.WaitForPendingFinalizers(); frPage.Flush(true); } int[] sourcePageIndices = splitImage(frDocument, ppp, settings); for (int pageIndex = 0; pageIndex < frDocument.Pages.Count; pageIndex++) { FREngine.IFRPage frPage = frDocument.Pages[pageIndex]; applyImageTransformations(frPage, settings); GC.Collect(); GC.WaitForPendingFinalizers(); frPage.Flush(true); } if (settings.IsRecognize) { setStep("Recognizing image..."); frDocument.Process(dpp); } setStep("Applying visual enhancements..."); for (int pageIndex = 0; pageIndex < frDocument.Pages.Count; pageIndex++) { FREngine.IFRPage frPage = frDocument.Pages[pageIndex]; applyVisualEnhancements(frPage, settings); GC.Collect(); GC.WaitForPendingFinalizers(); frPage.Flush(true); } TimeSpan processingTime = DateTime.Now - startTime; setStep("Computing statistics..."); recognitionStats = computeStatistics(frDocument); recognitionStats.TotalProcessingTime = processingTime; recognitionStats.SourcePageIndices = sourcePageIndices; setStep("Retrieving images..."); for (int pageIndex = 0; pageIndex < frDocument.Pages.Count; pageIndex++) { if (recognitionStats.PreprocessedImages == null) { recognitionStats.PreprocessedImages = new System.Drawing.Image[frDocument.Pages.Count]; } FREngine.IFRPage frPage = frDocument.Pages[pageIndex]; recognitionStats.PreprocessedImages[pageIndex] = getImageFromPage(frPage); GC.Collect(); GC.WaitForPendingFinalizers(); frPage.Flush(false); } //frDocument.Export(AppDomain.CurrentDomain.BaseDirectory + "FileSample2.xml", FREngine.FileExportFormatEnum.FEF_XML, null); //frDocument.Export(AppDomain.CurrentDomain.BaseDirectory + "FileSample2.txt", FREngine.FileExportFormatEnum.FEF_TextUnicodeDefaults, null); } finally { frDocument.Close(); } return(recognitionStats); }