示例#1
1
        private void OnSubmitFileClicked(object sender, EventArgs args)
        {
            if (imageFile.PostedFile != null && imageFile.PostedFile.ContentLength > 0)
            {
                // for now just fail hard if there's any error however in a propper app I would expect a full demo.

                using (var engine = new TesseractEngine(Server.MapPath(@"./tessdata"), "eng", EngineMode.Default))
                {
                    // have to load Pix via a bitmap since Pix doesn't support loading a stream.
                    using (var image = new System.Drawing.Bitmap(imageFile.PostedFile.InputStream))
                    {
                        using (var pix = PixConverter.ToPix(image))
                        {
                            using (var page = engine.Process(pix))
                            {
                                meanConfidenceLabel.InnerText = String.Format("{0:P}", page.GetMeanConfidence());
                                resultText.InnerText = page.GetText();
                            }
                        }
                    }
                }
                inputPanel.Visible = false;
                resultPanel.Visible = true;
            }
        }
示例#2
1
		public void Initialise_WithTessDataPrefixSet()
		{
			Environment.SetEnvironmentVariable("TESSDATA_PREFIX", Environment.CurrentDirectory);
			using (var engine = new TesseractEngine(null, "eng", EngineMode.Default)) {
				
			}
		}
示例#3
0
		public void Initialise_Rus_ShouldStartEngine()
		{
			using (var engine = new TesseractEngine(@"./tessdata", "rus", EngineMode.Default)) {
				
				
			}
		}
示例#4
0
        public void CanGenerateHOCROutput()
        {
            string actualResult;
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                using (var img = Pix.LoadFromFile("./phototest.tif")) {
                    using (var page = engine.Process(img)) {
                        actualResult = NormaliseNewLine(page.GetHOCRText(1));
                    }
                }
            }

            const string ExpectedResultPath = "./Results/EngineTests.CanGenerateHOCROutput.txt";
            if (File.Exists(ExpectedResultPath)) {
                var expectedResult = NormaliseNewLine(File.ReadAllText(ExpectedResultPath));
                if (expectedResult != actualResult) {
                    var actualResultPath = String.Format("./Results/EngineTests.CanGenerateHOCROutput_{0:yyyyMMddTHHmmss}.txt", DateTime.UtcNow);
                    File.WriteAllText(actualResultPath, actualResult);
                    Assert.Fail("Expected results to be {0} but was {1}", ExpectedResultPath, actualResultPath);
                }
            } else {
                var actualResultPath = String.Format("./Results/EngineTests.CanGenerateHOCROutput_{0:yyyyMMddTHHmmss}.txt", DateTime.UtcNow);
                File.WriteAllText(actualResultPath, actualResult);
                Assert.Fail("Expected result did not exist, actual results saved to {0}", actualResultPath);
            }
        }
示例#5
0
 public void Dispose()
 {
     if (engine != null) {
         engine.Dispose();
         engine = null;
     }
 }
示例#6
0
		public void Initialise_ShouldStartEngine(
			[ValueSource("DataPaths")] string datapath)
		{
			using (var engine = new TesseractEngine(datapath, "eng", EngineMode.Default)) {
				
				
			}
		}
示例#7
0
		public void Initialise_ShouldThrowErrorIfDatapathNotCorrect()
		{
			Assert.That(() => {
			            	using (var engine = new TesseractEngine(@"./IDontExist", "eng", EngineMode.Default)) {
			            		
			            		
			            	}
			            }, Throws.InstanceOf(typeof(TesseractException)));
		}
示例#8
0
        public void CanParseText()
        {
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                using(var img = Pix.LoadFromFile("./phototest.tiff")) {
                    using(var page = engine.Process(img)) {
                        var text = page.GetText();

                        Assert.That(text, Is.EqualTo(""));

                    }
                }
            }
        }
示例#9
0
 public void CanSetDoubleVariable(string variableName, double variableValue)
 {
     using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
         var variableWasSet = engine.SetVariable(variableName, variableValue);
         Assert.That(variableWasSet, Is.True, "Failed to set variable '{0}'.", variableName);
         double result;
         if(engine.TryGetDoubleVariable(variableName, out result)) {
             Assert.That(result, Is.EqualTo(variableValue));
         } else {
             Assert.Fail("Failed to retrieve value for '{0}'.", variableName);
         }
     }
 }
示例#10
0
 public void CanSetBooleanVariable(bool variableValue)
 {
     const string VariableName = "classify_enable_learning";
     using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
         var variableWasSet = engine.SetVariable(VariableName, variableValue);
         Assert.That(variableWasSet, Is.True, "Failed to set variable '{0}'.", VariableName);
         bool result;
         if(engine.TryGetBoolVariable(VariableName, out result)) {
             Assert.That(result, Is.EqualTo(variableValue));
         } else {
             Assert.Fail("Failed to retrieve value for '{0}'.", VariableName);
         }
     }
 }
示例#11
0
		public void CanParseText_UsingMode(PageSegMode mode, String expectedText)
		{

			using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
				var demoFilename = String.Format("./Data/Ocr/PSM_{0}.png", mode);
				using (var pix = Pix.LoadFromFile(demoFilename)) {
					using (var page = engine.Process(pix, mode)) {
						var text = page.GetText().Trim();

						Assert.That(text, Is.EqualTo(expectedText));

					}
				}    
			}
		}
示例#12
0
        public void CanProcessBitmap()
        {
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                using (var img = new Bitmap("./phototest.tif")) {
                    using (var page = engine.Process(img)) {
                        var text = page.GetText();

                        const string expectedText =
                            "This is a lot of 12 point text to test the\nocr code and see if it works on all types\nof file format.\n\nThe quick brown dog jumped over the\nlazy fox. The quick brown dog jumped\nover the lazy fox. The quick brown dog\njumped over the lazy fox. The quick\nbrown dog jumped over the lazy fox.\n\n";

                        Assert.That(text, Is.EqualTo(expectedText));
                    }
                }
            }
        }
示例#13
0
        public void CanParseUznFile()
        {
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                var inputFilename = TestFilePath(@"Ocr\uzn-test.png");
                using (var img = Pix.LoadFromFile(inputFilename)) {
                    using (var page = engine.Process(img, inputFilename, PageSegMode.SingleLine)) {
                        var text = page.GetText();

                        const string expectedText =
                            "This is another test\n\n";

                        Assert.That(text, Is.EqualTo(expectedText));
                    }
                }
            }
        }
示例#14
0
        public void CanProcessEmptyPxUsingResultIterator()
        {
            string actualResult;
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                using (var img = Pix.LoadFromFile("./data/ocr/empty.png")) {
                    using (var page = engine.Process(img)) {
                        actualResult = WriteResultsToString(page);
                    }
                }
            }

            Assert.That(actualResult, Is.EqualTo(
            @"</word></line>
            </para>
            </block>
            "));
        }
示例#15
0
		public void CanParseMultipageTif()
		{
			using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
				using (var pixA = PixArray.LoadMultiPageTiffFromFile("./Data/processing/multi-page.tif")) {
					int i = 1;
					foreach (var pix in pixA) {
						using (var page = engine.Process(pix)) {
							var text = page.GetText().Trim();

							string expectedText = String.Format("Page {0}", i);
							Assert.That(text, Is.EqualTo(expectedText));
						}
						i++;
					}
				}
			}
		}
示例#16
0
        private static void SetVariablesAccordingToConfig(TesseractEngine engine, ZoneConfiguration barcodeConfig)
        {
            if (barcodeConfig.TextualDataFilter.FilterType == FilterType.Alpha)
            {
                engine.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-");
            }

            if (barcodeConfig.TextualDataFilter.FilterType == FilterType.AlphaOnly)
            {
                engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-");
            }

            if (barcodeConfig.TextualDataFilter.FilterType == FilterType.Digits)
            {
                engine.SetVariable("tessedit_char_whitelist", "0123456789");
            }

            if (barcodeConfig.TextualDataFilter.FilterType == FilterType.Number)
            {
                engine.SetVariable("tessedit_char_whitelist", "0123456789,.");
            }
        }
示例#17
0
        public void CanProcessDifferentRegionsInSameImage()
        {
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                using (var img = Pix.LoadFromFile("./phototest.tif")) {
                    using (var page = engine.Process(img, Rect.FromCoords(0, 0, img.Width, 188))) {
                        var region1Text = page.GetText();

                        const string expectedTextRegion1 =
                            "This is a lot of 12 point text to test the\nocr code and see if it works on all types\nof file format.\n\n";

                        Assert.That(region1Text, Is.EqualTo(expectedTextRegion1));

                        page.RegionOfInterest = Rect.FromCoords(0, 188, img.Width, img.Height);

                        var region2Text = page.GetText();
                        const string expectedTextRegion2 =
                            "The quick brown dog jumped over the\nlazy fox. The quick brown dog jumped\nover the lazy fox. The quick brown dog\njumped over the lazy fox. The quick\nbrown dog jumped over the lazy fox.\n\n";

                        Assert.That(region2Text, Is.EqualTo(expectedTextRegion2));
                    }
                }
            }
        }
