YOLO NAS报错:'ImageDetectionPrediction'对象不可迭代
问题分析
报错原因是单张图片预测时,best_model.predict()返回的是单个ImageDetectionPrediction对象,而非可迭代的列表,用for循环遍历单个对象自然会触发TypeError。之前能运行可能是依赖库版本更新,或是之前传入的是图片列表而非单张图片路径。
解决方案
两种修改方式任选其一即可:
方式1:直接使用单个预测结果(推荐,针对单张图片场景)
去掉外层for循环,直接操作返回的预测对象:
img_url='/content/Retail-Store-1/valid/images/-10_jpg.rf.d5119996f5715cf1105b1e5bf01c0ced.jpg' image_prediction = best_model.predict(img_url) class_names = image_prediction.class_names labels = image_prediction.prediction.labels confidence = image_prediction.prediction.confidence bboxes = image_prediction.prediction.bboxes_xyxy for i, (label, conf, bbox) in enumerate(zip(labels, confidence, bboxes)): print("prediction: ", i) print("label_id: ", label) print("label_name: ", class_names[int(label)]) print("confidence: ", conf) print("bbox: ", bbox) print("--" * 10)
方式2:包装成列表(兼容单张/多张图片场景)
如果需要保持原有代码结构,同时兼容后续传入多张图片的情况,手动将预测结果放入列表:
img_url='/content/Retail-Store-1/valid/images/-10_jpg.rf.d5119996f5715cf1105b1e5bf01c0ced.jpg' images_predictions = [best_model.predict(img_url)] # 用列表包裹单个结果 for image_prediction in images_predictions: class_names = image_prediction.class_names labels = image_prediction.prediction.labels confidence = image_prediction.prediction.confidence bboxes = image_prediction.prediction.bboxes_xyxy for i, (label, conf, bbox) in enumerate(zip(labels, confidence, bboxes)): print("prediction: ", i) print("label_id: ", label) print("label_name: ", class_names[int(label)]) print("confidence: ", conf) print("bbox: ", bbox) print("--" * 10)
内容的提问来源于stack exchange,提问作者XYZ
相关产品推荐
相关产品推荐

