Закрыть текущий и открыть новое окно openCV, если файл изменен Python
Мне было интересно, может ли кто-нибудь немного помочь мне с этой проблемой, которую я не могу решить. Я использую Pafy для поиска Youtube по текстовому файлу, в котором написано название песни и который получает новую песню каждые несколько минут. Я использую Watchdog для наблюдения за модификацией файла, и когда я впервые запускаю скрипт, watchdog отлавливает изменение файла и запускает скрипт pafy и opencv, но он не будет делать то же самое, когда происходит следующая модификация.
#watchdog file change monitoring
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print ("Received modified event - %s." % event.src_path)
cv2.destroyAllWindows()
if __name__ == "__main__":
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='//PLAYING', recursive=False)
observer.start()
try:
while True:
#read PLAYING.txt
PLAYING = open('//PLAYING.txt').readline()
PLAYING = PLAYING[7:]
print (PLAYING)
#search youtube based on NowOnAir.txt
query_string = urllib.parse.urlencode({"search_query" : PLAYING})
html_content = urllib.request.urlopen("http://www.youtube.com/results?" + query_string)
search_results = re.findall(r'href=\"\/watch\?v=(.{11})', html_content.read().decode())
link = ('http://www.youtube.com/watch?v=' + search_results[0])
videoPafy = pafy.new(link)
best = videoPafy.getbestvideo()
videompv = best.url
#opencv youtube video output
video = cv2.VideoCapture(videompv)
while(video.isOpened()):
ret, frame = video.read()
resize = cv2.resize(frame, (1680, 1050))
gray = cv2.cvtColor(resize, cv2.COLOR_BGR2GRAY)
result = cv2.addWeighted(image, 0.2, resize, 0.8, 0)
cv2.namedWindow('frame', 0)
cv2.resizeWindow('frame', 1680, 1050)
cv2.imshow('frame', result)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Итак, я хочу, чтобы при изменении файла я хотел, чтобы openCV закрыл окно и открыл новое с новым результатом запроса на YouTube.
Любые предложения будут приветствоваться, заранее спасибо.
1 ответ
Если файл просто обновляется один раз за смену дорожки, вы можете проверить временную метку файла для изменения и использовать ее для запуска поиска.
import os.path
import time
last_modified = time.ctime(os.path.getmtime(file))
while True:
time.sleep(1)
if last_modified != time.ctime(os.path.getmtime(file)):
# search for the track on youtube
last_modified = time.ctime(os.path.getmtime(file))