Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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++;
                }
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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
            {
            }
        }
Example #6
0
        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);
        }