gpt4 book ai didi

python - 在 Python 中使用 Watchdog 处理图像

转载 作者:行者123 更新时间:2023-11-28 18:43:11 25 4
gpt4 key购买 nike

我正在使用看门狗库来检测何时在特定文件夹中创建了新图像。当 watchdog 检测到新创建的图像时,我会使用 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

你可能想用适当的线程来做到这一点

关于python - 在 Python 中使用 Watchdog 处理图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23525035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com