Пример #1
0
        //传入图片进行识别
        public static string ORC_(Bitmap img)
        {
            //""标示OCR识别调用失败
            string re = "";

            if (img == null)
            {
                return(re);
            }
            else
            {
                Bgr drawColor = new Bgr(Color.Blue);
                try
                {
                    Image <Bgr, Byte> image = new Image <Bgr, byte>(img);
                    using (Image <Gray, byte> gray = image.Convert <Gray, Byte>())
                    {
                        _ocr.Recognize();
                        Tesseract.Character[] charactors = _ocr.GetCharacters();
                        foreach (Tesseract.Character c in charactors)
                        {
                            image.Draw(c.Region, drawColor, 1);
                        }


                        re = _ocr.GetBoxText();
                    }
                    return(re);
                }
                catch (Exception ex)
                {
                    return(re);
                }
            }
        }
Пример #2
0
        private string Read(Image <Gray, byte> Img)
        {
            Image <Gray, byte> Img_resize = Img.Resize(Img.Width / 2, Img.Height / 2, Emgu.CV.CvEnum.Inter.Linear);
            string             str        = string.Empty;
            string             path       = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\";

            using (var _ocr = new Tesseract(path, "eng", OcrEngineMode.TesseractOnly))
            {
                _ocr.SetImage(Img_resize);
                _ocr.Recognize();
                string s = _ocr.GetBoxText(1);
                s = s.Replace("\r", "");
                string[] eachChar = s.Split('\n');

                List <Rectangle> box = new List <Rectangle>();
                for (int i = 0; i < eachChar.Length; i++)
                {
                    if (eachChar[i] == "")
                    {
                        continue;
                    }
                    string[] chr = eachChar[i].Split(' ');

                    char ct  = Convert.ToChar(chr[0]);
                    int  val = (int)ct;
                    if ((val >= 0x30 && val <= 0x39) || (val >= 0x41 && val <= 0x5a) || (val >= 0x61 && val <= 0x7a))
                    {
                        str += chr[0];
                        box.Add(new Rectangle(Convert.ToInt32(chr[1]), Convert.ToInt32(chr[2]), Convert.ToInt32(chr[3]) - Convert.ToInt32(chr[1]), Convert.ToInt32(chr[4]) - Convert.ToInt32(chr[2])));
                    }
                }
            }
            return(str);
        }
Пример #3
0
        public void TestOCREngGrayText()
        {
            using (Tesseract ocr = GetTesseract())
                using (Image <Gray, Byte> img = new Image <Gray, byte>(480, 200))
                {
                    ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,");
                    IntPtr oclDevice = new IntPtr();
                    int    deviceId  = ocr.GetOpenCLDevice(ref oclDevice);

                    String message = "Hello, World";
                    CvInvoke.PutText(img, message, new Point(50, 100), CvEnum.FontFace.HersheySimplex, 1.0, new MCvScalar(255));

                    //
                    //ocr.Recognize(img);
                    using (Image <Gray, Byte> rotatedImg = img.Rotate(10, new Gray(), false))
                    {
                        ocr.PageSegMode = PageSegMode.AutoOsd;
                        ocr.SetImage(rotatedImg);
                        ocr.Recognize();
                        using (PageIterator pi = ocr.AnalyseLayout())
                        {
                            Orientation   or       = pi.Orientation;
                            LineSegment2D?baseLine = pi.GetBaseLine(PageIteratorLevel.Textline);
                            if (baseLine.HasValue)
                            {
                                CvInvoke.Line(rotatedImg, baseLine.Value.P1, baseLine.Value.P2, new MCvScalar(255));
                                //Emgu.CV.UI.ImageViewer.Show(rotatedImg);
                            }
                        }


                        String messageOcr = ocr.GetUTF8Text().TrimEnd('\n', '\r'); // remove end of line from ocr-ed text
                        //EmguAssert.AreEqual(message, messageOcr,
                        //   String.Format("'{0}' is not equal to '{1}'", message, messageOcr));

                        Tesseract.Character[] results = ocr.GetCharacters();

                        String s1 = ocr.GetBoxText();
                        //String s2 = ocr.GetOsdText();
                        String s3 = ocr.GetTSVText();
                        String s4 = ocr.GetUNLVText();

                        using (PDFRenderer pdfRenderer = new PDFRenderer("abc.pdf", "./", false))
                            using (Pix imgPix = new Pix(img.Mat))
                            {
                                //bool success = ocr.ProcessPage(imgPix, 1, "img", null, 100000, pdfRenderer);
                                //EmguAssert.IsTrue(success, "failed to export pdf");
                            }
                    }
                }
        }
