如何判断最新文件未更新,优化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
相关产品推荐
相关产品推荐

