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

如何在YOLOv8中筛选置信度50%以上的交通灯检测结果

解决YOLOv8筛选置信度>50%的交通灯检测结果问题

方法1:推理时直接设置置信度阈值(最简单)

YOLOv8的model()推理方法支持直接传入conf参数,自动过滤置信度低于阈值的检测结果,无需手动处理:

修改推理行代码如下:

results = model(frame, conf=0.5)  # conf=0.5表示只保留置信度≥50%的结果

之后调用r.plot()时,只会绘制符合阈值要求的检测框和分类标签。

方法2:手动获取置信度并筛选(适合自定义逻辑)

如果需要更灵活的处理(比如同时获取分类名称、置信度做额外逻辑),可以遍历检测框的属性,手动筛选:

修改循环内的代码:

for r in results:
    # 筛选置信度>0.5的检测框
    valid_boxes = r.boxes[r.boxes.conf > 0.5]
    # 绘制符合条件的框到帧上
    frame = r.plot(boxes=valid_boxes)
    
    # 可选:打印符合条件的检测详情
    for box in valid_boxes:
        # 从张量中提取置信度和类别信息
        conf_score = box.conf.item()  # 转换为Python浮点数
        cls_index = box.cls.item()
        cls_name = r.names[cls_index]  # 根据类别索引获取颜色名称(red/green/yellow/off)
        print(f"交通灯颜色:{cls_name},置信度:{conf_score:.2f}")

完整修改后的脚本

import cv2
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('/Models/best_traffic_nano_yolo.pt')

# open a video file or start a video stream
cap = cv2.VideoCapture(0)  # replace with 0 for webcam

while cap.isOpened():
    # Capture frame-by-frame
    ret, frame = cap.read()
    if not ret:
        break

    # flip the image
    # frame = cv2.flip(frame, -1) 

    # Run inference with confidence threshold
    results = model(frame, conf=0.5)  # 直接设置置信度阈值为0.5

    for r in results:
        # 若需要手动筛选,替换为方法2的代码
        frame = r.plot()

    # Display the resulting frame
    cv2.imshow('frame', frame)
    
    # Press 'q' on keyboard to exit
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# After the loop release the cap object and destroy all windows
cap.release()
cv2.destroyAllWindows()

关键属性说明

  • r.boxes.conf:每个检测框的置信度张量(需用.item()转换为普通浮点数)
  • r.boxes.cls:每个检测框的类别索引张量
  • r.names:模型的类别名称字典,对应你的[red,green,yellow,off]标签

内容的提问来源于stack exchange,提问作者Stephan Yazvinski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:23:17