Example #1
0
        public void getDataViaRescaling(Image sourceImage, ref Tesseract_OCR_Window.pdfPageInfo infoPage, ref Dictionary <string, string> replaceWords, float stepScale, int amountOfSteps)
        {
            //подключаем распознаватель
            TesseractEngine ocrRus = new TesseractEngine("./tessdata", "rus", EngineMode.Default);
            TesseractEngine ocrEng = new TesseractEngine("./tessdata", "eng", EngineMode.Default);

            //создаем графический фильтр
            TResizeTool resizeTool = new TResizeTool();

            //ставим методику распознавания страницы
            PageSegMode pSegMode = PageSegMode.SparseText;

            float scaleValue = 1.0f;//исходный масштаб

            List <string> seriaNumberList = new List <string>();
            List <string> countryList     = new List <string>();
            List <string> orgSertList     = new List <string>();
            List <string> shortNumberList = new List <string>();
            List <string> typeSeriaList   = new List <string>();

            for (int k = 0; k <= amountOfSteps; k++)
            {
                //по индексу отмасш-й страницы берем исходную(без масштаба)
                Image img = sourceImage;

                int newWidth  = Convert.ToInt32((img.Width) * ((k * stepScale) + scaleValue));
                int newHeight = Convert.ToInt32((img.Height) * ((k * stepScale) + scaleValue));

                Bitmap imgBitmap = resizeTool.resizeImage(img, newWidth, newHeight);

                Image rescaledPage = ((Image)imgBitmap);

                string rescaledPageTextRus = "";
                string rescaledPageTextEng = "";

                //удаляем процесс, чтобы не было ошибки
                using (var pageRus = ocrRus.Process(imgBitmap, pSegMode))
                {
                    rescaledPageTextRus = pageRus.GetText();
                }

                //удаляем процесс, чтобы не было ошибки
                using (var pageEng = ocrEng.Process(imgBitmap, pSegMode))
                {
                    rescaledPageTextEng = pageEng.GetText();
                }

                //набираем статистику для последующего поиска наибольшего соответствия
                string seriaNumber = getSeriaNumber(rescaledPageTextRus, rescaledPageTextEng);
                string country     = getCountry(rescaledPageTextEng);
                string orgSert     = getOrgSert(rescaledPageTextRus);
                string shortNumber = getShortNumber(rescaledPageTextRus);
                string typeSeria   = getTypeSeria(rescaledPageTextRus, rescaledPageTextEng, ref replaceWords);

                if (seriaNumber != "")
                {
                    seriaNumberList.Add(seriaNumber);//серия
                }

                if (country != "")
                {
                    countryList.Add(country);//страна
                }

                if (orgSert != "")
                {
                    orgSertList.Add(orgSert);//орган по сертификации
                }

                if (shortNumber != "")
                {
                    shortNumberList.Add(shortNumber);//shortNumber
                }

                if (typeSeria != "")
                {
                    typeSeriaList.Add(typeSeria);//тип серии
                }
            }

            ocrRus.Dispose();
            ocrEng.Dispose();

            //собираем данные для структуры infoPage
            infoPage.seriaNumber_ = highestMatch(seriaNumberList);
            infoPage.country_     = highestMatch(countryList);
            infoPage.orgSert_     = highestMatch(orgSertList);
            infoPage.shortNumber_ = highestMatch(shortNumberList);
            infoPage.typeSeria_   = highestMatch(typeSeriaList);
        }
Example #2
0
        public List <Tesseract_OCR_Window.pdfPageInfo> getPrilozenia(Tesseract_OCR_Window.pdfPageInfo sertificate)
        {
            List <Tesseract_OCR_Window.pdfPageInfo> prilozeniaList = new List <Tesseract_OCR_Window.pdfPageInfo>();

            //тащим приложения
            var sertAndPril = ConsoleApplication10.Program.LoadCert(sertificate.orgSert_, sertificate.shortNumber_);

            string prilozenia = sertAndPril.Info.prilblanks;

            string[] separPrilozenia = prilozenia.Split(',');

            List <string> separPrilozeniaList = new List <string>();

            //проверка на наличие приложения
            if (separPrilozenia.Length > 0)
            {
                if (separPrilozenia[0] == "n")
                {
                    return(prilozeniaList);
                }
            }

            //сохраняем приложения
            for (int k = 0; k < separPrilozenia.Length; k++)
            {
                //чистим приложения
                string pattern     = @"[\W| ]*";
                string replacement = "";

                separPrilozenia[k] = Regex.Replace(separPrilozenia[k], pattern, replacement);

                int    sertSeriaNumber  = Convert.ToInt32(separPrilozenia[k]);
                string clearSeriaNumber = "0000000";
                string prilSeriaNumber  = Convert.ToString(sertSeriaNumber);

                int amountOfSymbolsSSN = prilSeriaNumber.Length;
                int amountClearSN      = clearSeriaNumber.Length;

                //clearSeriaNumber=clearSeriaNumber.Remove(2, 5).Insert(2, prilSeriaNumber);
                clearSeriaNumber = clearSeriaNumber.Remove(amountClearSN - amountOfSymbolsSSN, amountOfSymbolsSSN).Insert(amountClearSN - amountOfSymbolsSSN, prilSeriaNumber);

                separPrilozeniaList.Add(clearSeriaNumber);
            }

            //сортируем
            separPrilozeniaList.Sort();

            for (int k = 0; k < separPrilozeniaList.Count; k++)
            {
                //структура страницы pdf
                Tesseract_OCR.Tesseract_OCR_Window.pdfPageInfo infoPrilPage;

                infoPrilPage = sertificate;

                infoPrilPage.numberOfPDFPage_ += k;
                infoPrilPage.isTesseracted_    = false;
                infoPrilPage.typeOfPage_       = Tesseract_OCR.Tesseract_OCR_Window.typeOfPage.PRILOZENIE;
                infoPrilPage.textRus_          = "";
                infoPrilPage.textEng_          = "";

                infoPrilPage.seriaNumber_ = separPrilozeniaList[k];
                infoPrilPage.fullNumber_  = infoPrilPage.techReglament_ + "RU " + infoPrilPage.typeOfSert_ + "-" + infoPrilPage.country_ + "." + infoPrilPage.orgSert_ + "." + infoPrilPage.typeSeria_ + "." + infoPrilPage.shortNumber_ + "." + infoPrilPage.seriaNumber_;

                if (infoPrilPage.seriaNumber_ == "")
                {
                    infoPrilPage.isTesseracted_ = false;
                }
                else
                {
                    infoPrilPage.isTesseracted_ = true;
                }

                infoPrilPage.fullNumber_ = infoPrilPage.fullNumber_.ToUpper();//ставим верхний регистр

                prilozeniaList.Add(infoPrilPage);
            }

            return(prilozeniaList);
        }
