Watchdog и matplotlib: обработка изображения и отображение результатов при поступлении нового файла в каталог - PullRequest
13 голосов
/ 23 апреля 2019

Я пытаюсь создать простое приложение, в котором

  1. изображение помещается в каталог (внешним процессом)

  2. Срабатывает Python Watchdog, и изображение обрабатывается функцией, а результаты отображаются в окне

Задание работает непрерывно, и функция обработки запускается, когда изображение попадает в каталог. Окно графика результатов должно быть обновлено новыми результатами вместо закрытия окна, а затем повторного построения графика.

Приведенный ниже код не отображает результаты. Окно графика остается пустым, а затем вылетает. Если что-то, кроме matplotlib, может легко выполнить эту работу, то это тоже будет хорошо.

# plt is matplotlib.pyplot

def process_and_plot(test_file):
    y, x = getresults(test_file) # function which returns results on image file

    y_pos = range(len(y))
    plt.figure(num=1,figsize=(20,10))
    plt.bar(y_pos, y, align='center')
    plt.xticks(y_pos, x)
    plt.show()

# to trigger the proess_and_plt function when a new file comes in directory 

class ExampleHandler(FileSystemEventHandler):
    def on_created(self, event): 
        print event.src_path
        process_and_plot(event.src_path)

event_handler = ExampleHandler() 
observer.schedule(event_handler, path='path/to/directory')
observer.start()
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()

observer.join()

1 Ответ

2 голосов
/ 11 мая 2019

Единственное, что мне нужно было сделать, чтобы заставить ваш код работать, это заменить plt.show() на plt.pause(.001), который неблокирует и обновляет и отображает цифру перед остановкой (см. документы ).

Лучший ответ по SO кажется this .Есть несколько предложений по использованию plt.show(False) или plt.ion(), чтобы сделать plt.show() неблокирующим;ни один из них не работал для меня с Matplotlib 2.2.4.

Здесь приведен полный код, поскольку код, о котором идет речь в вопросе, не содержит нескольких строк:

...