You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求tesserocr中与pytesseract.image_to_data等效的函数

用tesserocr替代pytesseract.image_to_data实现结构化文本位置提取

tesserocr没有直接和pytesseract.image_to_data完全同名的函数,但可以通过PyTessBaseAPI结合识别迭代器(Recognition Iteration Level)实现完全等效的功能——提取带层级(块、段落、行、词)编号、文本内容及位置的结构化数据,且速度远快于pytesseract。

核心实现思路

利用tesserocr的RIL(识别层级枚举)对应不同文本结构层级:BLOCK(页面块)、PARA(段落)、TEXTLINE(行)、WORD(词),通过迭代器遍历每个层级的文本单元,同时提取对应层级的编号和位置坐标。

代码示例

import tesserocr
from PIL import Image

def extract_structured_text(image_path):
    with tesserocr.PyTessBaseAPI() as api:
        img = Image.open(image_path)
        api.SetImage(img)
        api.Recognize()
        
        iterator = api.GetIterator()
        target_level = tesserocr.RIL.WORD  # 从词级开始遍历,覆盖最细粒度
        
        result = []
        while iterator.Next(target_level):
            # 获取各层级的编号(默认从0开始,+1对齐pytesseract的计数逻辑)
            block_idx = iterator.GetIntAttribute(tesserocr.RIL.BLOCK, tesserocr.ILF_TEXTLINE_INDEX, 0) + 1
            para_idx = iterator.GetIntAttribute(tesserocr.RIL.PARA, tesserocr.ILF_TEXTLINE_INDEX, 0) + 1
            line_idx = iterator.GetIntAttribute(tesserocr.RIL.TEXTLINE, tesserocr.ILF_TEXTLINE_INDEX, 0) + 1
            word_idx = iterator.GetIntAttribute(tesserocr.RIL.WORD, tesserocr.ILF_TEXTLINE_INDEX, 0) + 1
            
            # 获取文本内容和位置坐标
            text = iterator.GetUTF8Text(target_level).strip()
            bbox = iterator.BoundingBox(target_level)  # 返回(x1, y1, x2, y2)
            
            result.append({
                'block_num': block_idx,
                'para_num': para_idx,
                'line_num': line_idx,
                'word_num': word_idx,
                'text': text,
                'left': bbox[0],
                'top': bbox[1],
                'width': bbox[2] - bbox[0],
                'height': bbox[3] - bbox[1]
            })
        return result

# 调用示例
structured_data = extract_structured_text('your_image.png')
for item in structured_data:
    print(f"块{item['block_num']} 段{item['para_num']} 行{item['line_num']} 词{item['word_num']}: {item['text']} 位置({item['left']},{item['top']})")

关键说明

  1. 层级对应:RIL的层级完全匹配pytesseract.image_to_data返回的block_num、par_num、line_num、word_num字段。
  2. 位置转换:BoundingBox返回的(x1,y1,x2,y2)可以直接转换为pytesseract中的left、top、width、height。
  3. 性能优势:tesserocr直接调用Tesseract的C++核心API,避免了pytesseract的跨进程调用开销,速度提升明显。

内容的提问来源于stack exchange,提问作者Daniel Wyatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:35:14