Пример #4
0
    // Use this for initialization
    void Start()
    {
        String[] names      = new string[] { "eng.cube.bigrams", "eng.cube.fold", "eng.cube.lm", "eng.cube.nn", "eng.cube.params", "eng.cube.size", "eng.cube.word-freq", "eng.tesseract_cube.nn", "eng.traineddata" };
        String   outputPath = Path.Combine(Application.persistentDataPath, "tessdata");

        if (!Directory.Exists(outputPath))
        {
            Directory.CreateDirectory(outputPath);
        }

        foreach (String n in names)
        {
            TextAsset textAsset = Resources.Load <TextAsset>(Path.Combine("tessdata", n));
            String    filePath  = Path.Combine(outputPath, n);
#if UNITY_METRO
            UnityEngine.Windows.File.WriteAllBytes(filePath, textAsset.bytes);
#else
            if (!File.Exists(filePath))
            {
                File.WriteAllBytes(filePath, textAsset.bytes);
            }
#endif
        }

        _ocr = new Tesseract(outputPath, "eng", OcrEngineMode.TesseractLstmCombined);

        Debug.Log("OCR engine loaded.");

        Image <Bgr, Byte> img = new Image <Bgr, byte>(480, 200);

        String message = "Hello, World";
        CvInvoke.PutText(img, message, new Point(50, 100), Emgu.CV.CvEnum.FontFace.HersheySimplex, 1.0, new MCvScalar(255, 255, 255));
        _ocr.SetImage(img);
        _ocr.Recognize();


        Tesseract.Character[] characters = _ocr.GetCharacters();
        foreach (Tesseract.Character c in characters)
        {
            CvInvoke.Rectangle(img, c.Region, new MCvScalar(255, 0, 0));
        }

        String messageOcr = _ocr.GetBoxText().TrimEnd('\n', '\r'); // remove end of line from ocr-ed text
        Debug.Log("Detected text: " + message);

        Texture2D texture = TextureConvert.InputArrayToTexture2D(img, FlipType.Vertical);

        this.GetComponent <GUITexture>().texture    = texture;
        this.GetComponent <GUITexture>().pixelInset = new Rect(-img.Width / 2, -img.Height / 2, img.Width, img.Height);
    }
Пример #5
0
        public MainWindow()
        {
            InitializeComponent();

            for (var i = 1; i < 15; i++)
            {
                ListView1.Items.Add(new ParkingEntry {
                    Name = $"Person #{i}", PlateNumber = $"Plate #{i}", DateEntry = DateTime.Now, DateExit = DateTime.Now.AddHours(i)
                });
            }

            var path   = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var folder = System.IO.Path.Combine(path, "tessdata");

            _licensePlateDetector = new LicensePlateDetector(folder);

            Mat  m  = new Mat(@"C:\Users\cayent\Desktop\ImageTest\222.jpg");
            UMat um = m.GetUMat(AccessType.ReadWrite);

            this.ImagePlate.Image = um;
            //ProcessImage(m);
            _ocr = new Tesseract(folder, "eng", OcrEngineMode.TesseractLstmCombined, "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890");
            _ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-1234567890");


            //create OCR engine
            //_ocr = new Tesseract(System.AppDomain.CurrentDomain.BaseDirectory + @"\Data\\", "eng", OcrEngineMode.TesseractLstmCombined);
            //_ocr.Init("", "eng", OcrEngineMode.TesseractLstmCombined);
            //_ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-1234567890");

            _ocr.SetImage(m);
            _ocr.Recognize();

            var text1 = _ocr.GetBoxText();
            var text2 = _ocr.GetCharacters();
            var text3 = _ocr.GetHOCRText();
            //var text4 = _ocr.GetOsdText(1);
            var text5 = _ocr.GetTSVText();
            var text6 = _ocr.GetUNLVText();
            var text7 = _ocr.GetUTF8Text();

            Plate.Text = text7;
        }
Пример #6
0
        static void Main()
        {
            //using (Mat image = CvInvoke.Imread("../../characters/higher-res.jpg"))
            //{
            //    var scaledImage = new Mat();
            //    CvInvoke.Resize(image, scaledImage, Size.Empty, 1.5, 1.5);

            //    DetectLinesInImage(scaledImage);
            //}

            //using (Mat toolbarObject = CvInvoke.Imread("../../../SURF_Resources/SURF_Toolbar_Mask.png", ImreadModes.Grayscale))
            //using (Mat wordbrainObject = CvInvoke.Imread("../../../SURF_Resources/SURF_Wordbrain_Mask.png", ImreadModes.Grayscale))
            //using (Mat scene = CvInvoke.Imread("../../../characters/Screenshot_20180530-100638_WordBrain.jpg", ImreadModes.Grayscale))
            //{
            //    CompareImages(scene, toolbarObject, wordbrainObject);
            //    //DetectKeyPoints(scene);
            //}

            Console.WriteLine("Starting image recognition");

            Task.Factory.StartNew(() =>
            {
                using (Image <Gray, byte> image =
                           new Image <Gray, byte>(Path.GetFullPath("../../../characters/result.png")))
                {
                    using (Tesseract tesseractOcrProvider =
                               new Tesseract("C:\\Program Files\\Tesseract-OCR\\tessdata", "eng", OcrEngineMode.TesseractLstmCombined))
                    {
                        tesseractOcrProvider.SetVariable("segment_reward_chartype", "0.9");
                        tesseractOcrProvider.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
                        tesseractOcrProvider.SetImage(image);
                        tesseractOcrProvider.Recognize();
                        Tesseract.Character[] characters = tesseractOcrProvider.GetCharacters();
                        string text = tesseractOcrProvider.GetBoxText();
                        Console.WriteLine(text);
                    }
                }
            }).Wait();

            Console.WriteLine("Called async image recognition");
        }