首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

空页
EN

Stack Overflow用户
提问于 2017-05-19 13:25:23
回答 2查看 8K关注 0票数 7

我使用tesseract来检测图像上的字符。

代码语言:javascript
复制
        try
        {
            using (var engine = new TesseractEngine(@"C:\Users\ea\Documents\Visual Studio 2015\Projects\ocrtTest", "eng", EngineMode.Default))
            {
                using (var img = Pix.LoadFromFile(testImagePath))
                {
                    Bitmap src = (Bitmap)Image.FromFile(testImagePath);
                    using (var page = engine.Process(img))
                    {
                        var text = page.GetHOCRText(1);
                        File.WriteAllText("test.html", text);
                        //Console.WriteLine("Text: {0}", text);
                        //Console.WriteLine("Mean confidence: {0}", page.GetMeanConfidence());

                        int p = 0;
                        int l = 0;
                        int w = 0;
                        int s = 0;
                        int counter = 0;
                        using (var iter = page.GetIterator())
                        {
                            iter.Begin();
                            do
                            {
                                do
                                {
                                    do
                                    {
                                        do
                                        {
                                            do
                                            {
                                                //if (iter.IsAtBeginningOf(PageIteratorLevel.Block))
                                                //{
                                                //    logger.Log("New block");
                                                //}
                                                if (iter.IsAtBeginningOf(PageIteratorLevel.Para))
                                                {
                                                    p++;//counts paragraph
                                                    //logger.Log("New paragraph");
                                                }
                                                if (iter.IsAtBeginningOf(PageIteratorLevel.TextLine))
                                                {
                                                    l++;//count lines
                                                    //logger.Log("New line");
                                                }
                                                if (iter.IsAtBeginningOf(PageIteratorLevel.Word))
                                                {
                                                    w++;//count words
                                                    //logger.Log("New word");
                                                }
                                                s++;//count symbols
                                                //logger.Log(iter.GetText(PageIteratorLevel.Symbol));
                                                // get bounding box for symbol
                                                Rect symbolBounds;
                                                if (iter.TryGetBoundingBox(PageIteratorLevel.Symbol, out symbolBounds))
                                                {
                                                    Rectangle dueDateRectangle = new Rectangle(symbolBounds.X1, symbolBounds.Y1, symbolBounds.X2 - symbolBounds.X1, symbolBounds.Y2 - symbolBounds.Y1);
                                                    rect = dueDateRectangle;
                                                    PixelFormat format = src.PixelFormat;
                                                    Bitmap cloneBitmap = src.Clone(dueDateRectangle, format);
                                                    MemoryStream ms = new MemoryStream();
                                                    cloneBitmap.Save(ms, ImageFormat.Png);
                                                    ms.Position = 0;
                                                    Image i = Image.FromStream(ms);
                                                    //i.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
                                                    i.Save("character" + counter + ".bmp", ImageFormat.Png);
                                                    counter++;
                                                }
                                            } while (iter.Next(PageIteratorLevel.Word, PageIteratorLevel.Symbol));
                                            // DO any word post processing here (e.g. group symbols by word)
                                        } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));
                                    } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                                } while (iter.Next(PageIteratorLevel.Block, PageIteratorLevel.Para));
                            } while (iter.Next(PageIteratorLevel.Block));
                        }
                        Console.WriteLine("Pragraphs = " + p);
                        Console.WriteLine("Lines = " + l);
                        Console.WriteLine("Words = " + w);
                        Console.WriteLine("Symbols = " + s);
                    }

当我有一个包含大量文字的图像时,它会起作用,但当我只有一个字母的图像时,它就不会工作了。

它找到了一个符号,我在输入中看到了它。符号= 1,但它不能得到BoundingBox。为什么?我用的是字母表图像

EN

Stack Overflow用户

发布于 2020-10-14 10:16:53

对于下面的图像,请在tesseract命令中使用--psm 9

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44071353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档