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

如何实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:54:23