调用TextDetector实例报错TypeError: 'TextDetector' object is not callable原因求解
TypeError报错原因及解决方案
错误本质
你遇到的TypeError: 'TextDetector' object is not callable核心原因是:你尝试将TextDetector类的实例对象作为函数调用(即实例后加括号传参),但当前版本的TextDetector类未实现__call__魔法方法,不支持该调用方式。
常见触发原因
- 你本地的predict_det模块代码被改动过:此前可运行的版本中TextDetector类实现了
__call__方法,后续更新、修改操作删掉了该方法,或者将推理逻辑封装到了其他命名的普通方法(比如detect、predict)中。 - 导入的TextDetector不是预期的类:从你输出的
<class 'list'>来看,当前predict_det.TextDetector指向的根本不是类,可能是predict_det.py文件中被新增了同名的列表变量,覆盖了原本的类定义。
修复方案
- 先校验导入的对象是否正确:在实例化代码前加一行
print(type(predict_det.TextDetector)),如果输出结果不是<class 'type'>,直接打开predict_det.py文件,排查是否有重名变量覆盖了TextDetector类,修正命名冲突即可。 - 确认类定义正确后,查看类的可用方法:在实例化text_detector后加一行
print(dir(text_detector)),查找对应的文本检测推理方法名,将调用代码改成对应方法即可,比如方法名为detect时,修改为dt_boxes, elapse = text_detector.detect(img)。 - 若要保留原调用写法,直接在TextDetector类内部新增
__call__方法,将推理逻辑封装到该方法中即可。
内容的提问来源于stack exchange,提问作者user13559640
相关产品推荐
相关产品推荐