示例#18
0
        public void WritesOutThresholdedImageWhenOCRing()
        {
            var expectedFilePath = Path.Combine(Environment.CurrentDirectory, "tessinput.tif");

            if (File.Exists(expectedFilePath)) {
                File.Delete(expectedFilePath);
            }

            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                engine.SetVariable("tessedit_write_images", true);

                using (var img = Pix.LoadFromFile("./phototest.tif")) {
                    using (var page = engine.Process(img)) {
                        var region1Text = page.GetText();

                        Assert.That(File.Exists(expectedFilePath));
                    }
                }
            }
        }
示例#19
0
        public void CanProcessPixUsingResultIterator()
        {
            string actualResult;
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                using (var img = Pix.LoadFromFile("./phototest.tif")) {
                    using (var page = engine.Process(img)) {
                        actualResult = WriteResultsToString(page);
                    }
                }
            }

            const string ExpectedResultPath = "./Results/EngineTests.CanProcessPixUsingResultIterator.txt";
            var expectedResult = File.ReadAllText(ExpectedResultPath);
            if (expectedResult != actualResult) {
                var actualResultPath = String.Format("./Results/EngineTests.CanProcessPixUsingResultIterator_{0:yyyyMMddTHHmmss}.txt", DateTime.UtcNow);
                File.WriteAllText(actualResultPath, actualResult);
                Assert.Fail("Expected results to be {0} but was {1}", ExpectedResultPath, actualResultPath);
            }
        }
示例#20
0
        public void CanSetClassifyBlnNumericModeVariable()
        {
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
                engine.SetVariable("classify_bln_numeric_mode", 1);

                using (var img = Pix.LoadFromFile("./Data/processing/numbers.png")) {
                    using (var page = engine.Process(img)) {
                        var text = page.GetText();

                        const string expectedText = "1234567890\n\n";

                        Assert.That(text, Is.EqualTo(expectedText));
                    }
                }
            }
        }
示例#21
0
        public Window1()
        {
            InitializeComponent();

            Mat src = new Mat(@"./desktop.jpg");

            Cv2.ImShow("src", src);
            //src = src.Resize(new Size(src.Width / 2, src.Height / 2));
            for (var y = 0; y < src.Height; y++)
            {
                for (var x = 0; x < src.Width; x++)
                {
                    var color = src.Get <Vec3b>(y, x);
                    //if (color.Item2 < 175)
                    if (color.Item2 < 225)
                    {
                        color.Item0 = 255;
                        color.Item1 = 0;
                        color.Item2 = 0;
                    }
                    src.Set(y, x, color);
                }
            }
            Cv2.ImShow("fade", src);
            Mat gray   = new Mat();
            Mat binary = new Mat();

            Cv2.CvtColor(src, gray, ColorConversionCodes.RGB2GRAY);
            gray = gray.GaussianBlur(new Size(5, 5), 0);
            gray = gray.Blur(new Size(5, 5));
            gray = gray.BoxFilter(-1, new Size(10, 10), normalize: true);
            Cv2.ImShow("gray", gray);
            Cv2.Threshold(gray, binary, 100, 255, ThresholdTypes.Otsu | ThresholdTypes.Binary);
            var element = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3));

            binary = binary.Erode(element);
            binary = binary.MorphologyEx(MorphTypes.Close, element);
            Cv2.ImShow("bin", binary);
            //var line = binary.Canny(100, 200);
            //Cv2.ImShow("line", line);
            //Cv2.WaitKey();
            //建立轮廓接受数组
            Point[][]        contours;
            HierarchyIndex[] hierarchy;
            Cv2.FindContours(binary, out contours, out hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxTC89KCOS);
            //最小外接矩形接收数组
            MessageBox.Show(contours.Length.ToString());
            RotatedRect[] rotateRect    = new RotatedRect[contours.Length];
            Point[][]     contours_poly = new Point[contours.Length][];
            for (int i = 0; i < contours.Length; i++)
            {
                contours_poly[i] = Cv2.ApproxPolyDP(contours[i], 30, true); //返回凸包,单线长大于30过滤

                rotateRect[i] = Cv2.MinAreaRect(contours_poly[i]);          //最小外接矩形集合

                Point2f[] pot = new Point2f[4];                             //新建点集合接收点集合

                //for (int i = 0; i < rotateRect.Length; i++)
                //{
                var angle = rotateRect[i].Angle; //矩形角度
                pot = rotateRect[i].Points();    //矩形的4个角
                var line1 = Math.Sqrt((pot[0].X - pot[1].X) * (pot[0].X - pot[1].X) + (pot[0].Y - pot[1].Y) * (pot[0].Y - pot[1].Y));
                var line2 = Math.Sqrt((pot[0].X - pot[3].X) * (pot[0].X - pot[3].X) + (pot[0].Y - pot[3].Y) * (pot[0].Y - pot[3].Y));
                if (line1 * line2 < 1000)//过滤,太小的矩形直接pass
                {
                    continue;
                }
                if (line1 > line2)//依据实际情况进行判断
                {
                    angle += 90;
                }

                Mat Roi = new Mat(src.Size(), MatType.CV_8UC3);
                Roi.SetTo(0);//全黑
                //Cv2.DrawContours(binary, contours, -1, Scalar.White, -1);//在二值图像中圈出轮廓区域并染白
                Cv2.DrawContours(binary, contours, -1, Scalar.White, 1);
                Cv2.ImShow("bin", binary);
                src.CopyTo(Roi, binary);//将原图通过mask抠图到Roi
                Cv2.ImShow("Roi", Roi);
                Mat afterRotato = new Mat(src.Size(), MatType.CV_8UC3);
                afterRotato.SetTo(0);
                Point2f center = rotateRect[i].Center;
                Mat     M      = Cv2.GetRotationMatrix2D(center, angle, 1);                                   //计算变换矩阵
                Cv2.WarpAffine(Roi, afterRotato, M, Roi.Size(), InterpolationFlags.Linear, BorderTypes.Wrap); //得到变换后的图像,滤除其他信息
                Cv2.ImShow("旋转后", afterRotato);



                Mat bin2 = new Mat();
                Cv2.ImShow("after", afterRotato);
                Cv2.CvtColor(afterRotato, bin2, ColorConversionCodes.RGB2GRAY);
                Cv2.Threshold(bin2, bin2, 50, 255, ThresholdTypes.Binary | ThresholdTypes.Otsu);
                Point[][]        con;
                HierarchyIndex[] temp;//接收矫正后的轮廓信息
                Cv2.FindContours(bin2, out con, out temp, RetrievalModes.External, ContourApproximationModes.ApproxSimple);
                for (int j = 0; j < con.Length; j++)
                {
                    Rect rect = Cv2.BoundingRect(con[j]); //直接使用矫正矩形,因为矫正后不需要再旋转
                    if (rect.Height * rect.Width < 8000)  //过滤干扰信息
                    {
                        continue;
                    }
                    Mat dstImg = new Mat(afterRotato, rect);
                    dstImg = dstImg.CvtColor(ColorConversionCodes.RGB2GRAY);
                    dstImg = dstImg.Threshold(50, 255, ThresholdTypes.Otsu | ThresholdTypes.Binary);
                    Cv2.BitwiseNot(dstImg, dstImg, new Mat());
                    dstImg = new Mat(dstImg, new Rect(100, 100, dstImg.Width - 200, dstImg.Height - 200));
                    Cv2.ImShow("dst", dstImg);
                    dstImg.SaveImage("dst1.jpg");

                    var engine     = new TesseractEngine("./tessdata", "eng", EngineMode.Default);
                    var resProcess = engine.Process(Pix.LoadTiffFromMemory(dstImg.ToBytes(".tiff")));
                    MessageBox.Show(resProcess.GetText());

                    ////string name = "dst" + i;//主要看调试的时候有几个结果
                    //dstImg = dstImg.CvtColor(ColorConversionCodes.RGB2GRAY);
                    //dstImg = dstImg.Threshold(10, 255, ThresholdTypes.Otsu);
                    //Cv2.ImShow("chan", dstImg.Canny(100, 200));

                    //dstImg.FindContours(out var con1, out var hie1, RetrievalModes.External,
                    //    ContourApproximationModes.ApproxNone);
                    //dstImg.DrawContours(con1, -1, Scalar.Green, 3);
                    //Cv2.ImShow("dst2", dstImg);
                }
            }
            Cv2.WaitKey();
            Console.ReadLine();
        }
