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

如何用Python从图像中提取分组文本?基于pytesseract实现词组分块

解决Python OCR提取分组文本块的方案

你需要的分组能力是Tesseract原生内置的,不需要自己实现bounding box聚类逻辑,用pytesseract.image_to_data接口即可直接输出按文本块分组的结果。

实现逻辑

image_to_data接口会返回包含文本层级、坐标、置信度、内容的完整结构化数据,内置层级规则如下:

  • level=2 对应独立文本块,Tesseract底层会自动根据文本间距、排版识别出分散的独立内容块
  • level=5 对应单个单词,同一个block_num下的所有单词默认属于同一个文本块
    你只需要按block_num分组收集单词,即可直接得到需要的嵌套列表结构。

代码实现

import pytesseract
from pytesseract import Output
from PIL import Image

def get_grouped_text(img_path, conf_threshold=60):
    img = Image.open(img_path)
    # 可根据场景调整psm参数,分散独立文本块场景推荐用--psm 11(稀疏文本模式)
    ocr_data = pytesseract.image_to_data(
        img, 
        output_type=Output.DICT, 
        lang='eng',
        config='--psm 11'
    )
    grouped_res = []
    current_block = None
    current_words = []
    
    for i in range(len(ocr_data['text'])):
        text = ocr_data['text'][i].strip()
        # 过滤空内容和低置信度结果,阈值可自行调整
        if not text or ocr_data['conf'][i] < conf_threshold:
            continue
        block_num = ocr_data['block_num'][i]
        # 切换文本块时存入结果
        if block_num != current_block:
            if current_words:
                grouped_res.append(current_words)
            current_block = block_num
            current_words = []
        current_words.append(text)
    # 存入最后一个文本块的内容
    if current_words:
        grouped_res.append(current_words)
    return grouped_res

调用该函数即可直接返回你要求的嵌套列表格式,比如示例场景下返回结果为[["Hello", "World"], ["Foo", "bar"]]。

内容的提问来源于stack exchange,提问作者Tom Atix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:15:00