You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv8+OpenCV实时识别绘制边界框遇ValueError问题求助

解决YOLOv8实时检测中"ValueError: not enough values to unpack (expected 3, got 1)"错误

问题原因

你错误地将YOLOv8 model.predict() 的返回值直接拆解为classes, scores, boxes三个变量,但实际上该方法返回的是单个Results对象(或多帧的Results列表),而非三个独立的数组,因此触发“解包值不足”的错误。

修正步骤及完整代码

以下是修正后的代码,同时修复了其他潜在问题:

import cv2
from ultralytics import YOLO

# 加载自定义YOLOv8模型
model = YOLO('best.pt')

# 初始化摄像头
vid = cv2.VideoCapture(0)

# 修正颜色列表格式(原格式是嵌套错误的元组)
COLORS = [(0, 255, 25), (255, 255, 0), (0, 255, 0), (255, 0, 0)]
# 替换为你训练模型时的类别名称,比如["cat", "dog", "person"]
class_names = ["类别1", "类别2", "类别3"]

while True:
    # 读取帧
    ret, frame = vid.read()
    if not ret:
        break  # 摄像头读取失败时退出循环

    # 执行检测,获取Results对象
    results = model.predict(frame, conf=0.25)
    
    # 遍历检测结果(单帧通常只有一个Results对象)
    for result in results:
        # 遍历每个检测框
        for box in result.boxes:
            # 提取检测框信息
            class_id = int(box.cls.item())  # 类别ID
            score = box.conf.item()  # 置信度
            # 获取边界框坐标(xyxy格式:x1, y1, x2, y2)
            x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())
            
            # 选择对应颜色
            color = COLORS[class_id % len(COLORS)]
            # 生成标签文本
            label = f"{class_names[class_id]}: {score:.2f}"
            
            # 绘制边界框
            cv2.rectangle(frame, (x1, y1), (x2, y2), color, 2)
            # 绘制标签(可选)
            cv2.putText(frame, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

    # 显示帧
    cv2.imshow('frame', frame)
    
    # 按q退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
vid.release()
cv2.destroyAllWindows()

关键改动说明

  • 正确处理预测结果:通过results = model.predict(...)获取Results对象,再从result.boxes中提取每个检测框的类别、置信度和坐标。
  • 修复颜色列表:原COLORS是嵌套错误的元组,改为包含多个RGB颜色元组的列表。
  • 补充类别名称:class_names需替换为你训练模型时定义的类别名称,否则会触发索引错误。
  • 坐标转换:将YOLO返回的浮点型坐标转为整数,适配OpenCV的绘图要求。
  • 增加摄像头读取失败判断:避免帧读取失败导致后续错误。

内容的提问来源于stack exchange,提问作者Vinicius Neves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:32:44