示例#22
0
        public void Init()
        {
            if (!Directory.Exists(ResultsDirectory)) Directory.CreateDirectory(ResultsDirectory);

            engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);
        }
        public TesseractEngineInstance()
        {
            string path = GetTesseractDataPath();

            Engine = new TesseractEngine(path, "eng", EngineMode.Default);
        }
示例#24
0
 public void Init()
 {
     engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);
 }
示例#25
0
        private void ConvertImages()
        {
            for (int i = 0; i < files.Count; i++)
            {
                OcrFile file = files[i];

                Bitmap bitmap = new Bitmap(file.FileInfo.FullName);
                if (bitmap == null)
                {
                    file.Status = "Not an image...";

                    //Refresh the UI
                    lvFiles.Dispatcher.BeginInvoke(DispatcherPriority.Normal, null, null);

                    continue;
                }

                string invertedImagePath = Path.Combine(file.FileInfo.DirectoryName, GetInvertedImageName(file.FileInfo));

                //First remove transparency by drawing a black background and drawing the text on it
                //Then invert the colors of the whole thing. It's better for the OCR
                //Finally scale it, also better for the OCR
                using (var b = new Bitmap(bitmap.Width, bitmap.Height))
                {
                    b.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution);

                    using (var g = Graphics.FromImage(b))
                    {
                        g.Clear(Color.Black);
                        g.DrawImageUnscaled(bitmap, 0, 0);
                    }

                    MagickImage magickImage = new MagickImage(b);
                    magickImage.Negate(Channels.RGB);

                    //magickImage.FilterType = FilterType.Lanczos2;
                    magickImage.Resize(1024, 1024);

                    Bitmap inverted = magickImage.ToBitmap();
                    inverted.Save(invertedImagePath);
                    inverted.Dispose();

                    magickImage.Dispose();
                }

                try
                {
                    using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                    {
                        using (var img = Pix.LoadFromFile(invertedImagePath))
                        {
                            using (var page = engine.Process(img))
                            {
                                File.WriteAllText(string.Concat(file.FileInfo.FullName, ".txt"), page.GetText());
                                file.Confidence = page.GetMeanConfidence();
                                file.Status     = string.Concat("Done! (", file.Confidence.ToString("0.00"), ")");
                            }
                        }
                    }
                }
                catch (Exception error)
                {
                    file.Status = "Tesseract Error: " + error.Message;
                }

                File.Delete(invertedImagePath);

                //Refresh the UI
                lvFiles.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new UpdateFileDelegate(UpdateFile), file, i);
            }

            //I have no idea what I'm doing...
            //lvFiles.ItemsSource = null;
            //lvFiles.ItemsSource = files;

            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new ConversionDoneDelegate(ConversionDone));
        }
