From d946de7b632e785bc30690f1ffc199e49f7e7d05 Mon Sep 17 00:00:00 2001 From: denis defolie Date: Tue, 5 May 2026 14:59:09 +0200 Subject: [PATCH] simulation --- etc/2-cargo-reductstore-install.sh | 2 +- etc/reductstore_service.conf | 6 +++--- test_tube_scanner/modules/videofile_capture.py | 15 ++------------- test_tube_scanner/scanner/multiwell.py | 9 +++++++-- test_tube_scanner/scanner/process.py | 13 ++----------- 5 files changed, 15 insertions(+), 30 deletions(-) diff --git a/etc/2-cargo-reductstore-install.sh b/etc/2-cargo-reductstore-install.sh index 57e2877..b636813 100755 --- a/etc/2-cargo-reductstore-install.sh +++ b/etc/2-cargo-reductstore-install.sh @@ -11,4 +11,4 @@ cargo --version rustc --version cargo install reductstore -mkdir -p $HOME/medias \ No newline at end of file +mkdir -p $HOME/reduct-media diff --git a/etc/reductstore_service.conf b/etc/reductstore_service.conf index 9462fdf..2886071 100644 --- a/etc/reductstore_service.conf +++ b/etc/reductstore_service.conf @@ -1,12 +1,12 @@ [program:reductstore] process_name=%(program_name)s priority=10 -environment=RS_DATA_PATH="/home/rpi4/medias" -directory=/home/rpi4/medias +environment=RS_DATA_PATH="/home/rpi4/reduct-media" +directory=/home/rpi4/reduct-media command=/home/rpi4/.cargo/bin/reductstore user=rpi4 group=rpi4 stopasgroup=true stopsignal=SIGINT autostart=true -autorestart=true \ No newline at end of file +autorestart=true diff --git a/test_tube_scanner/modules/videofile_capture.py b/test_tube_scanner/modules/videofile_capture.py index 3e23b22..b9b1c57 100644 --- a/test_tube_scanner/modules/videofile_capture.py +++ b/test_tube_scanner/modules/videofile_capture.py @@ -38,7 +38,6 @@ class VideoFileCapture(VideoCaptureInterface): jpeg_quality: int = 85, width: Optional[int] = None, height: Optional[int] = None, - video_lists = [], use_tracking: bool = False, display = None, parent = None, @@ -55,28 +54,18 @@ class VideoFileCapture(VideoCaptureInterface): self._jpeg_quality: int = jpeg_quality self._width: Optional[int] = width self._height: Optional[int] = height - self._video_lists = video_lists - - self.ptf = 0 self._cap = None # Instance cv2.VideoCapture - def get_file(self): - if self._video_lists: - self._video_file = self._video_lists[self.ptf] - self.ptf += 1 - if self.ptf >= len(self._video_lists): - self.ptf = 0 + def set_video_file(self, vf): + self._video_file = vf return self._video_file - # ------------------------------------------------------------------ # Implémentation des méthodes abstraites # ------------------------------------------------------------------ def open(self) -> None: """Ouvre le flux V4L2 via OpenCV et configure la résolution.""" - self.get_file() - self._cap = cv2.VideoCapture(self._video_file) if not self._cap.isOpened(): diff --git a/test_tube_scanner/scanner/multiwell.py b/test_tube_scanner/scanner/multiwell.py index 5772737..1aa0f37 100644 --- a/test_tube_scanner/scanner/multiwell.py +++ b/test_tube_scanner/scanner/multiwell.py @@ -172,11 +172,16 @@ class MultiWellManager: if self.stop_playing.is_set(): break self.cnc_controller.move_to(wl.x, wl.y, feed=wl.multiwell.feed) - self._grid_scanning_capture(experiment, wl, simulate=simulate) ## change file if self.process.conf.capture_type == 'file': - self.process.cam._error_occured = True + vf = settings.MEDIA_ROOT / 'simulation' / f'{wl.name}.mp4' + if vf.exists(): + self.process.cam._video_file = str(vf) + self.process.cam._error_occured = True + + self._grid_scanning_capture(experiment, wl, simulate=simulate) + logger.info(f"Scan terminé — retour à l'origine (X={xnext:.1f} Y={ynext:.1f})") self.cnc_controller.move_to(xnext, ynext, feed=multiwell.feed*2) diff --git a/test_tube_scanner/scanner/process.py b/test_tube_scanner/scanner/process.py index 80eb4c6..da29ab6 100644 --- a/test_tube_scanner/scanner/process.py +++ b/test_tube_scanner/scanner/process.py @@ -27,7 +27,7 @@ from modules import reductstore, grbl, utils, planarian_metrics from modules.circular_crop import CircularCrop, CropStrategy from .multiwell import MultiWellManager from .constants import ScannerConstants -from . import models +#from . import models @dataclass @@ -183,17 +183,9 @@ class ScannerProcess(Task): capture_type = self.conf.capture_type if capture_type == 'file': - video_lists = [] - - wells = models.Well.objects.all() - for wl in wells: - if exists := (settings.MEDIA_ROOT / 'simulation' / f'{wl.name}.mp4').exists(): - video_lists.append(str( settings.MEDIA_ROOT / 'simulation' / f'{wl.name}.mp4') ) - - from modules.videofile_capture import VideoFileCapture self.cam = VideoFileCapture( - video_file=settings.MEDIA_ROOT / 'simulation' / 'A1.mp4', + video_file=settings.MEDIA_ROOT / 'simulation' / 'default-simulation.mp4', fps=self.video_fps, width=self.video_width, height=self.video_height, @@ -201,7 +193,6 @@ class ScannerProcess(Task): use_tracking=self.use_tracking, display=self._display, parent=self, - video_lists=video_lists, ) elif capture_type == 'webcam': from modules.webcam_capture import WebcamCapture