Coral USB Accelerator推理报错:'Delegate'对象无'_library'属性
修复MacOS下Coral USB Accelerator推理时的AttributeError错误
问题场景
MacOS系统中,使用适配Edge TPU的全量化TensorFlow Lite模型,通过Coral USB Accelerator执行人检测推理时,运行代码出现以下错误,已安装所有必要依赖但问题仍未解决:
AttributeError: 'Delegate' object has no attribute '_library'
运行代码
import argparse import cv2 import os from pycoral.adapters.common import input_size from pycoral.adapters.detect import get_objects from pycoral.utils.dataset import read_label_file from pycoral.utils.edgetpu import make_interpreter from pycoral.utils.edgetpu import run_inference def main(): default_model_dir = 'parents dir' default_model = 'model dir' default_labels = 'labels dir' parser = argparse.ArgumentParser() parser.add_argument('--model', help='.tflite model path', default=os.path.join(default_model_dir,default_model)) parser.add_argument('--labels', help='label file path', default=os.path.join(default_model_dir, default_labels)) parser.add_argument('--top_k', type=int, default=3, help='number of categories with highest score to display') parser.add_argument('--camera_idx', type=int, help='Index of which video source to use. ', default = 0) parser.add_argument('--threshold', type=float, default=0.3, help='classifier score threshold') args = parser.parse_args() print('Loading {} with {} labels.'.format(args.model, args.labels)) interpreter = make_interpreter(args.model) interpreter.allocate_tensors() labels = read_label_file(args.labels) inference_size = input_size(interpreter) cap = cv2.VideoCapture(args.camera_idx) while cap.isOpened(): ret, frame = cap.read() if not ret: break cv2_im = frame cv2_im_rgb = cv2.cvtColor(cv2_im, cv2.COLOR_BGR2RGB) cv2_im_rgb = cv2.resize(cv2_im_rgb, inference_size) run_inference(interpreter, cv2_im_rgb.tobytes()) objs = get_objects(interpreter, args.threshold)[:args.top_k] cv2_im = append_objs_to_img(cv2_im, inference_size, objs, labels) cv2.imshow('frame', cv2_im) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() def append_objs_to_img(cv2_im, inference_size, objs, labels): height, width, channels = cv2_im.shape scale_x, scale_y = width / inference_size[0], height / inference_size[1] for obj in objs: bbox = obj.bbox.scale(scale_x, scale_y) x0, y0 = int(bbox.xmin), int(bbox.ymin) x1, y1 = int(bbox.xmax), int(bbox.ymax) percent = int(100 * obj.score) label = '{}% {}'.format(percent, labels.get(obj.id, obj.id)) cv2_im = cv2.rectangle(cv2_im, (x0, y0), (x1, y1), (0, 255, 0), 2) cv2_im = cv2.putText(cv2_im, label, (x0, y0+30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 2) return cv2_im if __name__ == '__main__': main()
修复方案
版本兼容性修复
该错误多由TensorFlow Lite与PyCoral版本不匹配导致,执行以下步骤重新安装兼容版本:pip uninstall -y pycoral tflite-runtime pip install tflite-runtime==2.14.0 pycoral==2.0.0重新安装Edge TPU运行时库
MacOS下可能存在库加载异常,重新部署官方运行时库:- 清理现有库文件:
sudo rm -rf /usr/local/lib/libedgetpu* - 下载对应Mac架构(arm64/x86_64)的Edge TPU运行时包,解压后复制并链接库文件:
sudo cp libedgetpu.1.dylib /usr/local/lib/ sudo ln -s /usr/local/lib/libedgetpu.1.dylib /usr/local/lib/libedgetpu.dylib
- 清理现有库文件:
验证设备连接
确保Coral USB Accelerator被系统识别:system_profiler SPUSBDataType | grep -i "Coral"无输出则尝试更换USB端口或重新插拔设备。
显式指定Edge TPU设备
修改代码中解释器初始化逻辑,显式指定使用USB设备的Edge TPU:
将原代码中interpreter = make_interpreter(args.model)替换为:interpreter = make_interpreter(args.model, device='usb')
内容的提问来源于stack exchange,提问作者V Mukund
相关产品推荐
相关产品推荐

