时间质量 2024-06-08 16:52 采纳率: 50%
浏览 3
已结题

python yolov8n


from ultralytics import YOLO
import cv2

model = YOLO("./pth/yolov8n.pt")
vc = cv2.VideoCapture(0)

while True:
    ret, frame = vc.read()
    if frame is None:
        break
    if ret:
        results = model(frame, imgsz=320, conf=0.75)

        for res in results:
            for box in res.boxes.xyxy:
                for cls in res.pred[1]:
                
                 if cls == 0:  # 0 表示类别为人
                    box_str = ' '.join(map(str, box.tolist()))
                    print("Bounding Box Coordinates:", box_str)

                    # 提取边界框坐标
                    x1, y1, x2, y2 = map(int, box.tolist())

                    # 计算边界框中心点坐标
                    center_x = (x1 + x2) // 2
                    center_y = (y1 + y2) // 2
                    center = (center_x, center_y)
                    print("Center Point Coordinates:", center)

                    # 绘制边界框和中心点
                    cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
                    cv2.circle(frame, center, 5, (0, 255, 0), -1)

        # 在图像上显示边界框和中心点
        cv2.imshow("Bounding Boxes", frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

vc.release()
cv2.destroyAllWindows()



在VScode里面运行,出现了如下报错

AttributeError: 'Results' object has no attribute 'pred'. See valid attributes below.

是什么原因,该如何修改


  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-08 16:52
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据你提供的代码和错误信息,问题出现在尝试访问Results对象的pred属性时。错误提示AttributeError: 'Results' object has no attribute 'pred'表明Results对象没有pred这个属性。这可能是因为YOLO模型的输出结构与你的代码预期的不一致。

    在YOLO模型的输出中,通常包含边界框坐标、置信度和类别概率。Results对象的结构可能已经改变,或者你使用的库版本与代码示例不匹配。为了解决这个问题,你需要检查Results对象的属性,并根据实际的结构来访问数据。

    以下是一些可能的解决方案:

    1. 检查YOLO模型的输出结构:首先,你需要了解YOLO模型输出的具体结构。这可以通过打印results对象来查看其属性和方法。

    2. 更新代码以匹配模型输出:一旦你了解了Results对象的结构,你可以更新代码来正确地访问所需的属性。例如,如果pred属性不存在,可能需要直接访问类别概率或类别索引。

    3. 查阅文档或更新库:如果ultralytics库有更新,可能需要查阅最新的文档或更新你的库到最新版本。

    4. 使用正确的属性访问数据:根据YOLO模型的输出结构,使用正确的属性来访问数据。例如,如果类别信息存储在不同的属性中,你需要相应地修改代码。

    下面是一个示例,展示如何检查Results对象并访问其属性:

    for res in results:
        print(res)  # 打印结果对象,查看其属性和方法
        boxes = res.boxes.xyxy.xyxy[0]  # 假设边界框存储在boxes属性中
        scores = res.scores  # 假设置信度存储在scores属性中
        classes = res.indexes  # 假设类别索引存储在indexes属性中
    
        for box, score, cls in zip(boxes, scores, classes):
            if cls == 0:  # 0 表示类别为人
                # ... 省略后续代码 ...
    

    请注意,上面的代码只是一个示例,你需要根据实际的Results对象结构来调整。

    至于参考资料,你可以查看ultralytics的官方文档或GitHub仓库,以获取更多关于如何使用YOLO模型和处理其输出的信息。这里是一个可能的链接到GitHub仓库:ultralytics/yolov8

    如果你需要进一步的帮助,可以提供更多的错误信息或Results对象的结构信息,以便更准确地解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月20日
  • 已采纳回答 6月12日
  • 创建了问题 6月8日

悬赏问题

  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡
  • ¥20 基于MATLAB的TDOA
  • ¥15 为啥输入字体突然变了
  • ¥20 已知坐标,换成MATLAB可以用的数据
  • ¥15 这个python五子棋代码的每一句意思是什么啊
  • ¥15 求一段隐藏代码,隐藏一些内容