如何实现Yolov5监测文件夹新增图片并自动检测保存结果?
实现YOLOv5自动检测新增图片的方案
要实现监控目标文件夹、自动检测新增图片的需求,你可以用Python的watchdog库监听文件系统事件,结合现有YOLOv5检测逻辑完成自动处理,以下是完整实现方案:
1. 安装依赖
先安装文件监控所需的库:
pip install watchdog
2. 完整代码实现
import torch import cv2 from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import time import os # 仅初始化一次YOLOv5模型,避免重复加载浪费资源 model = torch.hub.load('ultralytics/yolov5', 'custom', path='yolov5/runs/train/exp8/weights/best.pt', force_reload=True) # 目标监控文件夹路径 MONITOR_FOLDER = "C:/Users/csie/PycharmProjects/Fridge/testdata" class ImageDetectionHandler(FileSystemEventHandler): def on_created(self, event): # 忽略文件夹创建事件,仅处理文件 if not event.is_directory: file_path = event.src_path # 仅处理PNG格式图片 if file_path.lower().endswith('.png'): # 等待片刻确保文件完全写入磁盘 time.sleep(0.5) self.detect_image(file_path) def detect_image(self, img_path): # 读取图片并执行检测 cv_img = cv2.imread(img_path) results = model(cv_img) # 保存检测结果 results.save() print(f"已完成图片检测:{img_path}") if __name__ == "__main__": event_handler = ImageDetectionHandler() observer = Observer() observer.schedule(event_handler, MONITOR_FOLDER, recursive=False) observer.start() print(f"开始监控文件夹:{MONITOR_FOLDER}") try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
关键说明
- 模型预加载:将模型初始化放在代码最外层,仅加载一次,大幅提升检测效率,避免每次处理图片都重新加载权重。
- 文件事件过滤:通过
on_created事件监听新增文件,仅处理.png后缀的图片,忽略文件夹和其他格式文件。 - 文件写入等待:添加
time.sleep(0.5)确保文件完全写入磁盘后再读取,防止因文件未写完导致的读取错误。 - 优雅退出:支持通过
Ctrl+C终止监控程序,确保观察者线程正常关闭。
内容的提问来源于stack exchange,提问作者tillen1001
相关产品推荐
相关产品推荐

