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

如何判断最新文件未更新,优化YOLOv5人数检测输出逻辑

YOLOv5人员检测计数逻辑修复

当前使用YOLOv5进行人员检测时,通过读取labels目录下的最新标注文件统计人数,但存在逻辑缺陷:当未检测到人员时,系统不会生成新文件,代码会持续读取最后一个已存在的文件并输出旧的人数,无法正确反映当前无人员的状态。需要实现:若最新文件与上一循环的文件一致,则输出“总人数:0”。

修改后的代码

import os
import time

directory_path = r'C:\Users\MRTS\yolov5\runs\detect\exp2\labels'

# 初始化变量:记录上一次处理的文件名
last_processed_file = None

while True:
    current_most_recent_file = None
    current_most_recent_time = 0
    
    # 遍历目录找到当前最新的文件
    for entry in os.scandir(directory_path):
        if entry.is_file():
            mod_time = entry.stat().st_mtime_ns
            if mod_time > current_most_recent_time:
                current_most_recent_file = entry.name
                current_most_recent_time = mod_time
    
    # 判断是否有新文件生成
    if current_most_recent_file != last_processed_file:
        # 读取新文件统计人数
        with open(os.path.join(directory_path, current_most_recent_file), 'r') as f:
            lines = len(f.readlines())
            print('Total Number of People:', lines)
        # 更新上一次处理的文件记录
        last_processed_file = current_most_recent_file
    else:
        # 无新文件,输出当前无人员
        print('总人数:0')
    
    time.sleep(3)

关键改动说明

  • 新增last_processed_file变量,专门记录上一次循环处理过的文件名
  • 每次循环重新遍历目录,获取当前最新的文件,避免依赖旧的时间记录导致的判断误差
  • 对比当前最新文件与上一次处理的文件:
    • 不一致时,说明有新的检测结果,读取文件统计人数并更新记录
    • 一致时,说明没有新检测结果(未检测到人员),输出“总人数:0”
  • 去掉原代码的os.chdir操作,改用os.path.join拼接文件路径,避免目录切换带来的潜在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:05:15