簡體   English   中英

使用Python中的Watchdog處理圖像

[英]Processing images with Watchdog in Python

我正在使用監視程序庫來檢測何時在特定文件夾中創建新映像。 當看門狗檢測到新創建的圖像時,我使用SimpleCV / OpenCV啟動了一些圖像處理功能。

但是,圖片是從Raspberry Pi相機拍攝的,從下面的錯誤中我不相信整個圖像首次出現在目錄中時會被保存。 (基本上,文件以“片段”或多種形式保存)。

請注意 ,當我圖像復制並粘貼到相應的文件夾中時,腳本會成功運行。

問:有沒有辦法在整個文件保存后啟動圖像處理?

import time
from SimpleCV import Image
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class ExampleHandler(FileSystemEventHandler):
    def on_created(self, event):
        image = Image(event.src_path)
        do image processing stuff
        print "Got event for file %s" % event.src_path 

observer = Observer()
event_handler = ExampleHandler() # create event handler
observer.schedule(event_handler, path='/path/to/images') # set observer to use created handler in directory
observer.start()

# sleep until keyboard interrupt, then stop + rejoin the observer
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()

observer.join()

錯誤轉儲:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/api.py", line 241, in run
    self.dispatch_events(self.event_queue, self.timeout)
  File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/api.py", line 408, in dispatch_events
    self._dispatch_event(event, watch)
  File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/api.py", line 403, in _dispatch_event
    handler.dispatch(event)
  File "/usr/local/lib/python2.7/dist-packages/watchdog/events.py", line 361, in dispatch
    _method_map[event_type](event)
  File "picture_classifier_cube.py", line 11, in on_created
    image = Image(event.src_path)
  File "/usr/local/lib/python2.7/dist-packages/SimpleCV/ImageClass.py", line 1073, in __init__
    self._pil = pil.open(self.filename).convert("RGB")
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1980, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file

編輯在識別新文件后更新處理程序以休眠幾秒鍾后,我收到一個不同的錯誤。

class ExampleHandler(FileSystemEventHandler):
    def on_created(self, event):
        time.sleep(3)
        cans = Image(event.src_path)

錯誤

IOError: [Errno 2] No such file or directory: '/path/to/images/test.jpg~'

請注意,我使用以下Pi命令捕獲圖像: raspistill -o 'test.jpg'

雖然可能無法確定文件是否已完成寫入而未修改執行寫入的程序,但您可以監視文件大小:

from os import stat
from time import sleep

def wait_for_write_finish( filename ):
    last_size, size= -1, 0
    while size!=last_size:
        sleep(1)
        last_size, size= size, stat(filename).st_size

您可能希望通過適當的線程執行此操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM