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

使用craft-text-detector传入PIL Image时遇UnboundLocalError问题排查

问题原因及解决方法

问题根源

craft-text-detector 0.4.3版本的detect_text函数内部,对输入类型的处理分支没有覆盖PIL Image对象的情况:

  • 传入图片路径字符串时,函数会读取图片并赋值给img变量;
  • 传入numpy数组时,会直接将其赋值给img;
  • 但传入PIL Image对象时,没有对应的分支逻辑处理,导致img变量未被初始化就被后续代码引用,触发UnboundLocalError。

解决方法

方法1:将PIL Image转换为numpy数组传入(最稳妥)

直接把PIL对象转成numpy数组,符合函数内部预期的输入格式,代码示例:

from PIL import Image
import numpy as np
from craft_text_detector import Craft

# 初始化Craft实例
craft = Craft(output_dir='/tmp/advance-outputs/', crop_type='poly', cuda=False)

# 加载PIL Image
pil_img = Image.open("your_image_path.jpg")
# 转换为numpy数组
img_np = np.array(pil_img)

# 传入numpy数组进行检测
result = craft.detect_text(image=img_np)

方法2:修改craft-text-detector的源码(可选)

如果不想每次都手动转换,可以修改craft_text_detector/detect.py中的detect_text函数,添加PIL Image的处理分支:
找到函数中处理输入的部分,添加:

from PIL import Image

# 在现有输入判断逻辑中添加
if isinstance(image, Image.Image):
    img = np.array(image)

这样后续再传入PIL Image对象时,函数会自动转换为numpy数组,无需手动处理。

方法3:确认调用参数是否正确

确保调用detect_text时,PIL Image对象是通过image参数传入的,不要传错参数名(比如误传成img之类的)。

内容的提问来源于stack exchange,提问作者Zaryab Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:12:38