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

Layout Parser的lp.draw_box方法在for循环中无法正常生效

问题根因

lp.draw_box() 不会主动触发弹窗或渲染,它的执行逻辑是返回标注完成的PIL Image对象:

  • 单张测试时如果用Jupyter/Colab这类交互环境,代码行返回的Image对象会被环境自动捕获渲染,所以能看到可视化效果
  • 进入for循环后,方法返回的Image对象没有被变量接收、也没有主动调用显示/保存逻辑,生成后直接被内存回收,自然不会输出任何可视化内容

另外你的现有代码存在冗余IO:循环内反复将图片存为同一个out.png再重新读取,会拖慢批量处理速度,可以直接优化掉。

修复方案

根据你的使用场景选对应逻辑即可:

场景1:Notebook环境逐页实时显示标注结果

接收draw_box的返回值,主动调用环境的显示方法渲染,同时删除冗余的临时文件读写:

from pdf2image import convert_from_path
import cv2
import time
import numpy as np
from IPython.display import display

start = time.time()
images = convert_from_path("/content/neft-system-faq.pdf")
page_layout_map = {}
for idx, image in enumerate(images):
    # 直接把PIL格式的pdf转图转为OpenCV接受的BGR格式,无需临时存图
    img_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
    layout = model.detect(img_cv)
    # 接收标注后的图片对象,主动触发显示
    annotated_img = lp.draw_box(img_cv, layout, show_element_id=True)
    print(f"===== 第{idx+1}页检测结果 =====")
    display(annotated_img)

    text_blocks = lp.Layout([b for b in layout])
    print(text_blocks)
    block_test = get_coordinates(text_blocks)
    result_arr = layout_map_processor(block_test)
    page_layout_map[idx] = result_arr

print(f"处理总耗时:{time.time()-start}秒")

场景2:批量保存标注结果到本地

不需要依赖Notebook渲染能力,直接把返回的标注图按页码命名存储即可,避免文件覆盖:

for idx, image in enumerate(images):
    img_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
    layout = model.detect(img_cv)
    annotated_img = lp.draw_box(img_cv, layout, show_element_id=True)
    # 按页码单独存图
    annotated_img.save(f"page_{idx+1}_annotated.png")

    text_blocks = lp.Layout([b for b in layout])
    block_test = get_coordinates(text_blocks)
    result_arr = layout_map_processor(block_test)
    page_layout_map[idx] = result_arr

本地脚本环境补充说明

如果是在非Notebook的本地Python脚本中运行,要即时弹窗查看标注效果,拿到annotated_img后调用annotated_img.show()即可。但批量处理时这个方法会调用系统默认图片查看器弹出大量窗口,更推荐直接存图后统一查看。

内容的提问来源于stack exchange,提问作者manoj kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:06:28