refactored initialization

This commit is contained in:
2025-12-11 08:39:55 +01:00
parent 4db4b40b13
commit 3e5f5fce72
+34 -12
View File
@@ -17,15 +17,27 @@ RESULTS_FOLDER = "results"
class Detector(abc.ABC): class Detector(abc.ABC):
def __init__(self, name: str, params: dict, source: str, detector: list[BoardDetector], out_file: str|None = None, rotation_order: str=''): def __init__(self, name: str, params: dict, source: str, detector: list[BoardDetector], out_file: str|None = None, rotation_order: str=''):
Path.mkdir(Path(RESULTS_FOLDER), exist_ok=True)
self.name = name self.name = name
self.params = params self.params = params
self.detector = detector self.detector = detector
self.out_file = out_file self.out_file = out_file
self.rotation_order = rotation_order self.rotation_order = rotation_order
self.camera_name = "default"
self.device_id = None self.device_id = None
self.src_video = None self.src_video = None
self.src_images = None self.src_images = None
self.camera_name = None
try:
self.params_load()
except Exception:
self.params_save()
self._source_init(source)
self.calibration = Calibration()
self.calibration.load(self._get_calibration_filename())
def _source_init(self, source: str):
self.cap = None
if source.isnumeric(): if source.isnumeric():
self.device_id = int(source) self.device_id = int(source)
else: else:
@@ -40,13 +52,6 @@ class Detector(abc.ABC):
suffix = basename.split('_')[-1].split('.')[1] suffix = basename.split('_')[-1].split('.')[1]
self.src_images = f"{os.path.dirname(source)}/{name}_%0{len(numeric_part)}d.{suffix}" self.src_images = f"{os.path.dirname(source)}/{name}_%0{len(numeric_part)}d.{suffix}"
Path.mkdir(Path(RESULTS_FOLDER), exist_ok=True)
try:
self.params_load()
except Exception:
self.params_save()
self.cap = None
if self.device_id is not None: if self.device_id is not None:
# Open camera # Open camera
self.cap = cv.VideoCapture(self.device_id) self.cap = cv.VideoCapture(self.device_id)
@@ -59,15 +64,32 @@ class Detector(abc.ABC):
self.cap = cv.VideoCapture(self.src_images, cv.CAP_IMAGES) self.cap = cv.VideoCapture(self.src_images, cv.CAP_IMAGES)
self.camera_name = self.name self.camera_name = self.name
self.calibration = Calibration() self.camera_name = self._get_camera_name()
self.calibration.load(f"{RESULTS_FOLDER}/{self.camera_name}_cal.npz")
def _get_calibration_filename(self):
return f"{RESULTS_FOLDER}/{self.camera_name}_cal.npz"
def _get_params_filename(self):
return f"{RESULTS_FOLDER}/{self.params["name"]}.json"
def _get_camera_name(self):
camera_name = "default"
if self.cap is not None:
backends = {'V4L2': cv.CAP_V4L}
cameras = enumerate_cameras(backends[self.cap.getBackendName()])
for cam in cameras:
if cam.index == self.device_id:
camera_name = cam.name.split(':')[0]
return camera_name
def params_save(self): def params_save(self):
with open(f"{RESULTS_FOLDER}/{self.params["name"]}.json", 'w') as fp: with open(self._get_params_filename(), 'w') as fp:
json.dump(self.params, fp, indent=4) json.dump(self.params, fp, indent=4)
def params_load(self): def params_load(self):
with open(f"{RESULTS_FOLDER}/{self.params["name"]}.json", 'r') as fp: with open(self._get_params_filename(), 'r') as fp:
self.params = json.load(fp) self.params = json.load(fp)
def cap_init(self): def cap_init(self):