From 0930fbf40a65c99acfa09b5ab47adad176354c30 Mon Sep 17 00:00:00 2001 From: Nathan Gill Date: Sat, 15 Nov 2025 15:15:54 +0000 Subject: [PATCH] lock image file for writing to ensure Shepherd gets full image --- robot/vision.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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: