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

YOLOv8控制台输出来源及自定义输出需求咨询

YOLOv8实时检测控制台输出溯源与自定义输出实现

一、控制台输出的来源

YOLOv8默认的检测结果、耗时输出,根本不在model.py里,而是藏在这几个核心模块中:

  • 实时预测的核心逻辑在ultralytics/yolo/utils/predictor.py的Predictor类里,它的run()方法会触发on_predict_batch_end()等回调函数,这些回调会处理并打印每帧的检测统计、处理耗时。
  • 如果你在代码里直接打印results对象,会触发ultralytics/yolo/engine/results.py中Results类的__str__内置方法,这个方法会输出检测到的目标数量、每个框的坐标和类别信息。
  • 检测任务专属的预测脚本ultralytics/yolo/v8/detect/predict.py,也会调用基础预测模块的输出逻辑,把结果输出到控制台。

二、自定义输出逻辑实现

最省心的方式是在自己的调用代码里接管输出,不用修改YOLOv8源码,直接用下面的方案:

自定义输出代码示例

from ultralytics import YOLO
import cv2

# 加载YOLOv8模型
model = YOLO('yolov8n.pt')
# 打开默认摄像头(0对应系统默认摄像头)
cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 执行检测,verbose=False关闭YOLO默认输出
    results = model(frame, verbose=False)
    
    # 自定义输出逻辑
    det_boxes = results[0].boxes
    if len(det_boxes) == 0:
        print("no detect")
    else:
        # 获取模型的类别名称映射表
        cls_names = results[0].names
        # 遍历每个检测到的目标
        for box in det_boxes:
            cls_id = int(box.cls[0])
            print(f"detect: {cls_names[cls_id]}")
    
    # 显示标注后的检测画面(可选,不需要可以删掉)
    cv2.imshow("YOLOv8 Detection", results[0].plot())
    # 按Q键退出检测
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

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

关键说明

  • verbose=False:直接关闭YOLOv8自带的控制台输出,避免和自定义输出冲突。
  • results[0].boxes:存储当前帧的所有检测框,长度为0表示无目标检测到。
  • results[0].names:模型预定义的类别名称字典,通过检测框的cls[0](类别ID)可以拿到对应的目标名称。

内容的提问来源于stack exchange,提问作者Teddy Porfiris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:52:38