示例#26
0
 public Display()
 {
     eng = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);
     eng.SetVariable("debug_file", "nul");
 }
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();

            open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp; *.png)|*.jpg; *.jpeg; *.gif; *.bmp; *png";
            if (open.ShowDialog() == DialogResult.OK)
            {
                imgInput          = new Image <Bgr, byte>(open.FileName);
                pictureBox1.Image = imgInput.Bitmap;
            }
            //Image<Bgr, byte> imgContour = new Image<Bgr, byte>(open.FileName);
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            //Converting to greyscale
            Image <Gray, byte> gray      = imgInput.Convert <Gray, byte>().PyrDown().PyrUp();
            Image <Gray, byte> imgOutput = imgInput.Convert <Gray, byte>().ThresholdBinary(new Gray(100), new Gray(255));
            Image <Gray, byte> imgCanny  = gray.Canny(120, 180);

            //Image<Gray, byte> imgCanny = new Image<Gray, byte>(imgInput.Width, imgInput.Height, new Gray(0));
            //imgCanny = imgOutput.Canny(50, 20);


            //Image<Gray, byte> gray = imgInput.Convert<Gray, byte>().ThresholdBinary(new Gray(100), new Gray(255));
            Emgu.CV.Util.VectorOfVectorOfPoint contours = new Emgu.CV.Util.VectorOfVectorOfPoint();
            Emgu.CV.Util.VectorOfVectorOfPoint poscont  = new Emgu.CV.Util.VectorOfVectorOfPoint();
            Mat hier = new Mat();

            CvInvoke.FindContours(imgOutput, contours, hier, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
            //CvInvoke.DrawContours(imgInput, contours, -1, new MCvScalar(255, 0,0),3);
            pictureBox2.Image = imgInput.Bitmap;
            pictureBox1.Image = imgOutput.Bitmap;


            Dictionary <int, double> dict = new Dictionary <int, double>();

            if (contours.Size > 0)
            {
                for (int i = 0; i < contours.Size; i++)
                {
                    //double area = CvInvoke.ContourArea(contours[i]);
                    Rectangle rect = CvInvoke.BoundingRectangle(contours[i]);
                    //CvInvoke.DrawContours(imgInput, contours, -1, new MCvScalar(255, 0, 0), 3);
                    //CvInvoke.Rectangle(imgInput, rect, new MCvScalar(255, 0, 0), 3);
                    double ratio = rect.Width / rect.Height;
                    double area  = rect.Width * rect.Height;
                    if (/*rect.Width > 100 && rect.Width < 300 && rect.Height < 100 */ area > 2000 && area < pictureBox2.Width * pictureBox2.Height)
                    {
                        dict.Add(i, area);
                        CvInvoke.Rectangle(imgInput, rect, new MCvScalar(255, 0, 0), 3);
                        poscont = contours;

                        //Image<Bgr, byte> test = contours.ima
                        //MessageBox.Show(string.Format("Width is: {0}\nHeight is: {1}\nArea is: {2}", rect.Width, rect.Height, area));
                    }
                }
                foreach (var it in dict)
                {
                    int key = int.Parse(it.Key.ToString());
                    //CvInvoke.DrawContours(imgInput, contours, key, new MCvScalar(255, 0, 0), 3);
                }
            }

            tesseract = new TesseractEngine(m_path, "eng");

            //pictureBox2.Image = grayscale.Bitmap;
            pictureBox1.Image = imgOutput.Bitmap;

            pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
            // pictureBox1.Image = gray.Bitmap;


            //conversion to binary image
            //pictureBox3.Image = Image.FromFile(op.FileName);
            //pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage;int
            //pictureBox3.BorderStyle = BorderStyle.Fixed3D;
            //Bitmap img = new Bitmap(pictureBox2.Image);


            ///----------------BINARY IMAGE CODE------------------------------

            /*StringBuilder t = new StringBuilder();
             * for (int i = 0; i < img.Width; i++)
             * {
             *  for (int j = 0; j < img.Height; j++)
             *  {
             *      t.Append((img.GetPixel(i, j).R > 100 && img.GetPixel(i, j).G > 100 &&
             *               img.GetPixel(i, j).B > 100) ? 0 : 1);
             *  }
             *  t.AppendLine();
             * }
             * Color c = Color.Black;
             * Color v = Color.Black;
             * int av = 0, k=0;
             * for (int i = 0; i < greyscale.Width;i++ )
             * {
             *  for (int j = 0; j < greyscale.Height;j++ )
             *  {
             *      c = greyscale.GetPixel(i, j);
             *      //av = (c.R + c.B + c.G) / 3;
             *      v = Color.FromArgb(c.A, t[k], t[k], t[k]);
             *      img.SetPixel(i, j, v);
             *      k++;
             *  }
             * }
             * //  textBox1.Text = t.ToString();
             * pictureBox1.Image = greyscale;
             * pictureBox2.Image = img;
             * pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;*/



            //---------------Conversion to grayscale-----------//

            /*Bitmap greyscale = new Bitmap(open.FileName);
             *
             * int width = greyscale.Width;
             * int height = greyscale.Height;
             * Color color;
             * for(int i =0;i<height;i++)
             * {
             * for (int j=0;j<width;j++)
             * {
             * color = greyscale.GetPixel(j, i);
             * int a = color.A;
             * int r = color.R;
             * int g = color.G;
             * int b = color.B;
             * int avg = (r + g + b) / 3;
             *
             * greyscale.SetPixel(j, i, Color.FromArgb(a, avg, avg, avg));
             * }
             * }
             * pictureBox2.Image = greyscale;*/
        }
        /// <summary>
        /// ocr
        /// </summary>
        /// <param name="args"></param>
        static void TesseractTest(string[] args)
        {
            var testImagePath = "./a.jpg";// "./b.tif";// "c:/myfile/a.jpg";

            if (args.Length > 0)
            {
                testImagePath = args[0];
            }

            try
            {
                using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                {
                    using (var img = Pix.LoadFromFile(testImagePath))
                    {
                        using (var page = engine.Process(img))
                        {
                            var text = page.GetText();
                            Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence());

                            Console.WriteLine("Text (GetText): \r\n{0}", text);
                            Console.WriteLine("Text (iterator):");
                            using (var iter = page.GetIterator())
                            {
                                iter.Begin();

                                do
                                {
                                    do
                                    {
                                        do
                                        {
                                            do
                                            {
                                                if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                                                {
                                                    Console.WriteLine("<BLOCK>");
                                                }

                                                Console.Write(iter.GetText(PageIteratorLevel.Word));
                                                Console.Write(" ");

                                                if (iter.IsAtFinalOf(PageIteratorLevel.TextLine, PageIteratorLevel.Word))
                                                {
                                                    Console.WriteLine();
                                                }
                                            } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));

                                            if (iter.IsAtFinalOf(PageIteratorLevel.Para, PageIteratorLevel.TextLine))
                                            {
                                                Console.WriteLine();
                                            }
                                        } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                    } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                                } while (iter.Next(PageIteratorLevel.Block));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Unexpected Error: " + e.Message);
                Console.WriteLine("Details: ");
                Console.WriteLine(e.ToString());
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
示例#29
0
        public static void Main()
        {
            // NOTE:
            // When used in trial mode, the library imposes some restrictions.
            // Please visit http://bitmiracle.com/pdf-library/trial-restrictions.aspx
            // for more information.

            using (var pdf = new PdfDocument("Sample data/Freedman Scora.pdf"))
            {
                // This font is used to draw all recognized text chunks in PDF.
                // Make sure that the font defines all glyphs for the target language.
                PdfFont universalFont = pdf.AddFont("Arial");

                using (var engine = new TesseractEngine(@"tessdata", "eng", EngineMode.LstmOnly))
                {
                    for (int i = 0; i < pdf.PageCount; ++i)
                    {
                        PdfPage page = pdf.Pages[i];

                        // Simple check if the page contains searchable text.
                        // We do not need to do OCR in that case.
                        if (!string.IsNullOrEmpty(page.GetText().Trim()))
                        {
                            continue;
                        }

                        var canvas = page.Canvas;
                        canvas.Font = universalFont;

                        // Produce invisible, but searchable text
                        canvas.TextRenderingMode = PdfTextRenderingMode.NeitherFillNorStroke;

                        const int    Dpi = 200;
                        const double ImageToPdfScaleFactor = 72.0 / Dpi;
                        foreach (RecognizedTextChunk word in recognizeWords(page, engine, Dpi, $"page_{i}.png"))
                        {
                            if (word.Confidence < 80)
                            {
                                Console.WriteLine($"Possible recognition error: low confidence {word.Confidence} for word '{word.Text}'");
                            }

                            Rect         bounds    = word.Bounds;
                            PdfRectangle pdfBounds = new PdfRectangle(
                                bounds.X1 * ImageToPdfScaleFactor,
                                bounds.Y1 * ImageToPdfScaleFactor,
                                bounds.Width * ImageToPdfScaleFactor,
                                bounds.Height * ImageToPdfScaleFactor
                                );

                            tuneFontSize(canvas, pdfBounds.Width, word.Text);

                            double distanceToBaseLine = getDistanceToBaseline(canvas.Font, canvas.FontSize);
                            var    position           = new PdfPoint(pdfBounds.Left, pdfBounds.Bottom - distanceToBaseLine);
                            showTextAtRotatedPage(word.Text, position, page, page.MediaBox);
                        }
                    }
                }

                universalFont.RemoveUnusedGlyphs();

                const string Result = "OcrAndMakeSearchable.pdf";
                pdf.Save(Result);

                Process.Start(Result);
            }
        }
示例#30
0
        private static IEnumerable <RecognizedTextChunk> recognizeWords(PdfPage page, TesseractEngine engine,
                                                                        int resolution, string tempFileName)
        {
            // Save PDF page as high-resolution image
            PdfDrawOptions options = PdfDrawOptions.Create();

            options.BackgroundColor      = new PdfRgbColor(255, 255, 255);
            options.HorizontalResolution = resolution;
            options.VerticalResolution   = resolution;
            page.Save(tempFileName, options);

            using (var img = Pix.LoadFromFile(tempFileName))
            {
                using (var recognizedPage = engine.Process(img))
                {
                    using (ResultIterator iter = recognizedPage.GetIterator())
                    {
                        const PageIteratorLevel Level = PageIteratorLevel.Word;
                        iter.Begin();
                        do
                        {
                            if (iter.TryGetBoundingBox(Level, out Rect bounds))
                            {
                                string text       = iter.GetText(Level);
                                float  confidence = iter.GetConfidence(Level);

                                yield return(new RecognizedTextChunk(text, bounds, confidence));
                            }
                        } while (iter.Next(Level));
                    }
                }
            }
        }
示例#31
0
        private void RecognizeTess()
        {
            using (var engine = new TesseractEngine(@"./tessdata", "rus", EngineMode.Default))
            {
                TextMarker Marker = Doc.Template.Markers[0];
                Pixbuf     PixBox;

                logger.Info("Вычисляем сдвиг");
                Pixbuf WorkImage = Images[0];
                Marker.SetTarget(WorkImage.Width, WorkImage.Height);

                RelationalRectangle WorkZone = Marker.Zone.Clone();
                for (int i = 1; i <= 7; i++)
                {
                    logger.Debug("Попытка {0}, box: x={1},y={2},w={3},h={4}", i, WorkZone.PosX, WorkZone.PosY, WorkZone.Width, WorkZone.Heigth);
                    PixBox = new Pixbuf(WorkImage, WorkZone.PosX, WorkZone.PosY, WorkZone.Width, WorkZone.Heigth);
                    using (var img = RecognizeHelper.PixbufToPix(PixBox))
                    {
                        using (var page = engine.Process(img, PageSegMode.Auto))
                        {
                            int             Distance, MarkerPosX, MarkerPosY;
                            double          MarkerSkew;
                            RecognazeRule[] rules = new RecognazeRule[] { Doc.Template.NumberRule, Doc.Template.DateRule };
                            Distance = GetTextPosition(Marker.Text, page, out MarkerPosX, out MarkerPosY, out MarkerSkew, rules);
                            if (Distance < 5)
                            {
                                logger.Debug("TextMarker <{0}> Distance: {1} Try:{2}", Marker.Text, Distance, i);
                                Marker.ActualPosX = MarkerPosX + WorkZone.PosX;
                                Marker.ActualPosY = MarkerPosY + WorkZone.PosY;
                                Marker.ActualSkew = MarkerSkew;
                                Marker.Confidence = page.GetMeanConfidence();
                                logger.Debug("Image Shift X: {0}", Marker.ShiftX);
                                logger.Debug("Image Shift Y: {0}", Marker.ShiftY);
                                break;
                            }
                            else if (i == 7 ||
                                     (WorkZone.RelativePosX == 0 && WorkZone.RelativePosY == 0 && WorkZone.RelativeHeigth == 1 && WorkZone.RelativeWidth == 1))
                            {
                                Marker.ActualPosX = (int)(Marker.PatternPosX * Marker.TargetWidth);
                                Marker.ActualPosY = (int)(Marker.PatternPosY * Marker.TargetHeigth);
                                Marker.ActualSkew = 0;
                                ShowImage(PixBox, "Маркер не найден. Зона маркера.");
                            }
                            else
                            {                             //Увеличиваем размер зоны поиска.
                                ExpandRelativeZone(WorkZone);
                            }
                        }
                    }
                }
                RecognazeRule CurRule;

                logger.Info("Распознаем номер");
                if (Doc.Template.NumberRule != null)
                {
                    CurRule = Doc.Template.NumberRule;

                    if (CurRule.Box != null)
                    {
                        CurRule.Box.SetShiftByMarker(Marker);
                        logger.Debug("Number Shift X: {0}", CurRule.Box.ShiftX);
                        logger.Debug("Number Shift Y: {0}", CurRule.Box.ShiftY);
                        WorkZone = CurRule.Box.Clone();
                        //FIXME С этим пока работает лучше
                        WorkZone.RelativePosX   += WorkZone.RelativeWidth * 0.2;
                        WorkZone.RelativePosY   += WorkZone.RelativeHeigth * 0.2;
                        WorkZone.RelativeWidth  *= 0.6;
                        WorkZone.RelativeHeigth *= 0.6;

                        Doc.DocNumberConfidence = 0;
                        for (int i = 1; i <= 5; i++)
                        {
                            PixBox = new Pixbuf(WorkImage, WorkZone.PosX, WorkZone.PosY, WorkZone.Width, WorkZone.Heigth);
                            using (var img = RecognizeHelper.PixbufToPix(PixBox)) {
                                using (var page = engine.Process(img, PageSegMode.SingleLine)) {
                                    string FieldText = page.GetText().Trim();
                                    if (page.GetMeanConfidence() > Doc.DocNumberConfidence)
                                    {
                                        Doc.DocNumber           = FieldText;
                                        Doc.DocNumberConfidence = page.GetMeanConfidence();
                                        logger.Debug("Try: {0}", i);
                                        logger.Debug("Found Field Value: {0}", FieldText);
                                        logger.Debug("Recognize confidence: {0}", page.GetMeanConfidence());
                                        if (FieldText == "")
                                        {
                                            ShowImage(PixBox, "Номер пустой. Зона номера документа.");
                                        }
                                        else
                                        {
                                            ShowImage(PixBox, "Зона номера документа.");
                                        }
                                    }
                                    if (CurRule.Validate == ValidationTypes.IsNumber)
                                    {
                                        int  tempInt;
                                        bool BoxIsNumber = int.TryParse(Doc.DocNumber, out tempInt);
                                        if (BoxIsNumber)
                                        {
                                            break;
                                        }
                                        else
                                        {
                                            Doc.DocNumberConfidence = 0;
                                        }
                                    }
                                    if (Doc.DocNumberConfidence > 0.8)
                                    {
                                        break;
                                    }
                                    else                                        //Увеличиваем размер зоны поиска.
                                    {
                                        ExpandRelativeZone(WorkZone);
                                    }
                                }
                            }
                        }
                    }
                    else if (CurRule.NextAfterTextMarker)
                    {
                        logger.Debug("By after market detection: {0}", CurRule.AfterTextMarkerValue);
                        Doc.DocNumber           = CurRule.AfterTextMarkerValue;
                        Doc.DocNumberConfidence = CurRule.AfterTextMarkerConfidence;
                    }
                }

                logger.Info("Распознаем Дату");
                if (Doc.Template.DateRule != null)
                {
                    CurRule = Doc.Template.DateRule;
                    if (CurRule.Box != null)
                    {
                        CurRule.Box.SetShiftByMarker(Marker);

                        PixBox = new Pixbuf(WorkImage, CurRule.Box.PosX, CurRule.Box.PosY, CurRule.Box.Width, CurRule.Box.Heigth);
                        using (var img = RecognizeHelper.PixbufToPix(PixBox)) {
                            using (var page = engine.Process(img, PageSegMode.SingleLine)) {
                                string    FieldText = page.GetText().Trim();
                                DateTime  TempDate;
                                string [] words = FieldText.Split(new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                                string    Date  = "";
                                foreach (string word in words)
                                {
                                    if (DateTime.TryParse(word, out TempDate))
                                    {
                                        Date = word;
                                    }
                                }

                                if (DateTime.TryParse(Date, out TempDate))
                                {
                                    Doc.DocDate           = TempDate;
                                    Doc.DocDateConfidence = page.GetMeanConfidence();
                                }
                                else
                                {
                                    Doc.DocDateConfidence = -2;
                                }
                                logger.Debug("Found Field Value: {0}", FieldText);
                                logger.Debug("Split date Value: {0}", Date);
                                logger.Debug("Recognize confidence: {0}", page.GetMeanConfidence());
                                if (FieldText == "")
                                {
                                    ShowImage(PixBox, "Дата пустая. Зона даты документа.");
                                }
                                else
                                {
                                    ShowImage(PixBox, "Зона даты документа.");
                                }
                            }
                        }
                    }
                    else
                    {
                        logger.Debug("By after market detection: {0}", CurRule.AfterTextMarkerValue);
                        if (DateTime.TryParse(CurRule.AfterTextMarkerValue, out Doc.DocDate))
                        {
                            logger.Debug("Date parsed:{0}", Doc.DocDate);
                            Doc.DocDateConfidence = CurRule.AfterTextMarkerConfidence;
                        }
                        else
                        {
                            Doc.DocDateConfidence = -2;
                        }
                    }
                }

                //FIXME Добавить распознование дополнительных полей.
            }
        }
示例#32
0
 public TesseractManager(Canvas canvas, string tessdata)
 {
     this.canvas          = canvas;
     this.tesseractEngine = new TesseractEngine(tessdata, "eng", EngineMode.Default);
 }
示例#33
0
        public static void Main(string[] args)
        {
            var testImagePath = "./phototest.tif";
            if (args.Length > 0)
            {
                testImagePath = args[0];
            }

            try
            {
                using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                {
                    using (var img = Pix.LoadFromFile(testImagePath))
                    {
                        using (var page = engine.Process(img))
                        {
                            var text = page.GetText();
                            Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence());

                            Console.WriteLine("Text (GetText): \r\n{0}", text);
                            Console.WriteLine("Text (iterator):");
                            using (var iter = page.GetIterator())
                            {
                                iter.Begin();

                                do
                                {
                                    do
                                    {
                                        do
                                        {
                                            do
                                            {
                                                if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                                                {
                                                    Console.WriteLine("<BLOCK>");
                                                }

                                                Console.Write(iter.GetText(PageIteratorLevel.Word));
                                                Console.Write(" ");

                                                if (iter.IsAtFinalOf(PageIteratorLevel.TextLine, PageIteratorLevel.Word))
                                                {
                                                    Console.WriteLine();
                                                }
                                            } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));

                                            if (iter.IsAtFinalOf(PageIteratorLevel.Para, PageIteratorLevel.TextLine))
                                            {
                                                Console.WriteLine();
                                            }
                                        } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                    } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                                } while (iter.Next(PageIteratorLevel.Block));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                Console.WriteLine("Unexpected Error: " + e.Message);
                Console.WriteLine("Details: ");
                Console.WriteLine(e.ToString());
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
示例#34
0
        static void tes()
        {
            string TiffFiles = @"E:\Projects\TiffOutput_GrayScale";

            try
            {
                foreach (string file in Directory.GetFiles(TiffFiles))
                {
                    Console.WriteLine("----------------");
                    Console.WriteLine(file);

                    using (var engine = new TesseractEngine(@"E:\Projects\tessdata_best-master\tessdata_best-master", "eng", EngineMode.Default))
                    {
                        using (var img = Pix.LoadFromFile(file))
                        {
                            using (var page = engine.Process(img))
                            {
                                var text = page.GetText();
                                Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence());

                                Console.WriteLine("Text (GetText): \r\n{0}", text);
                                //Console.WriteLine("Text (iterator):");
                                //using (var iter = page.GetIterator())
                                //{
                                //    iter.Begin();

                                //    do
                                //    {
                                //        do
                                //        {
                                //            do
                                //            {
                                //                do
                                //                {
                                //                    //if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                                //                    //{
                                //                    //  // Console.WriteLine("<BLOCK>");
                                //                    //}

                                //                    //Console.Write(iter.GetText(PageIteratorLevel.Word));
                                //                    //Console.Write(" ");

                                //                    //if (iter.IsAtFinalOf(PageIteratorLevel.TextLine, PageIteratorLevel.Word))
                                //                    //{
                                //                    //    Console.WriteLine();
                                //                    //}
                                //                } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));

                                //                if (iter.IsAtFinalOf(PageIteratorLevel.Para, PageIteratorLevel.TextLine))
                                //                {
                                //                    Console.WriteLine();
                                //                }
                                //            } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                //        } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                                //    } while (iter.Next(PageIteratorLevel.Block));
                                //}
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                Console.WriteLine("Unexpected Error: " + e.Message);
                Console.WriteLine("Details: ");
                Console.WriteLine(e.ToString());
            }
            //Console.Write("Press any key to continue . . . ");
            //Console.ReadKey(true);
        }
示例#35
0
		public void Initialise_CanPassInitVariables()
		{
			var initVars = new Dictionary<string, object>() {
				{ "load_system_dawg", false }
			};
			using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default, Enumerable.Empty<string>(), initVars, false)) {
				bool loadSystemDawg;
				if (!engine.TryGetBoolVariable("load_system_dawg", out loadSystemDawg)) {
					Assert.Fail("Failed to get 'load_system_dawg'.");
				}
				Assert.That(loadSystemDawg, Is.False);
			}
		}
示例#36
0
        protected override string DoScan(string filename, LoggingSection log)
        {
            PdfDocument   pdfDocument   = PdfReader.Open(filename);
            StringBuilder stringBuilder = new StringBuilder();

            for (int pageIndex = 0; pageIndex < pdfDocument.PageCount; pageIndex++)
            {
                log.Verbose($"Scanning page {pageIndex + 1} of {pdfDocument.PageCount}");
                PdfPage pdfPage = pdfDocument.Pages[pageIndex];
                //Extract text from text elements
                stringBuilder.Append($"{ExtractTextFromPdfPage(pdfPage)}{Environment.NewLine}");

                //Extract text from image elements with Tesseract OCR - awesome! :)
                PdfDictionary resources = pdfPage.Elements.GetDictionary("/Resources");
                if (resources != null)
                {
                    PdfDictionary xObjects = resources.Elements.GetDictionary("/XObject");
                    if (xObjects != null)
                    {
                        ICollection <PdfItem> items = xObjects.Elements.Values;
                        foreach (PdfItem item in items)
                        {
                            PdfReference reference = item as PdfReference;
                            if (reference != null)
                            {
                                PdfDictionary xObject = reference.Value as PdfDictionary;
                                if (xObject != null && xObject.Elements.GetString("/Subtype") == "/Image")
                                {
                                    Bitmap bitmap = PdfImageToBitmap(xObject);
                                    if (bitmap == null)
                                    {
                                        log.Error("Could not extract bitmap from PDF image element. Seems like the PDF image filter type is not supported. Skipping element!");
                                        continue;
                                    }
                                    log.Debug("Rotating image");
                                    bitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);
                                    log.Debug("Upscaling image 2x");
                                    BitmapUtils.Scale(ref bitmap, 2);
                                    log.Debug("Grayscaling image");
                                    BitmapUtils.GrayscaleWithLockBits(bitmap);
                                    log.Debug("Denoising image");
                                    BitmapUtils.DenoiseWithLockBits(bitmap);
                                    log.Debug("Applying OCR on image");
                                    Pix             pix             = PixConverter.ToPix(bitmap);
                                    TesseractEngine tesseractEngine = Services.OCRProvider.AwaitResource();
                                    Page            tesseractPage   = tesseractEngine.Process(pix);
                                    try
                                    {
                                        string text = tesseractPage.GetText();
                                        log.Debug($"Text is {text.Length} characters long");
                                        if (!string.IsNullOrWhiteSpace(text) && text != "\n")
                                        {
                                            stringBuilder.Append(text.Replace("\n", " "));
                                        }
                                    }
                                    catch (InvalidOperationException e)
                                    {
                                        log.Error($"OCR failed on Page {pageIndex} of file {filename}:\n{e.StackTrace}");
                                    }
                                    Services.OCRProvider.Feed(tesseractEngine);
                                    pix.Dispose();
                                }
                            }
                        }
                    }
                }
                stringBuilder.Append("\n");
            }

            log.Debug("Trimming text");
            string documentText = stringBuilder.ToString();

            documentText = documentText.Trim();
            while (documentText.Contains("  "))
            {
                documentText = documentText.Replace("  ", " ");
            }
            while (documentText.Contains("\n\n"))
            {
                documentText = documentText.Replace("\n\n", "\n");
            }
            return(stringBuilder.ToString());
        }
示例#37
0
 public void CanGetStringVariableThatDoesNotExist()
 {
     using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) {
         String result;
         Boolean success = engine.TryGetStringVariable("illegal-variable", out result);
         Assert.That(success, Is.False);
         Assert.That(result, Is.Null);
     }
 }
示例#38
0
        public static async Task <string> GetTextFromPic(string testImagePath = "dou.PNG")
        {
            string result = string.Empty;

            var _wordsFromPic = new List <string>();

            using (var engine = new TesseractEngine(@"tessdata", "ukr+eng", EngineMode.Default))
            {
                using (var img = Pix.LoadFromFile(testImagePath))
                {
                    using (var page = engine.Process(img))
                    {
                        //var text = page.GetText();
                        //result += $"Mean confidence: {page.GetMeanConfidence()}" + Environment.NewLine;
                        //result += $"Text (GetText):{Environment.NewLine}{text}" + Environment.NewLine;
                        //result += Environment.NewLine;
                        //result += "=================================" + Environment.NewLine;
                        //result += Environment.NewLine;
                        //result += $"Text (iterator):" + Environment.NewLine;

                        using (var iter = page.GetIterator())
                        {
                            iter.Begin();

                            do
                            {
                                do
                                {
                                    do
                                    {
                                        do
                                        {
                                            if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                                            {
                                                //result += $"<BLOCK>" + Environment.NewLine;
                                                //result += Environment.NewLine;
                                            }

                                            var word = iter.GetText(PageIteratorLevel.Word);

                                            result += $"{word} ";

                                            _wordsFromPic.Add(word);

                                            //if (iter.IsAtFinalOf(PageIteratorLevel.TextLine, PageIteratorLevel.Word))
                                            //{
                                            //result += Environment.NewLine;
                                            //}
                                        } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));

                                        if (iter.IsAtFinalOf(PageIteratorLevel.Para, PageIteratorLevel.TextLine))
                                        {
                                            result += Environment.NewLine;
                                        }
                                    } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                            } while (iter.Next(PageIteratorLevel.Block));
                        }
                    }
                }
            }

            return(result);
        }
示例#39
0
 public static void Initialize()
 {
     Engine = new TesseractEngine(TESS_PATH, TESS_LANGUAGE);
 }
示例#40
0
 public Observer(TesseractEngine tesseractEngine, SpeechSynthesizer speechSynthesizer)
     : this(tesseractEngine, speechSynthesizer, new ObserverSettings() { Title = "", CaptureScale = 1.0f, CaptureGrayScale = false, UpdateInterval = 30000, NotifyEnabled = true })
 {
 }
示例#41
0
 public TrackRecognition()
 {
     this.engine        = new TesseractEngine(@".\tessdata", "deu", EngineMode.Default, @".\tessdata\config\configTracks.cfg");
     this.consoleEngine = new TesseractEngine(@".\tessdata", "deu", EngineMode.Default, @".\tessdata\config\configConsole.cfg");
 }
示例#42
0
 public void Inititialse()
 {
     _engine = CreateEngine();
 }
示例#43
0
        /// <summary>
        /// 登录
        /// </summary>
        private void Login()
        {
            ////登录页
            //_httpHelper.SyncRequest("http://*****:*****@"./tessdata", "eng", EngineMode.Default))
            //{
            //    using (var entity = engine.Process(uncode.bmpobj))
            //    {
            //        _checkCode = entity.GetText();
            //    }
            //}
            //_checkCode = _checkCode.Trim();
            //image.Save("D:\\" + InputText(_checkCode, _checkCode.Length) + "_Code.jpg");
            ////登录验证
            //_httpHelper.PostData = string.Format("Email={0}&Password={1}&VCode={2}",
            //    _userName, _password, _checkCode);
            //_httpHelper.SyncRequest("http://*****:*****@"./tessdata", "eng", EngineMode.Default))
            //{
            //    using (var entity = engine.Process(uncode.bmpobj))
            //    {
            //        _checkCode = entity.GetText();
            //    }
            //}

            //System.Drawing.Image image = (Image)uncode.bmpobj;
            //image.Save("D:\\" + InputText(_checkCode, _checkCode.Length) + "_Code.jpg");

            //_checkCode = _checkCode.Trim();
            //_checkCode = _checkCode.Replace(" ", "");//这样替换下就可以了

            ////登录验证
            //_httpHelper.PostData = string.Format("username={0}&password={1}&captcha={2}",
            //    _userName, _password, _checkCode);
            //_httpHelper.SyncRequest("https://eastmoney-office.eastmoney.com/bd-cas/login");


            //#########################################################################//



            //登录页
            _httpHelper.SyncRequest(" http://wp18011601.eda8888.com/App/Login");

            //获取验证码图片
            var bitmap = _httpHelper.GetCheckCode("http://wp18011601.eda8888.com/App/Login/GetCodeImage?id=1");

            System.Drawing.Image Source_image = (Image)bitmap;
            var random   = new Random();
            var name_img = random.Next(0, int.MaxValue);

            Source_image.Save("D:\\eda8888\\" + name_img + "_Code.jpg");
            //Bitmap bitmap = new Bitmap("D:\\617420430_Code.jpg");


            //解析验证码1
            using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
            {
                using (var entity = engine.Process(bitmap))
                {
                    _checkCode = entity.GetText();
                }
            }
            _checkCode = InputText(_checkCode, _checkCode.Length);

            UnCodebase uncode = new UnCodebase(bitmap);

            if (Contains_a_Z(_checkCode))
            {
                //去图形边框
                uncode.ClearPicBorder(1);
                //灰度转换,逐点方式
                uncode.GrayByPixels();

                //去掉噪点
                //uncode.ClearNoise(50, 1);
                //图像二值化
                uncode.ConvertToBinaryImage();
                //扭曲图片校正
                uncode.ReSetBitMap();

                //解析验证码2
                using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                {
                    using (var entity = engine.Process(uncode.bmpobj))
                    {
                        _checkCode = entity.GetText();
                    }
                }
            }

            _checkCode = _checkCode.Trim();
            _checkCode = _checkCode.Replace(" ", "");//这样替换下就可以了
            _checkCode = InputText(_checkCode, _checkCode.Length);

            System.Drawing.Image image = (Image)uncode.bmpobj;
            image.Save("D:\\eda8888\\" + InputText(_checkCode, _checkCode.Length) + "_Code.jpg");


            //登录验证
            _httpHelper.PostData = string.Format("username={0}&password={1}&code={2}",
                                                 _userName, _password, _checkCode);
            _httpHelper.SyncRequest("http://wp18011601.eda8888.com/App/Login");
        }
示例#44
0
        public static Model Analyze(Bitmap bmp)
        {
            var h      = bmp.Height;
            var w      = bmp.Width;
            var data   = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            var colors = new int[w * h];

            Marshal.Copy(data.Scan0, colors, 0, w * h);
            bmp.UnlockBits(data);
            for (var i = 0; i < w * h; ++i)
            {
                colors[i] &= RgbMask;
            }

            if (Tengine == null)
            {
                Tengine = new TesseractEngine("./tessdata", "eng", EngineMode.Default);
                Tengine.SetVariable("classify_enable_learning", false);
                Tengine.SetVariable("classify_enable_adaptive_matcher", false);
                Tengine.SetVariable("tessedit_char_whitelist", "1234567890-{}?_");
            }

            // remaining rect
            var bx = 0;
            var by = 0;
            var bh = 0;
            {
                for (var y = 0; y < h; ++y)
                {
                    for (var x = 0; x < w; ++x)
                    {
                        if (colors[y * w + x] == ColorBlue)
                        {
                            if (x > bx)
                            {
                                bx = x;
                                by = y;
                            }
                        }
                    }
                }
                while (colors[(by + bh) * w + bx] == ColorBlue)
                {
                    ++bh;
                }
            }

            var m = new Model();

            m.CheckCells(CellState.Yellow, ColorYellow, ColorDeepYellow, w, h, colors);
            m.CheckCells(CellState.Blue, ColorBlue, ColorDeepBlue, w, h, colors);
            m.CheckCells(CellState.Black, ColorBlack, ColorDeepBlack, w, h, colors);

            m.AssignCellNrs();

            m.ConnectNeigbors();

            m.CheckText(bmp);
            m.ReadRemaining(bmp, bx, by, bh);

            if (Debugger.IsAttached)
            {
                m.CollectRules();
            }
            else
            {
                try
                {
                    m.CollectRules();
                }
                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e.Message);
                }
            }

            m.Solve();

            return(m);
        }
示例#45
0
        public static void Main(string[] args)
        {
            var testImagePath = "./phototest.tif";

            if (args.Length > 0)
            {
                testImagePath = args[0];
            }

            try
            {
                var logger        = new FormattedConsoleLogger();
                var resultPrinter = new ResultPrinter(logger);
                using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                {
                    using (var img = Pix.LoadFromFile(testImagePath))
                    {
                        using (logger.Begin("Process image"))
                        {
                            var i = 1;
                            using (var page = engine.Process(img))
                            {
                                var text = page.GetText();
                                logger.Log("Text: {0}", text);
                                logger.Log("Mean confidence: {0}", page.GetMeanConfidence());

                                using (var iter = page.GetIterator())
                                {
                                    iter.Begin();
                                    do
                                    {
                                        if (i % 2 == 0)
                                        {
                                            using (logger.Begin("Line {0}", i))
                                            {
                                                do
                                                {
                                                    using (logger.Begin("Word Iteration"))
                                                    {
                                                        if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                                                        {
                                                            logger.Log("New block");
                                                        }
                                                        if (iter.IsAtBeginningOf(PageIteratorLevel.Para))
                                                        {
                                                            logger.Log("New paragraph");
                                                        }
                                                        if (iter.IsAtBeginningOf(PageIteratorLevel.TextLine))
                                                        {
                                                            logger.Log("New line");
                                                        }
                                                        logger.Log("word: " + iter.GetText(PageIteratorLevel.Word));
                                                    }
                                                } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));
                                            }
                                        }
                                        i++;
                                    } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                Console.WriteLine("Unexpected Error: " + e.Message);
                Console.WriteLine("Details: ");
                Console.WriteLine(e.ToString());
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
示例#46
0
 public void Init()
 {
     engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);
 }
示例#47
0
 public BasicAnalyzer()
 {
     engine = new TesseractEngine(@"E:\\dev\\venomsw\\venomsw\\tessdata", "eng", EngineMode.Default, "venom");
 }
示例#48
0
        private static void TesseractTest(string image_path, string buffer_path, int number_to_find)
        {
            //Bitmap image = new Bitmap("C:/Users/Bruce Huffa/Desktop/testImageYarnFieldAllocation_3_a.PNG");
            //MakeImageBlackNWhite(image);

            // take image from screenshot by using yarn_rectangle coordinates
            string testImagePath = image_path;

            // launch engine
            try
            {
                using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                {
                    //engine.SetVariable("tessedit_char_whitelist", "9");
                    using (var img = Pix.LoadFromFile(testImagePath))
                    {
                        using (var page = engine.Process(img))
                        {
                            var text = page.GetText();
                            Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence());
                            Console.WriteLine("Text (GetText): \r\n{0}", text);
                            Console.WriteLine("Text (iterator):");

                            using (var iter = page.GetIterator())
                            {
                                iter.Begin();
                                do
                                {
                                    do
                                    {
                                        do
                                        {
                                            do
                                            {
                                                do
                                                {
                                                    if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                                                    {
                                                        Console.WriteLine("<BLOCK>");
                                                    }
                                                    if (iter.GetText(PageIteratorLevel.Symbol).Trim().Contains(number_to_find.ToString()))
                                                    {
                                                        Rect location = new Rect();
                                                        iter.TryGetBoundingBox(PageIteratorLevel.Symbol, out location);
                                                        if (location.Y1 < 200 && location.Y1 > 60 && location.X1 < 80)
                                                        {
                                                            Console.Write(iter.GetText(PageIteratorLevel.Symbol));
                                                            Console.Write(" ");
                                                            Console.Write("[" + location.X1 + ", " + location.Y1 + "]");

                                                            Image image = Image.FromFile(image_path);
                                                            using (Graphics g = Graphics.FromImage(image))
                                                            {
                                                                // Modify the image using g here...
                                                                // Create a brush with an alpha value and use the g.FillRectangle function
                                                                Color      customColor = Color.FromArgb(155, Color.Black);
                                                                SolidBrush shadowBrush = new SolidBrush(customColor);
                                                                g.FillRectangles(shadowBrush, new RectangleF[] { new RectangleF(location.X1, location.Y1, location.Width, location.Height) });
                                                            }
                                                            image.Save(buffer_path);
                                                            image.Dispose();
                                                            image = null;
                                                            Image buffer_image = Image.FromFile(buffer_path);
                                                            buffer_image.Save(image_path);
                                                            buffer_image.Dispose();
                                                            buffer_image = null;
                                                        }
                                                    }
                                                } while (iter.Next(PageIteratorLevel.Word, PageIteratorLevel.Symbol));
                                                if (iter.IsAtFinalOf(PageIteratorLevel.TextLine, PageIteratorLevel.Word))
                                                {
                                                    Console.WriteLine();
                                                }
                                            } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));
                                            if (iter.IsAtFinalOf(PageIteratorLevel.Para, PageIteratorLevel.TextLine))
                                            {
                                                Console.WriteLine();
                                            }
                                        } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                    } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                                } while (iter.Next(PageIteratorLevel.Block));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                Console.WriteLine("Unexpected Error: " + e.Message);
                Console.WriteLine("Details: ");
                Console.WriteLine(e.ToString());
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
示例#49
0
        protected override object SolvePart2()
        {
            var position  = (0, 0);
            var direction = RobotDirection.Up;
            var panels    = new Dictionary <(int, int), long>();
            var vm        = new IntcodeVM(Input[0]);

            panels.Add((0, 0), 1L);

            var status = IntcodeVM.HaltMode.Unknown;

            while (status != IntcodeVM.HaltMode.Terminated)
            {
                var currentPanelColor = panels.ContainsKey(position) ? panels[position] : 0L;

                status = vm.Execute(new long[] { currentPanelColor });
                var panelColor = vm.Output.Dequeue();
                var turn       = (int)vm.Output.Dequeue();

                if (panels.ContainsKey(position))
                {
                    panels[position] = panelColor;
                }
                else
                {
                    panels.Add(position, panelColor);
                }

                direction = TurnRobot(direction, turn);

                position = MoveRobot(direction, position);
            }

            var minX      = panels.Keys.Min(x => x.Item1);
            var minY      = panels.Keys.Min(y => y.Item2);
            var maxX      = panels.Keys.Max(x => x.Item1);
            var maxY      = panels.Keys.Max(y => y.Item2);
            var imgWidth  = maxX - minX + 20;
            var imgHeight = maxY - minY + 20;

            using var image = new Bitmap(imgWidth, imgHeight);
            for (var y = 0; y < imgHeight; y++)
            {
                for (var x = 0; x < imgWidth; x++)
                {
                    image.SetPixel(x, y, Color.Black);
                }
            }

            foreach (var panel in panels)
            {
                if (panel.Value == 1)
                {
                    image.SetPixel(panel.Key.Item1 - minX + 10, panel.Key.Item2 - minY + 10, Color.White);
                }
            }
            image.RotateFlip(RotateFlipType.Rotate270FlipNone);
            using var bigImage = new Bitmap(image, new Size(image.Width * 4, image.Height * 4));
            bigImage.Save(@".\2019\AdventOfCode2019112.png");

            using var engine = new TesseractEngine(@".\_ExternalDependencies\tessdata_legacy", "eng", EngineMode.TesseractOnly);
            using Pix pix    = PixConverter.ToPix(bigImage);
            using var page   = engine.Process(pix);
            return(page.GetText().Trim('\n'));
        }
示例#50
0
        public void Initialise_CanLoadConfigFile()
        {
            var tessDataPath = Path.Combine(Environment.CurrentDirectory, @"tessdata\");
            using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default, "bazzar")) {
                // verify that the config file was loaded
                string user_patterns_suffix;
                if (engine.TryGetStringVariable("user_words_suffix", out user_patterns_suffix)) {
                    Assert.That(user_patterns_suffix, Is.EqualTo("user-words"));
                } else {
                    Assert.Fail("Failed to retrieve value for 'user_words_suffix'.");
                }

                using (var img = Pix.LoadFromFile("./phototest.tif")) {
                    using (var page = engine.Process(img)) {
                        var text = page.GetText();

                        const string expectedText =
                            "This is a Iot of 12 point text to test the\nocr code and see if it works on all types\nof file format.\n\nThe quick brown dog jumped over the\nIazy fox. The quick brown dog jumped\nover the Iazy fox. The quick brown dog\njumped over the Iazy fox. The quick\nbrown dog jumped over the Iazy fox.\n\n";

                        Assert.That(text, Is.EqualTo(expectedText));
                    }
                }
            }
        }
示例#51
0
 public TesseractOcrOcrService()
 {   
     engine = new TesseractEngine(@"./tessdata", "spa", EngineMode.Default);
 }
示例#52
0
        public static void Main(string[] args)
        {
            var testImagePath = "./closeup_scan.png";//"./phototest.tif";

            if (args.Length > 0)
            {
                testImagePath = args[0];
            }

            try
            {
                using (IResultRenderer renderer = ResultRenderer.CreatePdfRenderer(@"./output", @"./tessdata"))
                {
                    using (renderer.BeginDocument("PDF Test"))
                    {
                        using (TesseractEngine engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.TesseractAndCube))
                        {
                            var list = Directory.GetFiles(@"images");
                            foreach (var item in list)
                            {
                                using (var tifFile = new Bitmap(item))
                                {
                                    //using (var img = PixConverter.ToPix(tifFile))
                                    //{
                                    using (var page = engine.Process(tifFile, "test"))
                                    {
                                        renderer.AddPage(page);
                                    }
                                    //}
                                }
                            }
                        }
                    }
                }
                //using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
                //{
                //    using (var img = Pix.LoadFromFile(testImagePath))
                //    {
                //        using (var page = engine.Process(img))
                //        {
                //            var text = page.GetText();
                //            Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence());

                //            Console.WriteLine("Text (GetText): \r\n{0}", text);
                //            Console.WriteLine("Text (iterator):");
                //            using (var iter = page.GetIterator())
                //            {
                //                iter.Begin();

                //                do
                //                {
                //                    do
                //                    {
                //                        do
                //                        {
                //                            do
                //                            {
                //                                if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                //                                {
                //                                    Console.WriteLine("<BLOCK>");
                //                                }

                //                                Console.Write(iter.GetText(PageIteratorLevel.Word));
                //                                Console.Write(" ");

                //                                if (iter.IsAtFinalOf(PageIteratorLevel.TextLine, PageIteratorLevel.Word))
                //                                {
                //                                    Console.WriteLine();
                //                                }
                //                            } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));

                //                            if (iter.IsAtFinalOf(PageIteratorLevel.Para, PageIteratorLevel.TextLine))
                //                            {
                //                                Console.WriteLine();
                //                            }
                //                        } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                //                    } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                //                } while (iter.Next(PageIteratorLevel.Block));
                //            }
                //        }
                //    }
                //}
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                Console.WriteLine("Unexpected Error: " + e.Message);
                Console.WriteLine("Details: ");
                Console.WriteLine(e.ToString());
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
示例#53
0
    static oTesseractRequest __ocrExecute(oTesseractRequest req, Bitmap image)
    {
        PageIteratorLevel level = PageIteratorLevel.Word;

        switch (req.command)
        {
        case TESSERACT_COMMAND.GET_SEGMENTED_REGION_BLOCK:
            level = PageIteratorLevel.Block;
            break;

        case TESSERACT_COMMAND.GET_SEGMENTED_REGION_PARA:
            level = PageIteratorLevel.Para;
            break;

        case TESSERACT_COMMAND.GET_SEGMENTED_REGION_SYMBOL:
            level = PageIteratorLevel.Symbol;
            break;

        case TESSERACT_COMMAND.GET_SEGMENTED_REGION_TEXTLINE:
            level = PageIteratorLevel.TextLine;
            break;

        case TESSERACT_COMMAND.GET_SEGMENTED_REGION_WORD:
            level = PageIteratorLevel.Word;
            break;

        case TESSERACT_COMMAND.GET_TEXT:
            break;
        }

        EngineMode mode = EngineMode.Default;

        switch (req.mode)
        {
        case ENGINE_MODE.LSTM_ONLY:
            mode = EngineMode.CubeOnly;
            break;

        case ENGINE_MODE.TESSERACT_AND_LSTM:
            mode = EngineMode.TesseractAndCube;
            break;

        case ENGINE_MODE.TESSERACT_ONLY:
            mode = EngineMode.TesseractOnly;
            break;
        }

        using (var engine = new TesseractEngine(req.data_path, req.lang, mode))
            using (var pix = new BitmapToPixConverter().Convert(image))
            {
                using (var tes = engine.Process(pix))
                {
                    switch (req.command)
                    {
                    case TESSERACT_COMMAND.GET_TEXT:
                        string s = tes.GetText().Trim();
                        req.output_text  = s;
                        req.output_count = s.Length;
                        req.ok           = 1;
                        break;

                    default:
                        var boxes = tes.GetSegmentedRegions(level).Select(x =>
                                                                          string.Format("{0}_{1}_{2}_{3}", x.X, x.Y, x.Width, x.Height)).ToArray();
                        req.output_format = "x_y_width_height";
                        req.output_text   = string.Join("|", boxes.Select(x => x.ToString()).ToArray());
                        req.output_count  = boxes.Length;
                        req.ok            = 1;
                        break;
                    }
                }
            }
        return(req);
    }
示例#54
0
 public TesseractOCR()
 {
     ocrEnglish = new TesseractEngine("./tessdata", "eng", EngineMode.Default);
     ocrKorean  = new TesseractEngine("./tessdata", "kor", EngineMode.Default);
     //rJapanese = new TesseractEngine("./tessdata", "jpn", EngineMode.Default);
 }
 public TesseractOcrService()
 {
     mOcrEngine = new TesseractEngine(DATA_PATH, LANGUAGE, EngineMode.Default);
 }