生成器对象没有盒子

问题描述 投票:0回答:1

我正在尝试在树莓派 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(), 属性错误:“生成器”对象没有属性“盒子”

python object-detection yolov8
1个回答
0
投票

首先,只要一次在单个帧上运行推理,就不需要使用

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])
© www.soinside.com 2019 - 2024. All rights reserved.