aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThéo de la Hogue2023-09-06 17:50:31 +0200
committerThéo de la Hogue2023-09-06 17:50:31 +0200
commit5a2f3b420303db6df3f9e68abcfb9bb937b6ccd7 (patch)
treecae05652f4a07eaefc4ebb403d73f6382893a884 /src
parente1803530ca3b07dc0f2fdce68805e44195e38fa3 (diff)
downloadargaze-5a2f3b420303db6df3f9e68abcfb9bb937b6ccd7.zip
argaze-5a2f3b420303db6df3f9e68abcfb9bb937b6ccd7.tar.gz
argaze-5a2f3b420303db6df3f9e68abcfb9bb937b6ccd7.tar.bz2
argaze-5a2f3b420303db6df3f9e68abcfb9bb937b6ccd7.tar.xz
More work on ArUco markers pipeline documentation.
Diffstat (limited to 'src')
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoCamera.py42
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoDetector.py81
2 files changed, 74 insertions, 49 deletions
diff --git a/src/argaze/ArUcoMarkers/ArUcoCamera.py b/src/argaze/ArUcoMarkers/ArUcoCamera.py
index 30b4415..134e76b 100644
--- a/src/argaze/ArUcoMarkers/ArUcoCamera.py
+++ b/src/argaze/ArUcoMarkers/ArUcoCamera.py
@@ -71,47 +71,7 @@ class ArUcoCamera(ArFeatures.ArCamera):
"""
# Load ArUco detector
- new_detector_data = aruco_camera_data.pop('aruco_detector')
-
- new_aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary(**new_detector_data.pop('dictionary'))
- new_marker_size = new_detector_data.pop('marker_size')
-
- # Check optic_parameters value type
- optic_parameters_value = new_detector_data.pop('optic_parameters')
-
- # str: relative path to .json file
- if type(optic_parameters_value) == str:
-
- optic_parameters_value = os.path.join(working_directory, optic_parameters_value)
- new_optic_parameters = ArUcoOpticCalibrator.OpticParameters.from_json(optic_parameters_value)
-
- # dict:
- else:
-
- new_optic_parameters = ArUcoOpticCalibrator.OpticParameters(**optic_parameters_value)
-
- # Load ArUco detector parameters
- try:
-
- # Check detector parameters value type
- detector_parameters_value = new_detector_data.pop('parameters')
-
- # str: relative path to .json file
- if type(detector_parameters_value) == str:
-
- detector_parameters_value = os.path.join(working_directory, detector_parameters_value)
- new_aruco_detector_parameters = ArUcoDetector.DetectorParameters.from_json(detector_parameters_value)
-
- # dict:
- else:
-
- new_aruco_detector_parameters = ArUcoDetector.DetectorParameters(**detector_parameters_value)
-
- except KeyError:
-
- new_aruco_detector_parameters = ArUcoDetector.DetectorParameters()
-
- new_aruco_detector = ArUcoDetector.ArUcoDetector(new_aruco_dictionary, new_marker_size, new_optic_parameters, new_aruco_detector_parameters)
+ new_aruco_detector = ArUcoDetector.ArUcoDetector.from_dict(aruco_camera_data.pop('aruco_detector'), working_directory)
# Load ArUcoScenes
new_scenes = {}
diff --git a/src/argaze/ArUcoMarkers/ArUcoDetector.py b/src/argaze/ArUcoMarkers/ArUcoDetector.py
index 135eb08..73bea88 100644
--- a/src/argaze/ArUcoMarkers/ArUcoDetector.py
+++ b/src/argaze/ArUcoMarkers/ArUcoDetector.py
@@ -10,6 +10,7 @@ __license__ = "BSD"
from typing import TypeVar, Tuple
from dataclasses import dataclass, field
import json
+import os
from collections import Counter
import time
@@ -152,19 +153,83 @@ class ArUcoDetector():
self.__detected_ids = []
@classmethod
+ def from_dict(self, aruco_detector_data: dict, working_directory: str = None) -> ArUcoDetectorType:
+ """Load attributes from dictionary.
+
+ Parameters:
+ aruco_detector_data: dictionary with attributes to load
+ working_directory: folder path where to load files when a dictionary value is a relative filepath.
+ """
+
+ # Load ArUco dictionary
+ dictionary_value = aruco_detector_data.pop('dictionary')
+
+ # str: dictionary name
+ if type(dictionary_value) == str:
+
+ new_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary(dictionary_value)
+
+ # dict:
+ else:
+
+ new_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary(**dictionary_value)
+
+ # Load ArUco marker size
+ new_marker_size = aruco_detector_data.pop('marker_size')
+
+ # Load optic_parameters value type
+ optic_parameters_value = aruco_detector_data.pop('optic_parameters')
+
+ # str: relative path to .json file
+ if type(optic_parameters_value) == str:
+
+ optic_parameters_value = os.path.join(working_directory, optic_parameters_value)
+ new_optic_parameters = ArUcoOpticCalibrator.OpticParameters.from_json(optic_parameters_value)
+
+ # dict:
+ else:
+
+ new_optic_parameters = ArUcoOpticCalibrator.OpticParameters(**optic_parameters_value)
+
+ # Load ArUco detector parameters
+ try:
+
+ # Check detector parameters value type
+ parameters_value = aruco_detector_data.pop('parameters')
+
+ # str: relative path to .json file
+ if type(parameters_value) == str:
+
+ parameters_value = os.path.join(working_directory, parameters_value)
+ new_parameters = DetectorParameters.from_json(parameters_value)
+
+ # dict:
+ else:
+
+ new_parameters = DetectorParameters(**parameters_value)
+
+ except KeyError:
+
+ new_parameters = DetectorParameters()
+
+ # Create aruco detector
+ return ArUcoDetector(new_dictionary, new_marker_size, new_optic_parameters, new_parameters)
+
+ @classmethod
def from_json(self, json_filepath: str) -> ArUcoDetectorType:
- """Load ArUcoDetector setup from .json file."""
+ """
+ Load attributes from .json file.
- with open(json_filepath) as configuration_file:
+ Parameters:
+ json_filepath: path to json file
+ """
- data = json.load(configuration_file)
+ with open(json_filepath) as configuration_file:
- new_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary(**data.pop('dictionary'))
- new_marker_size = data.pop('marker_size')
- new_optic_parameters = ArUcoOpticCalibrator.OpticParameters(**data.pop('optic_parameters'))
- new_parameters = DetectorParameters(**data.pop('parameters'))
+ aruco_detector_data = json.load(configuration_file)
+ working_directory = os.path.dirname(json_filepath)
- return ArUcoDetector(new_dictionary, new_marker_size, new_optic_parameters, new_parameters)
+ return ArUcoDetector.from_dict(aruco_detector_data, working_directory)
def __str__(self) -> str:
"""String display"""