Example #3
0
        //получение всех данные по странице с помощью масштабирования страницы с разным шагом(исп-ть, если не находит на исходном масштабе)
        //sourceImage = входное изображение, stepScale = шаг масштабирования, amountOfSteps = кол-во проходов рескейлинга,
        //infoPage = ссылка на структуру для заполнения
        public void getData(Image sourceImage, ref Tesseract_OCR_Window.pdfPageInfo infoPage, ref Dictionary <string, string> replaceWords, float stepScale, int amountOfSteps)
        {
            //подключаем распознаватель
            TesseractEngine ocrRus = new TesseractEngine("./tessdata", "rus", EngineMode.Default);
            TesseractEngine ocrEng = new TesseractEngine("./tessdata", "eng", EngineMode.Default);

            //создаем графический фильтр
            TResizeTool resizeTool = new TResizeTool();

            //ставим методику распознавания страницы
            PageSegMode pSegMode = PageSegMode.SparseText;

            string seriaNumber = ""; //серия
            string country     = ""; //страна
            string orgSert     = ""; //организация
            string shortNumber = ""; //short number
            string typeSeria   = ""; //тип серии

            float scaleValue = 1.0f; //исходный масштаб

            for (int k = 0; k <= amountOfSteps; k++)
            {
                //по индексу отмасш-й страницы берем исходную(без масштаба)
                Image img = sourceImage;

                int newWidth  = Convert.ToInt32((img.Width) * ((k * stepScale) + scaleValue));
                int newHeight = Convert.ToInt32((img.Height) * ((k * stepScale) + scaleValue));

                Bitmap imgBitmap = resizeTool.resizeImage(img, newWidth, newHeight);

                Image rescaledPage = ((Image)imgBitmap);

                string rescaledPageTextRus = "";
                string rescaledPageTextEng = "";

                //удаляем процесс, чтобы не было ошибки
                using (var pageRus = ocrRus.Process(imgBitmap, pSegMode))
                {
                    rescaledPageTextRus = pageRus.GetText();
                }

                //удаляем процесс, чтобы не было ошибки
                using (var pageEng = ocrEng.Process(imgBitmap, pSegMode))
                {
                    rescaledPageTextEng = pageEng.GetText();
                }

                //собираем данные для структуры infoPage
                if (infoPage.seriaNumber_ == "")
                {
                    seriaNumber = getSeriaNumber(rescaledPageTextRus, rescaledPageTextEng);//серия

                    if (seriaNumber != "")
                    {
                        infoPage.seriaNumber_ = seriaNumber;
                    }
                }

                if (infoPage.country_ == "")
                {
                    country = getCountry(rescaledPageTextEng);

                    if (country != "")
                    {
                        infoPage.country_ = country;
                    }
                }

                if (infoPage.orgSert_ == "")
                {
                    orgSert = getOrgSert(rescaledPageTextRus);

                    if (orgSert != "")
                    {
                        infoPage.orgSert_ = orgSert;
                    }
                }

                if (infoPage.shortNumber_ == "")
                {
                    shortNumber = getShortNumber(rescaledPageTextRus);

                    if (shortNumber != "")
                    {
                        infoPage.shortNumber_ = shortNumber;
                    }
                }

                if (infoPage.typeSeria_ == "")
                {
                    typeSeria = getTypeSeria(rescaledPageTextRus, rescaledPageTextEng, ref replaceWords);

                    if (typeSeria != "")
                    {
                        infoPage.typeSeria_ = typeSeria;
                    }
                }
            }

            ocrRus.Dispose();
            ocrEng.Dispose();
        }