diff --git a/robot/vision.py b/robot/vision.py index 9ffa7c0..bf6381c 100755 --- a/robot/vision.py +++ b/robot/vision.py @@ -4,6 +4,7 @@ import abc import logging import os +from fcntl import lockf, LOCK_EX, LOCK_UN import threading import queue @@ -417,7 +418,15 @@ def run(self): if self._bounding_box: frame = self._draw_bounding_box(frame, detections) if self._save: - cv2.imwrite(IMAGE_TO_SHEPHERD_PATH, frame) + try: + f = os.open(IMAGE_TO_SHEPHERD_PATH, os.O_RDWR) + lockf(f, LOCK_EX) + cv2.imwrite(IMAGE_TO_SHEPHERD_PATH, frame) + finally: + # This feels like a hack + if "f" in locals(): + lockf(f, LOCK_UN) + os.close(f) if self._usb_stick: self._write_to_usb(capture, detections) if self._send_to_sheep: