我正在尝试在树莓派 4 中运行对象检测代码
import cv2
from ultralytics import YOLO
import argparse
import supervision as sv
def parse_argument() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="YOLOv8 Live")
parser.add_argument(
"--webcam-resolution",
default=[1280, 720],
nargs=2,type=int
)
args = parser.parse_args()
return args
def main():
args = parse_argument()
frame_width, frame_height = args.webcam_resolution
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, frame_width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, frame_height)
model = YOLO("yolov8n.pt")
box_annotator = sv.BoxAnnotator(
thickness=2,
text_thickness=2,
text_scale=1
)
while True:
ret, frame = cap.read()
results = model(frame, show=True, stream=True)
detections = sv.Detections.from_ultralytics(results)
labels = [
f"{model.model.names[class_id]} {confidence:0.2f}"
for _, confidence, class_id, _
in detections
]
frame = box_annotator.annotate(
scene=frame,
detections=detections,
labels=labels
)
cv2.imshow("Object Detection and Tracking", frame)
if(cv2.waitKey(30) == 27):
break
main()
我不断收到错误:属性错误“生成器”对象没有“框”。请有人帮助我,我不知道为什么。我尝试卸载并重新安装软件包,但没有任何效果。这是带有回溯的完整错误
这是带有回溯的完整错误
回溯(最近一次调用最后一次): 文件“/home/obioheme/Projects/Pan-Tilt-Camera/opencv-yolov8.py”,第 52 行,位于 主要的() 文件“/home/obioheme/Projects/Pan-Tilt-Camera/opencv-yolov8.py”,第 35 行,主目录 检测= sv.Detections.from_ultralytics(结果) 文件“/usr/local/lib/python3.9/dist-packages/supervision/detection/core.py”,第 262 行,from_ultralytics xyxy=ultralytics_results.boxes.xyxy.cpu().numpy(), 属性错误:“生成器”对象没有属性“盒子”
首先,只要一次在单个帧上运行推理,就不需要使用
stream=True
。流模式返回生成器,stream=False
会返回结果对象列表,在这种情况下更方便。其次,对于一帧结果将是一个包含单个结果对象的列表,因此您可以直接引用 results[0]
:
while True:
ret, frame = cap.read()
results = model(frame, show=True, stream=False)
detections = sv.Detections.from_ultralytics(results[0])