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

从YOLO结果提取属性:代码合理性及冗余代码排查请求

代码合理性分析与优化建议

存在的问题与冗余点

  • 重复索引冗余:原代码里反复用result[0]访问帧数据,其实Ultralytics的stream=True返回的每个result本身就是单帧结果,不需要额外索引[0];而且多次重复访问同一属性,既冗余又降低可读性。
  • 时间戳重复生成:每个检测框都重新生成一次时间戳,同一帧里的所有框时间应该一致,完全没必要循环内重复生成。
  • 置信度取值错误:conf = int(result[0].boxes.conf[0]*100)固定取第一个框的置信度,导致所有框的置信度都和第一个框相同,逻辑错误。
  • 文件IO频繁:每次循环都打开一次文件,频繁的磁盘操作会拖慢程序运行效率。
  • 坐标取值繁琐:逐个调用item()提取坐标值,代码冗余,其实可以直接把张量转成列表。
  • 日期时间拼接冗余:手动拼接年月日时分秒,不如用strftime方法直接格式化更简洁规范。

优化后的代码

from ultralytics import YOLO
from datetime import datetime

# 初始化模型与数据源
model = YOLO("yolov8n.pt")
source = "https://youtu.be/LNwODJXcvt4"
results = model(source, stream=True)

# 一次性打开文件,避免重复IO操作
with open("result.txt", "a") as myfile:
    for result in results:
        # 跳过无检测结果的帧
        if not result.boxes:
            continue
        
        # 提前提取当前帧的基础数据,避免重复访问
        frame_path = result.path
        boxes = result.boxes
        # 同一帧的所有框共用一个时间戳
        dt_now = datetime.now()
        date_str = dt_now.strftime("%Y-%m-%d")
        time_str = dt_now.strftime("%H:%M:%S:%f")
        
        # 同时遍历类别、置信度、坐标,逻辑更清晰
        for cls, conf, coord in zip(boxes.cls, boxes.conf, boxes.xywhn):
            class_id = int(cls.item())
            class_name = model.names[class_id]
            confidence = int(conf.item() * 100)
            coordinate = coord.tolist()
            
            # 格式化写入内容,结构更规整
            myfile.write(
                f"Name: {class_name} ({class_id}),\n"
                f"Confidence: {confidence},\n"
                f"Coordinate: {coordinate},\n"
                f"Date: {date_str},\n"
                f"Time: {time_str}\n\n"
            )

优化说明

  • 修正核心逻辑错误:把置信度的取值改为当前循环对应的框,解决原代码置信度统一的问题。
  • 减少冗余操作:提前提取帧的属性、统一生成时间戳,避免重复计算和访问。
  • 提升代码可读性:变量命名更直观,用zip同时遍历多个属性,逻辑连贯;用strftime简化时间格式化,代码更简洁。
  • 优化性能:只打开一次文件,减少磁盘IO开销;用张量的tolist()方法简化坐标提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:35:00