使用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
相关产品推荐
相关产品推荐

