コード例 #1
0
ファイル: PixHandlers.cs プロジェクト: Rebel028/TesseractUI
 public override Pix Handle(Pix request)
 {
     request = request?.Deskew();
     return(base.Handle(request));
 }
コード例 #2
0
ファイル: DoOCR.cs プロジェクト: robela/tesseract4
        public static List <Row> DoOcr2(string imageDir)
        {
            // string imageDir = @"C\test.";


            try
            {
                var rowlist = new List <Row>();
                var tets    = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                using (var engine = new TesseractEngine(Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "tessdata"),
                                                        "eng", EngineMode.TesseractAndLstm))
                {
                    engine.SetVariable("tessedit_char_whitelist", "16.00ABCDEFGHIJKLMNOPQRSTUVWXYZ(quick) brown 1 2 3 4 5 6 7 8 9 0  fox jumps!over the $3,456.78 < lazy >: #90 dog & duck/goose, as 12.5% of Email from [email protected] is spam?");
                    // engine.DefaultPageSegMode = PageSegMode.AutoOsd;
                    Pix pixImage = Pix.LoadFromFile(imageDir);
                    pixImage = pixImage.Deskew();
                    using (var image = new System.Drawing.Bitmap(imageDir))
                    {
                        using (var pix = PixConverter.ToPix(image))
                        {
                            Scew scew;
                            var  pixDeskew = pix.Deskew(new ScewSweep(range: 90), Pix.DefaultBinarySearchReduction,
                                                        Tesseract.Pix.DefaultBinaryThreshold, out scew);

                            using (var page = engine.Process(pix))
                            {
                                var i  = 1;
                                var j  = 1;
                                var ki = page.GetIterator();
                                using (var iter = page.GetIterator())
                                {
                                    iter.Begin();

                                    do
                                    {
                                        do
                                        {
                                            // Console.WriteLine("in-looop");
                                            do
                                            {
                                                j = 1;
                                                do

                                                {
                                                    Rect symbolBounds;
                                                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word,
                                                                               out symbolBounds))
                                                    {
                                                    }
                                                    Identify strType = new Identify();
                                                    rowlist.Add(new Row
                                                    {
                                                        Line       = i,
                                                        Colomun    = j,
                                                        StringType =
                                                            Convert.ToString(
                                                                strType.StringType(
                                                                    iter.GetText(PageIteratorLevel.Word))),
                                                        Type =
                                                            Convert.ToInt16(
                                                                strType.StringType(
                                                                    iter.GetText(PageIteratorLevel.Word))),
                                                        Word            = iter.GetText(PageIteratorLevel.Word),
                                                        XCordinateStart = symbolBounds.X1,
                                                        XCordinateEnd   = symbolBounds.X2,
                                                        YCordinateEnd   = symbolBounds.Y1,
                                                        YCordinateStart = symbolBounds.Y2
                                                    });
                                                    j = j + 1;
                                                } while (iter.Next(PageIteratorLevel.TextLine,
                                                                   PageIteratorLevel.Word));


                                                i++;
                                            } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                        } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                                    } while (iter.Next(PageIteratorLevel.Block));
                                }
                            }
                        }
                    }
                }
                XmlDocument doc = new XmlDocument();
                //create the serialiser to create the xml
                XmlSerializer serialiser = new XmlSerializer(typeof(List <Row>));
                if (!Directory.Exists(@"C:\TEST\"))
                {
                    Directory.CreateDirectory(@"C:\TEST\");
                }
                // Create the TextWriter for the serialiser to use
                TextWriter filestream = new StreamWriter(@"C:\TEST\" + Path.GetFileNameWithoutExtension(imageDir) + ".xml");

                //write to the file
                serialiser.Serialize(filestream, rowlist);

                // Close the file
                filestream.Close();
                return(rowlist);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }