|
|
@@ -1,17 +1,57 @@
|
|
|
import cv2
|
|
|
from pylibdmtx.pylibdmtx import decode
|
|
|
import logging
|
|
|
+import os
|
|
|
+from pathlib import Path
|
|
|
|
|
|
-# TODO[SG]: add real datamatrix code. This is just a placeholder.
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
+class TestCamera:
|
|
|
+ def __init__(self, test_files_path: str):
|
|
|
+ self.image_files = []
|
|
|
+ self.current_index = 0
|
|
|
+
|
|
|
+ # Load all image files from the test directory
|
|
|
+ path = Path(test_files_path)
|
|
|
+ if path.exists() and path.is_dir():
|
|
|
+ self.image_files = sorted([
|
|
|
+ str(f) for f in path.glob("*")
|
|
|
+ if f.suffix.lower() in ['.png', '.jpg', '.jpeg']
|
|
|
+ ])
|
|
|
+ if not self.image_files:
|
|
|
+ logger.warning(f"No image files found in {test_files_path}")
|
|
|
+ else:
|
|
|
+ logger.error(f"Test files directory not found: {test_files_path}")
|
|
|
+
|
|
|
+ def read(self):
|
|
|
+ if not self.image_files:
|
|
|
+ return False, None
|
|
|
+
|
|
|
+ # Read next image file in sequence
|
|
|
+ image_path = self.image_files[self.current_index]
|
|
|
+ frame = cv2.imread(image_path)
|
|
|
+ if frame is None:
|
|
|
+ logger.error(f"Failed to load image: {image_path}")
|
|
|
+ return False, None
|
|
|
+
|
|
|
+ # Cycle through available images
|
|
|
+ self.current_index = (self.current_index + 1) % len(self.image_files)
|
|
|
+ return True, frame
|
|
|
+
|
|
|
+ def release(self):
|
|
|
+ pass
|
|
|
+
|
|
|
class DataMatrixReader:
|
|
|
def __init__(self, camera_id: int = 0):
|
|
|
self.camera_id = camera_id
|
|
|
self.camera = None
|
|
|
|
|
|
def initialize(self):
|
|
|
- self.camera = cv2.VideoCapture(self.camera_id)
|
|
|
+ if self.camera_id < 0:
|
|
|
+ test_path = "robot-control/tests/files/"
|
|
|
+ self.camera = TestCamera(test_path)
|
|
|
+ else:
|
|
|
+ self.camera = cv2.VideoCapture(self.camera_id)
|
|
|
|
|
|
def read_datamatrix(self) -> str:
|
|
|
ret, frame = self.camera.read()
|