[Python]使用Watchdog 即時監控有無新的圖片輸入

更新於 發佈於 閱讀時間約 8 分鐘

🐶 什麼是 Watchdog?

Watchdog 是一個 Python 套件,用來即時監控檔案系統的變化。它可以在資料夾內有「新增」、「修改」、「刪除」等事件時,立即觸發事件處理函式,不需要手動輪詢 (polling),效率高又省資源。

✅ Watchdog 的特點:

  • 採用 OS 層級的檔案通知機制(如 Windows 的 ReadDirectoryChangesW、Linux 的 inotify
  • 支援各種作業系統:Windows / macOS / Linux
  • 可監控檔案或資料夾的:
    • 新增 (on_created)
    • 修改 (on_modified)
    • 刪除 (on_deleted)
    • 重新命名 (on_moved)
  • 常見應用:
    • 檔案備份系統
    • 即時影像處理
    • 檔案轉檔或模型推論觸發器
    • 自動同步資料

📂 使用 Watchdog 偵測資料夾是否新增圖像檔案並自動讀取

以下教你使用 Watchdog 監控特定資料夾,當有新圖像檔(如 .jpg, .png 等)產生時,立即使用 Pillow (PIL) 套件讀取顯示圖像。

🐶 使用 Watchdog 即時偵測資料夾新增圖像檔案

🔧 安裝 Watchdog

先安裝 watchdog:

pip install watchdog

watchdog 的完整範例程式碼:

import os
from PIL import Image
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

# 📂 設定要監控的資料夾
watch_folder = "C:/Users/yourname/Pictures/monitor_folder" # ← 改成你自己的路徑

# 支援的圖檔副檔名
image_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.gif'}

# 📌 自定義事件處理器
class ImageHandler(FileSystemEventHandler):
def on_created(self, event):
if not event.is_directory:
_, ext = os.path.splitext(event.src_path)
if ext.lower() in image_extensions:
print(f"🖼️ 偵測到新圖像:{event.src_path}")
try:
img = Image.open(event.src_path)
img.show() # 可改成其他處理邏輯
except Exception as e:
print(f"⚠️ 圖像開啟失敗:{e}")

# 📡 建立 Observer 並啟動監控
if __name__ == "__main__":
event_handler = ImageHandler()
observer = Observer()
observer.schedule(event_handler, path=watch_folder, recursive=False)
observer.start()
print("🚀 Watchdog 已啟動,監控資料夾:", watch_folder)
try:
while True:
pass # 或 time.sleep(1)
except KeyboardInterrupt:
observer.stop()
print("\n🛑 Watchdog 停止監控")
observer.join()

🧰 實際測試

在D槽創建一個資料夾image\watch_dog。

raw-image

實際丟一張圖進去

raw-image


raw-image



🔍 說明與重點

✅ Watchdog 主要元件與常用函式說明

📦 FileSystemEventHandler(事件處理器基底類別)

  • 來源:from watchdog.events import FileSystemEventHandler
  • 你可以繼承此類別,自訂要處理的檔案事件
  • 可覆寫的事件函式:
    • 📁 on_created(self, event) → 檔案或資料夾被建立時觸發
    • ✏️ on_modified(self, event) → 檔案被修改時觸發
    • ❌ on_deleted(self, event) → 檔案被刪除時觸發
    • 🔄 on_moved(self, event) → 檔案被搬移或重新命名時觸發
  • ✅ 你只需要覆寫你想處理的事件,例如只監控「新增」就只寫 on_created


👀 Observer(觀察器)

  • 來源:from watchdog.observers import Observer
  • 負責啟動與執行檔案系統的監控(在背景 Thread 中執行)
  • 可以同時綁定多個處理器與路徑
  • 提供 .start().stop().join() 等控制方法


🧩 observer.schedule()(註冊處理器)

  • 功能:將你定義的事件處理器綁定到指定資料夾上
  • 語法:
    observer.schedule(event_handler, path=資料夾路徑, recursive=False)
  • 參數說明:
    • event_handler:你繼承自 FileSystemEventHandler 的物件實例
    • path:監控的目標資料夾(字串)
    • recursive:是否也監控子資料夾(預設 False)


on_created(self, event)(常用事件函式)

  • 當指定資料夾中出現「新檔案或資料夾」時會觸發此函式
  • 常用用途:偵測新檔案並立即讀取、處理、轉換等
  • 建議搭配:
    • event.src_path → 取得新檔案完整路徑
    • os.path.splitext() → 判斷副檔名
    • os.path.isfile() → 確認是否為檔案
  • ⚠️ 注意事項
    • 事件觸發不保證檔案已寫入完成,建議加上延遲或 try-except 機制避免讀取失敗


🧾 事件物件 (event) 常用屬性說明

當你覆寫事件方法(如 on_created(self, event))時,event 是會自動傳入的參數物件,包含關於該事件的詳細資訊。

📌 常用屬性:

  • 📍 event.src_path
    被觸發事件的完整檔案路徑(字串格式)
    👉 可用來直接開啟或判斷是哪個檔案觸發事件
  • 📁 event.is_directory
    判斷是否為資料夾(布林值:True 表資料夾,False 表檔案)
    👉 常用來「只處理檔案」而忽略資料夾事件
  • 🏷️ type(event)
    傳回事件的類別型別,例如:FileCreatedEvent, DirCreatedEvent
    👉 可進一步針對不同事件型別做特殊處理或記錄

✅ Watchdog 支援的平台

  • ✅ Windows
  • ✅ macOS
  • ✅ Linux

🐍 Python 支援版本

  • Watchdog 支援 Python 3.6~3.12,你用的 Python 3.8 非常適合。

📌 其他補充(可選功能)

  • 若需同時處理修改事件,可加上 on_modified(self, event)
  • 若需監控子目錄:recursive=True
  • 可結合 threading 或 async 架構做更進階應用



留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
141會員
253內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
2025/01/12
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
2025/01/12
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
2025/01/01
有時候總是會需要將兩個PDF檔或多個來做合併。 在 Python 中,您可以使用 PyPDF2 或 PyPDF4 等庫來合併多個 PDF 文件。 以下是使用 PyPDF2 的範例步驟: 我利用word另存兩個pdf來做示範: 完成合併 1. 安裝 PyPDF2 如果還未安裝,您可以
Thumbnail
2025/01/01
有時候總是會需要將兩個PDF檔或多個來做合併。 在 Python 中,您可以使用 PyPDF2 或 PyPDF4 等庫來合併多個 PDF 文件。 以下是使用 PyPDF2 的範例步驟: 我利用word另存兩個pdf來做示範: 完成合併 1. 安裝 PyPDF2 如果還未安裝,您可以
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
    寵物溝通興起 寵物溝通之亂 寵物溝通是騙人的嗎? 寵物溝通師具備的技能 寵物溝通的行情價格 怎樣挑選寵物溝通師  
Thumbnail
    寵物溝通興起 寵物溝通之亂 寵物溝通是騙人的嗎? 寵物溝通師具備的技能 寵物溝通的行情價格 怎樣挑選寵物溝通師  
Thumbnail
經過半年多的努力,我終於在我的 Garmin 手錶上蒐集了 WatchiBeastie 所有種類的寵物,由於不同的寵物需要不同的活動條件,初期只能靠零碎的記憶和朋友的經驗,各種瞎猜進行寵物的孵化條件,後來軟體更新官方有釋出孵蛋提示,才終於蒐集到所有種類的寵物。
Thumbnail
經過半年多的努力,我終於在我的 Garmin 手錶上蒐集了 WatchiBeastie 所有種類的寵物,由於不同的寵物需要不同的活動條件,初期只能靠零碎的記憶和朋友的經驗,各種瞎猜進行寵物的孵化條件,後來軟體更新官方有釋出孵蛋提示,才終於蒐集到所有種類的寵物。
Thumbnail
主人家的鐵門深鎖,有種不可預知的未來荒恐。顫抖的按下電鈴,話筒傳出主人的聲音後,急忙的吠叫;按照主人的規定,以吠叫作為回應方式。當主人開起了鐵門,一踏入後急忙的脫光自己身上的衣褲,只留下了主人為軍犬選定的三角褲。「伏地挺身預備。」主人發號著命令,於是雙手撐著地板,就準備姿勢。「一上、二下。一。」於是
Thumbnail
主人家的鐵門深鎖,有種不可預知的未來荒恐。顫抖的按下電鈴,話筒傳出主人的聲音後,急忙的吠叫;按照主人的規定,以吠叫作為回應方式。當主人開起了鐵門,一踏入後急忙的脫光自己身上的衣褲,只留下了主人為軍犬選定的三角褲。「伏地挺身預備。」主人發號著命令,於是雙手撐著地板,就準備姿勢。「一上、二下。一。」於是
Thumbnail
「讓你的毛絨寶貝在自然中探險,享受自由與安全的完美平衡。無論何時何地,寵物自走者都是你最忠實的伴侶,守護並陪伴著你的寵物,讓牠們擁有無憂無慮的美好時光。」 https://www.youtube.com/watch?v=btfBW7zknBE 在一個清晨,一位忙碌的狗主人準備出門工作,但他不
Thumbnail
「讓你的毛絨寶貝在自然中探險,享受自由與安全的完美平衡。無論何時何地,寵物自走者都是你最忠實的伴侶,守護並陪伴著你的寵物,讓牠們擁有無憂無慮的美好時光。」 https://www.youtube.com/watch?v=btfBW7zknBE 在一個清晨,一位忙碌的狗主人準備出門工作,但他不
Thumbnail
訓練狗狗學會等一下是一項非常有用的技能,可以幫助您控制狗狗的行為, 使其在各種情況下保持安靜和冷靜。 以下是一個簡單的步驟來訓練您的狗狗學會等一下: 1.已經學會基本的指令:在訓練狗狗等一下之前, 確保狗狗已經熟悉並能夠理解一些基本的指令,如“坐下”、“待在這裡”等。 2.開始訓練:在一個安
Thumbnail
訓練狗狗學會等一下是一項非常有用的技能,可以幫助您控制狗狗的行為, 使其在各種情況下保持安靜和冷靜。 以下是一個簡單的步驟來訓練您的狗狗學會等一下: 1.已經學會基本的指令:在訓練狗狗等一下之前, 確保狗狗已經熟悉並能夠理解一些基本的指令,如“坐下”、“待在這裡”等。 2.開始訓練:在一個安
Thumbnail
1.建立良好的溝通 您需要學會使用一致的語言和姿勢來傳達指令。 使用簡單清晰的詞語,例如「坐下」、「待命」、「來」等, 並且搭配明確的手勢或身體動作, 讓狗狗能夠更容易理解您的意圖。 2.正面強化 通過給予獎勵來增強狗狗所做的正確行為。 這可以是美食、玩具或者語言表揚,取決於您的狗狗對什
Thumbnail
1.建立良好的溝通 您需要學會使用一致的語言和姿勢來傳達指令。 使用簡單清晰的詞語,例如「坐下」、「待命」、「來」等, 並且搭配明確的手勢或身體動作, 讓狗狗能夠更容易理解您的意圖。 2.正面強化 通過給予獎勵來增強狗狗所做的正確行為。 這可以是美食、玩具或者語言表揚,取決於您的狗狗對什
Thumbnail
不知道為什麼 , 只要心情不好時 ... 貓咪就是好的夥伴... 以前總是會覺得貓咪就是喜歡耍任性 很喜歡搗蛋 也喜歡跑在電視上面露出一條電視桿晃來晃去 一副告訴你 本宮乏了 你們跪安吧 (是不是有點想揍他) 看似無害的貓科動物 .... 殊不知作為貓奴 還是不忍心對他發脾氣 哈哈
Thumbnail
不知道為什麼 , 只要心情不好時 ... 貓咪就是好的夥伴... 以前總是會覺得貓咪就是喜歡耍任性 很喜歡搗蛋 也喜歡跑在電視上面露出一條電視桿晃來晃去 一副告訴你 本宮乏了 你們跪安吧 (是不是有點想揍他) 看似無害的貓科動物 .... 殊不知作為貓奴 還是不忍心對他發脾氣 哈哈
Thumbnail
你是否曾經好奇過,當你離開家去上班或外出購物時,你的狗狗在家裡都在做些什麼?牠們是不是一直在等你回來,或者是在自己找樂子?會不會偷吃你的食物,或者翻找你的東西?狗狗在主人不在家時的行為,其實可以反映出牠們的心理狀態和情感需求。
Thumbnail
你是否曾經好奇過,當你離開家去上班或外出購物時,你的狗狗在家裡都在做些什麼?牠們是不是一直在等你回來,或者是在自己找樂子?會不會偷吃你的食物,或者翻找你的東西?狗狗在主人不在家時的行為,其實可以反映出牠們的心理狀態和情感需求。
Thumbnail
  和昨天一樣,早上八點我家門鈴作響,聽到門鈴聲,第一個想到的就是岳翔了。起身坐在床邊,我想著我昨晚考慮的對不對,也就是再給他一次機會讓他證明自己真的知錯了。   走出房門,我先幫狗狗的碗裡裝好飼料,狗狗似乎早就在等我起床給牠準備飼料,因為牠把碗叼到廚房去了。   打開門,我面無表情的看著他。
Thumbnail
  和昨天一樣,早上八點我家門鈴作響,聽到門鈴聲,第一個想到的就是岳翔了。起身坐在床邊,我想著我昨晚考慮的對不對,也就是再給他一次機會讓他證明自己真的知錯了。   走出房門,我先幫狗狗的碗裡裝好飼料,狗狗似乎早就在等我起床給牠準備飼料,因為牠把碗叼到廚房去了。   打開門,我面無表情的看著他。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News