PeterLeelilipeng 2024-05-27 15:15 采纳率: 100%
浏览 16
已结题

如何用C# tessdata获取文字和位置信息

我这边已经用C#已经可以获取文本和位置信息,但是这个文本不是跟位置信息绑定的,我还得解析文本,我觉的应该有办法直接获取 文本和位置信息的对象,查了半天,也没找到答案,有能解答一下的吗?


var engine = new TesseractEngine(@"D:\Program Files\Tesseract-OCR\tessdata", "chi_sim", EngineMode.Default);
var img = Pix.LoadFromFile(path);
var page = engine.Process(img);
PageIteratorLevel level = PageIteratorLevel.Word;
//这个是获取文字块
var textLocation = page.GetSegmentedRegions(level);
//这个是获取文本
var textWord = page.GetText();

//文字块的属性里面,没有文本,有办法全部获得吗
  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-27 15:15
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要解决您的问题,即在C#中使用Tesseract库同时获取文本内容和对应的位置信息,并将它们绑定在一起形成一个对象,可以参考以下步骤和代码示例:

    1. 使用TesseractEngineProcess方法来处理图像,获取Page对象。
    2. 通过Page对象的GetIterator方法获取迭代器。
    3. 使用迭代器遍历文本的不同层级(如单词、文本行等),并获取每个文本元素的边界框(bounding box)。
    4. 将文本内容和对应的边界框信息封装到自定义的对象中。

    以下是一个示例代码,展示了如何实现上述步骤:

    using Tesseract;
    using Tesseract.Pix;
    // ...
    
    // 假设您已经有了TesseractEngine实例和Pix图像实例
    var engine = new TesseractEngine(@"D:\Program Files\Tesseract-OCR\tessdata", "chi_sim", EngineMode.Default);
    var img = Pix.LoadFromFile(path);
    
    // 处理图像获取Page对象
    using (var page = engine.Process(img))
    {
        // 创建迭代器
        var iter = page.GetIterator();
        PageIteratorLevel level = PageIteratorLevel.RIL_WORD; // 可以选择不同的层级
    
        // 遍历文本
        List<TextWithLocation> textWithLocations = new List<TextWithLocation>();
        do
        {
            var rect = iter.GetBoundingBox(level);
            if (rect != null)
            {
                // 获取文本和位置信息
                string text = iter.GetText(level);
                int x = rect.Left;
                int y = rect.Top;
                int width = rect.Width;
                int height = rect.Height;
    
                // 封装文本和位置信息到自定义对象
                textWithLocations.Add(new TextWithLocation
                {
                    Text = text,
                    X = x,
                    Y = y,
                    Width = width,
                    Height = height
                });
            }
        }
        while (iter.Next(level) && level > PageIteratorLevel.RIL_BLOCK);
    
        // 现在textWithLocations包含了文本和位置信息的对象列表
    }
    

    在上述代码中,TextWithLocation是一个自定义类,您需要根据需要定义它,例如:

    public class TextWithLocation
    {
        public string Text { get; set; }
        public int X { get; set; }
        public int Y { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
    }
    

    关于参考资料,您可以参考以下链接:

    1. [使用 Tesseract 在 C# 中进行光学字符识别(OCR)完整教程][^1^]:这篇文章提供了一个完整的教程,介绍了如何在 C# 中使用 Tesseract 进行 OCR,包括基本的安装和配置步骤。
    2. [C#如何使用tesseract获取文字的xy_编程语言-CSDN问答][^4^]:这篇文章提供了示例代码,展示了如何使用 Tesseract.NET SDK 获取文字的 xy 坐标。

    希望这些信息能帮助您解决问题。如果还有其他问题或需要进一步的帮助,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月4日
  • 已采纳回答 5月27日
  • 创建了问题 5月27日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