aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThéo de la Hogue2024-04-17 13:32:51 +0200
committerThéo de la Hogue2024-04-17 13:32:51 +0200
commit4d0de7c804914a55977635ec6bc46beb0cf7808a (patch)
treeb3e40c76052b067723bfc41547b81a38a0da00b2 /src
parent9e0e2db258a2a475637813649e81b7e400b17022 (diff)
downloadargaze-4d0de7c804914a55977635ec6bc46beb0cf7808a.zip
argaze-4d0de7c804914a55977635ec6bc46beb0cf7808a.tar.gz
argaze-4d0de7c804914a55977635ec6bc46beb0cf7808a.tar.bz2
argaze-4d0de7c804914a55977635ec6bc46beb0cf7808a.tar.xz
Renaming ArUcoMarkers into ArUcoMarker
Diffstat (limited to 'src')
-rw-r--r--src/argaze.test/ArUcoMarker/ArUcoBoard.py (renamed from src/argaze.test/ArUcoMarkers/ArUcoBoard.py)4
-rw-r--r--src/argaze.test/ArUcoMarker/ArUcoCamera.py (renamed from src/argaze.test/ArUcoMarkers/ArUcoCamera.py)0
-rw-r--r--src/argaze.test/ArUcoMarker/ArUcoDetector.py (renamed from src/argaze.test/ArUcoMarkers/ArUcoDetector.py)4
-rw-r--r--src/argaze.test/ArUcoMarker/ArUcoMarker.py (renamed from src/argaze.test/ArUcoMarkers/ArUcoMarker.py)4
-rw-r--r--src/argaze.test/ArUcoMarker/ArUcoMarkerDictionary.py (renamed from src/argaze.test/ArUcoMarkers/ArUcoMarkersDictionary.py)20
-rw-r--r--src/argaze.test/ArUcoMarker/ArUcoOpticCalibrator.py (renamed from src/argaze.test/ArUcoMarkers/ArUcoOpticCalibrator.py)2
-rw-r--r--src/argaze.test/ArUcoMarker/ArUcoScene.py (renamed from src/argaze.test/ArUcoMarkers/ArUcoScene.py)28
-rw-r--r--src/argaze.test/ArUcoMarker/__init__.py (renamed from src/argaze.test/ArUcoMarkers/__init__.py)0
-rw-r--r--src/argaze.test/ArUcoMarker/utils/aoi_3d.obj (renamed from src/argaze.test/ArUcoMarkers/utils/aoi_3d.obj)0
-rw-r--r--src/argaze.test/ArUcoMarker/utils/aruco_camera.json (renamed from src/argaze.test/ArUcoMarkers/utils/aruco_camera.json)0
-rw-r--r--src/argaze.test/ArUcoMarker/utils/detector.json (renamed from src/argaze.test/ArUcoMarkers/utils/detector.json)0
-rw-r--r--src/argaze.test/ArUcoMarker/utils/detector_parameters.json (renamed from src/argaze.test/ArUcoMarkers/utils/detector_parameters.json)0
-rw-r--r--src/argaze.test/ArUcoMarker/utils/full_hd_board.png (renamed from src/argaze.test/ArUcoMarkers/utils/full_hd_board.png)bin18475 -> 18475 bytes
-rw-r--r--src/argaze.test/ArUcoMarker/utils/full_hd_marker.png (renamed from src/argaze.test/ArUcoMarkers/utils/full_hd_marker.png)bin116210 -> 116210 bytes
-rw-r--r--src/argaze.test/ArUcoMarker/utils/optic_parameters.json (renamed from src/argaze.test/ArUcoMarkers/utils/optic_parameters.json)0
-rw-r--r--src/argaze.test/ArUcoMarker/utils/scene.json (renamed from src/argaze.test/ArUcoMarkers/utils/scene.json)0
-rw-r--r--src/argaze.test/ArUcoMarker/utils/scene.obj (renamed from src/argaze.test/ArUcoMarkers/utils/scene.obj)2
-rw-r--r--src/argaze/ArUcoMarker/ArUcoBoard.py (renamed from src/argaze/ArUcoMarkers/ArUcoBoard.py)4
-rw-r--r--src/argaze/ArUcoMarker/ArUcoCamera.py (renamed from src/argaze/ArUcoMarkers/ArUcoCamera.py)2
-rw-r--r--src/argaze/ArUcoMarker/ArUcoDetector.py (renamed from src/argaze/ArUcoMarkers/ArUcoDetector.py)6
-rw-r--r--src/argaze/ArUcoMarker/ArUcoMarker.py (renamed from src/argaze/ArUcoMarkers/ArUcoMarker.py)4
-rw-r--r--src/argaze/ArUcoMarker/ArUcoMarkerDictionary.py (renamed from src/argaze/ArUcoMarkers/ArUcoMarkersDictionary.py)4
-rw-r--r--src/argaze/ArUcoMarker/ArUcoMarkerGroup.py (renamed from src/argaze/ArUcoMarkers/ArUcoMarkersGroup.py)14
-rw-r--r--src/argaze/ArUcoMarker/ArUcoOpticCalibrator.py (renamed from src/argaze/ArUcoMarkers/ArUcoOpticCalibrator.py)4
-rw-r--r--src/argaze/ArUcoMarker/ArUcoScene.py (renamed from src/argaze/ArUcoMarkers/ArUcoScene.py)10
-rw-r--r--src/argaze/ArUcoMarker/__init__.py6
-rw-r--r--src/argaze/ArUcoMarker/utils/A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf (renamed from src/argaze/ArUcoMarkers/utils/A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf)bin97542 -> 97542 bytes
-rw-r--r--src/argaze/ArUcoMarker/utils/A4_DICT_APRILTAG_16h5_5cm_0-7.pdf (renamed from src/argaze/ArUcoMarkers/utils/A4_DICT_APRILTAG_16h5_5cm_0-7.pdf)bin37670 -> 37670 bytes
-rw-r--r--src/argaze/ArUcoMarker/utils/__init__.py (renamed from src/argaze/ArUcoMarkers/utils/__init__.py)0
-rw-r--r--src/argaze/ArUcoMarkers/__init__.py6
-rw-r--r--src/argaze/__init__.py2
-rw-r--r--src/argaze/utils/aruco_markers_group_export.py234
-rw-r--r--src/argaze/utils/demo/aruco_markers_pipeline.json2
33 files changed, 64 insertions, 298 deletions
diff --git a/src/argaze.test/ArUcoMarkers/ArUcoBoard.py b/src/argaze.test/ArUcoMarker/ArUcoBoard.py
index 0bfa568..b20be13 100644
--- a/src/argaze.test/ArUcoMarkers/ArUcoBoard.py
+++ b/src/argaze.test/ArUcoMarker/ArUcoBoard.py
@@ -19,7 +19,7 @@ __license__ = "GPLv3"
import unittest
import os
-from argaze.ArUcoMarkers import ArUcoBoard, ArUcoMarkersDictionary
+from argaze.ArUcoMarker import ArUcoBoard, ArUcoMarkerDictionary
import numpy
@@ -35,7 +35,7 @@ class TestArUcoBoardClass(unittest.TestCase):
marker_size = 1
# Check ArUco board creation
- aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('DICT_APRILTAG_16h5')
+ aruco_dictionary = ArUcoMarkerDictionary.ArUcoMarkerDictionary('DICT_APRILTAG_16h5')
aruco_board = ArUcoBoard.ArUcoBoard(columns, rows, square_size, marker_size, aruco_dictionary)
# Check ArUco board dictionary name
diff --git a/src/argaze.test/ArUcoMarkers/ArUcoCamera.py b/src/argaze.test/ArUcoMarker/ArUcoCamera.py
index eb930ab..eb930ab 100644
--- a/src/argaze.test/ArUcoMarkers/ArUcoCamera.py
+++ b/src/argaze.test/ArUcoMarker/ArUcoCamera.py
diff --git a/src/argaze.test/ArUcoMarkers/ArUcoDetector.py b/src/argaze.test/ArUcoMarker/ArUcoDetector.py
index 62e8a09..40b7d00 100644
--- a/src/argaze.test/ArUcoMarkers/ArUcoDetector.py
+++ b/src/argaze.test/ArUcoMarker/ArUcoDetector.py
@@ -20,7 +20,7 @@ import unittest
import os
import math
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary, ArUcoOpticCalibrator, ArUcoDetector, ArUcoBoard
+from argaze.ArUcoMarker import ArUcoMarkerDictionary, ArUcoOpticCalibrator, ArUcoDetector, ArUcoBoard
import cv2 as cv
import numpy
@@ -63,7 +63,7 @@ class TestArUcoDetectorClass(unittest.TestCase):
self.assertEqual(aruco_detector.detected_markers_number(), 0)
self.assertEqual(aruco_detector.detected_markers(), {})
- aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('DICT_APRILTAG_16h5')
+ aruco_dictionary = ArUcoMarkerDictionary.ArUcoMarkerDictionary('DICT_APRILTAG_16h5')
aruco_detector = ArUcoDetector.ArUcoDetector(aruco_dictionary, 5.2)
# Check ArUcoDetector creation
diff --git a/src/argaze.test/ArUcoMarkers/ArUcoMarker.py b/src/argaze.test/ArUcoMarker/ArUcoMarker.py
index de88623..6518c8c 100644
--- a/src/argaze.test/ArUcoMarkers/ArUcoMarker.py
+++ b/src/argaze.test/ArUcoMarker/ArUcoMarker.py
@@ -18,7 +18,7 @@ __license__ = "GPLv3"
import unittest
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary, ArUcoMarker
+from argaze.ArUcoMarker import ArUcoMarkerDictionary, ArUcoMarker
class TestArUcoMarkerClass(unittest.TestCase):
"""Test ArUcoMarker class."""
@@ -27,7 +27,7 @@ class TestArUcoMarkerClass(unittest.TestCase):
"""Test ArUcoMarker creation."""
# Check DICT_ARUCO_ORIGINAL ArUcoMarker creation
- aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('DICT_ARUCO_ORIGINAL')
+ aruco_dictionary = ArUcoMarkerDictionary.ArUcoMarkerDictionary('DICT_ARUCO_ORIGINAL')
aruco_marker = aruco_dictionary.create_marker(0, 3)
diff --git a/src/argaze.test/ArUcoMarkers/ArUcoMarkersDictionary.py b/src/argaze.test/ArUcoMarker/ArUcoMarkerDictionary.py
index 7a5e9e8..2f80a67 100644
--- a/src/argaze.test/ArUcoMarkers/ArUcoMarkersDictionary.py
+++ b/src/argaze.test/ArUcoMarker/ArUcoMarkerDictionary.py
@@ -18,28 +18,28 @@ __license__ = "GPLv3"
import unittest
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary
+from argaze.ArUcoMarker import ArUcoMarkerDictionary
-class TestArUcoMarkersDictionaryClass(unittest.TestCase):
- """Test ArUcoMarkersDictionary class."""
+class TestArUcoMarkerDictionaryClass(unittest.TestCase):
+ """Test ArUcoMarkerDictionary class."""
def test_new(self):
- """Test ArUcoMarkersDictionary creation."""
+ """Test ArUcoMarkerDictionary creation."""
- # Check that ArUcoMarkersDictionary creation fails with bad name
+ # Check that ArUcoMarkerDictionary creation fails with bad name
with self.assertRaises(NameError):
- aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('BAD_DICT_NAME')
+ aruco_dictionary = ArUcoMarkerDictionary.ArUcoMarkerDictionary('BAD_DICT_NAME')
- # Check default ArUcoMarkersDictionary creation
- aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary()
+ # Check default ArUcoMarkerDictionary creation
+ aruco_dictionary = ArUcoMarkerDictionary.ArUcoMarkerDictionary()
self.assertEqual(aruco_dictionary.name, 'DICT_ARUCO_ORIGINAL')
self.assertEqual(aruco_dictionary.format, '5X5')
self.assertEqual(aruco_dictionary.number, 1024)
- # Check DICT_APRILTAG_16h5 ArUcoMarkersDictionary creation
- aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('DICT_APRILTAG_16h5')
+ # Check DICT_APRILTAG_16h5 ArUcoMarkerDictionary creation
+ aruco_dictionary = ArUcoMarkerDictionary.ArUcoMarkerDictionary('DICT_APRILTAG_16h5')
self.assertEqual(aruco_dictionary.name, 'DICT_APRILTAG_16h5')
self.assertEqual(aruco_dictionary.format, '4X4')
diff --git a/src/argaze.test/ArUcoMarkers/ArUcoOpticCalibrator.py b/src/argaze.test/ArUcoMarker/ArUcoOpticCalibrator.py
index 79d2ead..d019a5d 100644
--- a/src/argaze.test/ArUcoMarkers/ArUcoOpticCalibrator.py
+++ b/src/argaze.test/ArUcoMarker/ArUcoOpticCalibrator.py
@@ -19,7 +19,7 @@ __license__ = "GPLv3"
import unittest
import os
-from argaze.ArUcoMarkers import ArUcoOpticCalibrator
+from argaze.ArUcoMarker import ArUcoOpticCalibrator
import numpy
diff --git a/src/argaze.test/ArUcoMarkers/ArUcoScene.py b/src/argaze.test/ArUcoMarker/ArUcoScene.py
index f29b1d3..67cb668 100644
--- a/src/argaze.test/ArUcoMarkers/ArUcoScene.py
+++ b/src/argaze.test/ArUcoMarker/ArUcoScene.py
@@ -20,12 +20,12 @@ import unittest
import os
import math
-from argaze.ArUcoMarkers import ArUcoMarkersGroup, ArUcoMarker
+from argaze.ArUcoMarker import ArUcoMarkerGroup, ArUcoMarker
import cv2 as cv
import numpy
-class TestArUcoMarkersGroupClass(unittest.TestCase):
+class TestArUcoMarkerGroupClass(unittest.TestCase):
def new_from_obj(self):
@@ -34,7 +34,7 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
obj_filepath = os.path.join(current_directory, 'utils/scene.obj')
# Load file
- self.aruco_markers_group = ArUcoMarkersGroup.ArUcoMarkersGroup.from_obj(obj_filepath)
+ self.aruco_markers_group = ArUcoMarkerGroup.ArUcoMarkerGroup.from_obj(obj_filepath)
def new_from_json(self):
@@ -43,7 +43,7 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
json_filepath = os.path.join(current_directory, 'utils/scene.json')
# Load file
- self.aruco_markers_group = ArUcoMarkersGroup.ArUcoMarkersGroup.from_json(json_filepath)
+ self.aruco_markers_group = ArUcoMarkerGroup.ArUcoMarkerGroup.from_json(json_filepath)
def setup_markers(self):
@@ -59,12 +59,12 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
self.scene_markers, self.remaining_markers = self.aruco_markers_group.filter_markers(self.detected_markers())
def test_new_from_obj(self):
- """Test ArUcoMarkersGroup creation."""
+ """Test ArUcoMarkerGroup creation."""
self.new_from_obj()
self.setup_markers()
- # Check ArUcoMarkersGroup creation
+ # Check ArUcoMarkerGroup creation
self.assertEqual(len(self.aruco_markers_group.places), 3)
self.assertIsNone(numpy.testing.assert_array_equal(self.aruco_markers_group.identifiers, [0, 1, 2]))
self.assertEqual(self.aruco_markers_group.marker_size, 1.)
@@ -82,12 +82,12 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
self.assertIsNone(numpy.testing.assert_array_equal(self.aruco_markers_group.places[2].rotation, [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]))
def test_new_from_json(self):
- """Test ArUcoMarkersGroup creation."""
+ """Test ArUcoMarkerGroup creation."""
self.new_from_json()
self.setup_markers()
- # Check ArUcoMarkersGroup creation
+ # Check ArUcoMarkerGroup creation
self.assertEqual(len(self.aruco_markers_group.places), 3)
self.assertIsNone(numpy.testing.assert_array_equal(self.aruco_markers_group.identifiers, [0, 1, 2]))
self.assertEqual(self.aruco_markers_group.marker_size, 1.)
@@ -105,7 +105,7 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
self.assertIsNone(numpy.testing.assert_array_equal(self.aruco_markers_group.places[2].rotation, [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]))
def test_filter_markers(self):
- """Test ArUcoMarkersGroup markers filtering."""
+ """Test ArUcoMarkerGroup markers filtering."""
self.new_from_obj()
self.setup_markers()
@@ -118,7 +118,7 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
self.assertIsNone(numpy.testing.assert_array_equal(list(self.remaining_markers.keys()), [3]))
def test_check_markers_consistency(self):
- """Test ArUcoMarkersGroup markers consistency checking."""
+ """Test ArUcoMarkerGroup markers consistency checking."""
self.new_from_obj()
self.setup_markers()
@@ -162,7 +162,7 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
self.assertIsNone(numpy.testing.assert_array_equal(list(unconsistencies['translation']['1/2'].keys()), ['current', 'expected']))
def test_estimate_pose_from_single_marker(self):
- """Test ArUcoMarkersGroup pose estimation from single marker."""
+ """Test ArUcoMarkerGroup pose estimation from single marker."""
self.new_from_obj()
self.setup_markers()
@@ -178,7 +178,7 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
self.assertIsNone(numpy.testing.assert_array_equal(rmat, [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]))
def test_estimate_pose_from_markers(self):
- """Test ArUcoMarkersGroup pose estimation from markers."""
+ """Test ArUcoMarkerGroup pose estimation from markers."""
self.new_from_obj()
self.setup_markers()
@@ -199,9 +199,9 @@ class TestArUcoMarkersGroupClass(unittest.TestCase):
self.assertIsNone(numpy.testing.assert_array_equal(tvec, [1., 1., 5.]))
self.assertIsNone(numpy.testing.assert_array_equal(rmat, [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]))
- @unittest.skip("ArUcoMarkersGroup estimate_pose_from_axis_markers method is broken.")
+ @unittest.skip("ArUcoMarkerGroup estimate_pose_from_axis_markers method is broken.")
def test_estimate_pose_from_axis_markers(self):
- """Test ArUcoMarkersGroup pose estimation from axis markers."""
+ """Test ArUcoMarkerGroup pose estimation from axis markers."""
self.new_from_obj()
self.setup_markers()
diff --git a/src/argaze.test/ArUcoMarkers/__init__.py b/src/argaze.test/ArUcoMarker/__init__.py
index e69de29..e69de29 100644
--- a/src/argaze.test/ArUcoMarkers/__init__.py
+++ b/src/argaze.test/ArUcoMarker/__init__.py
diff --git a/src/argaze.test/ArUcoMarkers/utils/aoi_3d.obj b/src/argaze.test/ArUcoMarker/utils/aoi_3d.obj
index 92e85bd..92e85bd 100644
--- a/src/argaze.test/ArUcoMarkers/utils/aoi_3d.obj
+++ b/src/argaze.test/ArUcoMarker/utils/aoi_3d.obj
diff --git a/src/argaze.test/ArUcoMarkers/utils/aruco_camera.json b/src/argaze.test/ArUcoMarker/utils/aruco_camera.json
index 980dc9f..980dc9f 100644
--- a/src/argaze.test/ArUcoMarkers/utils/aruco_camera.json
+++ b/src/argaze.test/ArUcoMarker/utils/aruco_camera.json
diff --git a/src/argaze.test/ArUcoMarkers/utils/detector.json b/src/argaze.test/ArUcoMarker/utils/detector.json
index 8aada6d..8aada6d 100644
--- a/src/argaze.test/ArUcoMarkers/utils/detector.json
+++ b/src/argaze.test/ArUcoMarker/utils/detector.json
diff --git a/src/argaze.test/ArUcoMarkers/utils/detector_parameters.json b/src/argaze.test/ArUcoMarker/utils/detector_parameters.json
index d26a3fa..d26a3fa 100644
--- a/src/argaze.test/ArUcoMarkers/utils/detector_parameters.json
+++ b/src/argaze.test/ArUcoMarker/utils/detector_parameters.json
diff --git a/src/argaze.test/ArUcoMarkers/utils/full_hd_board.png b/src/argaze.test/ArUcoMarker/utils/full_hd_board.png
index d30b300..d30b300 100644
--- a/src/argaze.test/ArUcoMarkers/utils/full_hd_board.png
+++ b/src/argaze.test/ArUcoMarker/utils/full_hd_board.png
Binary files differ
diff --git a/src/argaze.test/ArUcoMarkers/utils/full_hd_marker.png b/src/argaze.test/ArUcoMarker/utils/full_hd_marker.png
index 42146fe..42146fe 100644
--- a/src/argaze.test/ArUcoMarkers/utils/full_hd_marker.png
+++ b/src/argaze.test/ArUcoMarker/utils/full_hd_marker.png
Binary files differ
diff --git a/src/argaze.test/ArUcoMarkers/utils/optic_parameters.json b/src/argaze.test/ArUcoMarker/utils/optic_parameters.json
index 988731c..988731c 100644
--- a/src/argaze.test/ArUcoMarkers/utils/optic_parameters.json
+++ b/src/argaze.test/ArUcoMarker/utils/optic_parameters.json
diff --git a/src/argaze.test/ArUcoMarkers/utils/scene.json b/src/argaze.test/ArUcoMarker/utils/scene.json
index bdd9ae8..bdd9ae8 100644
--- a/src/argaze.test/ArUcoMarkers/utils/scene.json
+++ b/src/argaze.test/ArUcoMarker/utils/scene.json
diff --git a/src/argaze.test/ArUcoMarkers/utils/scene.obj b/src/argaze.test/ArUcoMarker/utils/scene.obj
index c233da2..1eb9f81 100644
--- a/src/argaze.test/ArUcoMarkers/utils/scene.obj
+++ b/src/argaze.test/ArUcoMarker/utils/scene.obj
@@ -1,4 +1,4 @@
-# .OBJ file for ArUcoMarkersGroup unitary test
+# .OBJ file for ArUcoMarkerGroup unitary test
o DICT_ARUCO_ORIGINAL#0_Marker
v -0.500000 -0.500000 0.000000
v 0.500000 -0.500000 0.000000
diff --git a/src/argaze/ArUcoMarkers/ArUcoBoard.py b/src/argaze/ArUcoMarker/ArUcoBoard.py
index be475d5..ce8097f 100644
--- a/src/argaze/ArUcoMarkers/ArUcoBoard.py
+++ b/src/argaze/ArUcoMarker/ArUcoBoard.py
@@ -22,7 +22,7 @@ from typing import Sequence
import cv2 as cv
import cv2.aruco as aruco
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary
+from argaze.ArUcoMarker import ArUcoMarkerDictionary
@dataclass
@@ -41,7 +41,7 @@ class ArUcoBoard():
marker_size: float = field(default=0.)
"""Size of ArUco markers inside board squares in centimeter."""
- dictionary: ArUcoMarkersDictionary.ArUcoMarkersDictionary = field(default_factory=ArUcoMarkersDictionary.ArUcoMarkersDictionary)
+ dictionary: ArUcoMarkerDictionary.ArUcoMarkerDictionary = field(default_factory=ArUcoMarkerDictionary.ArUcoMarkerDictionary)
"""ArUco markers dictionary."""
def __post_init__(self):
diff --git a/src/argaze/ArUcoMarkers/ArUcoCamera.py b/src/argaze/ArUcoMarker/ArUcoCamera.py
index 5b535b5..2402df0 100644
--- a/src/argaze/ArUcoMarkers/ArUcoCamera.py
+++ b/src/argaze/ArUcoMarker/ArUcoCamera.py
@@ -22,7 +22,7 @@ import cv2
import numpy
from argaze import ArFeatures, DataFeatures
-from argaze.ArUcoMarkers import ArUcoDetector, ArUcoOpticCalibrator, ArUcoScene
+from argaze.ArUcoMarker import ArUcoDetector, ArUcoOpticCalibrator, ArUcoScene
from argaze.AreaOfInterest import AOI2DScene
# Define default ArUcoCamera image_parameters values
diff --git a/src/argaze/ArUcoMarkers/ArUcoDetector.py b/src/argaze/ArUcoMarker/ArUcoDetector.py
index f675c8f..daa0f9d 100644
--- a/src/argaze/ArUcoMarkers/ArUcoDetector.py
+++ b/src/argaze/ArUcoMarker/ArUcoDetector.py
@@ -25,7 +25,7 @@ import numpy
from cv2 import aruco
from argaze import DataFeatures
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary, ArUcoMarker, ArUcoOpticCalibrator
+from argaze.ArUcoMarker import ArUcoMarkerDictionary, ArUcoMarker, ArUcoOpticCalibrator
class DetectorParameters():
@@ -145,13 +145,13 @@ class ArUcoDetector(DataFeatures.PipelineStepObject):
self.__board_corners_ids = []
@property
- def dictionary(self) -> ArUcoMarkersDictionary.ArUcoMarkersDictionary:
+ def dictionary(self) -> ArUcoMarkerDictionary.ArUcoMarkerDictionary:
"""ArUco markers dictionary to detect."""
return self.__dictionary
@dictionary.setter
@DataFeatures.PipelineStepAttributeSetter
- def dictionary(self, dictionary: ArUcoMarkersDictionary.ArUcoMarkersDictionary):
+ def dictionary(self, dictionary: ArUcoMarkerDictionary.ArUcoMarkerDictionary):
self.__dictionary = dictionary
diff --git a/src/argaze/ArUcoMarkers/ArUcoMarker.py b/src/argaze/ArUcoMarker/ArUcoMarker.py
index cf573dc..fdc8071 100644
--- a/src/argaze/ArUcoMarkers/ArUcoMarker.py
+++ b/src/argaze/ArUcoMarker/ArUcoMarker.py
@@ -19,7 +19,7 @@ __license__ = "GPLv3"
from dataclasses import dataclass, field
import math
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary
+from argaze.ArUcoMarker import ArUcoMarkerDictionary
import numpy
import cv2
@@ -29,7 +29,7 @@ import cv2.aruco as aruco
class ArUcoMarker():
"""Define ArUco marker class."""
- dictionary: ArUcoMarkersDictionary.ArUcoMarkersDictionary
+ dictionary: ArUcoMarkerDictionary.ArUcoMarkerDictionary
"""Dictionary to which it belongs."""
identifier: int
diff --git a/src/argaze/ArUcoMarkers/ArUcoMarkersDictionary.py b/src/argaze/ArUcoMarker/ArUcoMarkerDictionary.py
index 613a3c5..ed423f1 100644
--- a/src/argaze/ArUcoMarkers/ArUcoMarkersDictionary.py
+++ b/src/argaze/ArUcoMarker/ArUcoMarkerDictionary.py
@@ -43,7 +43,7 @@ all_aruco_markers_dictionaries = {
}
"""Dictionary to list all built-in ArUco markers dictionaries from OpenCV ArUco package."""
-class ArUcoMarkersDictionary():
+class ArUcoMarkerDictionary():
"""Handle an ArUco markers dictionary."""
def __init__(self, name: str = 'DICT_ARUCO_ORIGINAL'):
@@ -145,7 +145,7 @@ class ArUcoMarkersDictionary():
if i >= 0 and i < self.number:
- from argaze.ArUcoMarkers import ArUcoMarker
+ from argaze.ArUcoMarker import ArUcoMarker
return ArUcoMarker.ArUcoMarker(self, i, size)
diff --git a/src/argaze/ArUcoMarkers/ArUcoMarkersGroup.py b/src/argaze/ArUcoMarker/ArUcoMarkerGroup.py
index fd33664..b013829 100644
--- a/src/argaze/ArUcoMarkers/ArUcoMarkersGroup.py
+++ b/src/argaze/ArUcoMarker/ArUcoMarkerGroup.py
@@ -25,7 +25,7 @@ import cv2
import numpy
from argaze import DataFeatures
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary, ArUcoMarker
+from argaze.ArUcoMarker import ArUcoMarkerDictionary, ArUcoMarker
T0 = numpy.array([0., 0., 0.])
"""Define no translation vector."""
@@ -76,7 +76,7 @@ class Place:
marker: ArUcoMarker.ArUcoMarker
-class ArUcoMarkersGroup(DataFeatures.PipelineStepObject):
+class ArUcoMarkerGroup(DataFeatures.PipelineStepObject):
"""
Handle group of ArUco markers as one unique spatial entity and estimate its pose.
"""
@@ -84,7 +84,7 @@ class ArUcoMarkersGroup(DataFeatures.PipelineStepObject):
# noinspection PyMissingConstructor
@DataFeatures.PipelineStepInit
def __init__(self, **kwargs):
- """Initialize ArUcoMarkersGroup"""
+ """Initialize ArUcoMarkerGroup"""
# Init private attributes
self.marker_size = None
@@ -94,12 +94,12 @@ class ArUcoMarkersGroup(DataFeatures.PipelineStepObject):
self.__rotation = numpy.zeros(3)
@property
- def dictionary(self) -> ArUcoMarkersDictionary.ArUcoMarkersDictionary:
+ def dictionary(self) -> ArUcoMarkerDictionary.ArUcoMarkerDictionary:
"""Expected dictionary of all markers in the group."""
return self.__dictionary
@dictionary.setter
- def dictionary(self, dictionary: ArUcoMarkersDictionary.ArUcoMarkersDictionary):
+ def dictionary(self, dictionary: ArUcoMarkerDictionary.ArUcoMarkerDictionary):
self.__dictionary = dictionary
@@ -265,7 +265,7 @@ class ArUcoMarkersGroup(DataFeatures.PipelineStepObject):
# Init new group dictionary with first dictionary name
if new_dictionary is None:
- new_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary(dictionary)
+ new_dictionary = ArUcoMarkerDictionary.ArUcoMarkerDictionary(dictionary)
# Check all others marker dictionary are equal to new group dictionary
elif dictionary != new_dictionary.name:
@@ -322,7 +322,7 @@ class ArUcoMarkersGroup(DataFeatures.PipelineStepObject):
'places': new_places
}
- return ArUcoMarkersGroup(**data)
+ return ArUcoMarkerGroup(**data)
def filter_markers(self, detected_markers: dict) -> tuple[dict, dict]:
"""Sort markers belonging to the group from given detected markers dict (cf ArUcoDetector.detect_markers()).
diff --git a/src/argaze/ArUcoMarkers/ArUcoOpticCalibrator.py b/src/argaze/ArUcoMarker/ArUcoOpticCalibrator.py
index 7d4b271..468e64a 100644
--- a/src/argaze/ArUcoMarkers/ArUcoOpticCalibrator.py
+++ b/src/argaze/ArUcoMarker/ArUcoOpticCalibrator.py
@@ -19,7 +19,7 @@ __license__ = "GPLv3"
from dataclasses import dataclass, field
from argaze import DataFeatures
-from argaze.ArUcoMarkers import ArUcoBoard
+from argaze.ArUcoMarker import ArUcoBoard
import json
import numpy
@@ -125,7 +125,7 @@ class ArUcoOpticCalibrator():
"""Retrieve K and D parameters from stored calibration data.
Parameters:
- board: [ArUcoBoard](argaze.md/#argaze.ArUcoMarkers.ArUcoBoard.ArUcoBoard) instance
+ board: [ArUcoBoard](argaze.md/#argaze.ArUcoMarker.ArUcoBoard.ArUcoBoard) instance
dimensions: camera image dimensions
Returns:
diff --git a/src/argaze/ArUcoMarkers/ArUcoScene.py b/src/argaze/ArUcoMarker/ArUcoScene.py
index 0edb253..a4726fa 100644
--- a/src/argaze/ArUcoMarkers/ArUcoScene.py
+++ b/src/argaze/ArUcoMarker/ArUcoScene.py
@@ -19,12 +19,12 @@ __license__ = "GPLv3"
import numpy
from argaze import ArFeatures, DataFeatures
-from argaze.ArUcoMarkers import ArUcoMarkersGroup
+from argaze.ArUcoMarker import ArUcoMarkerGroup
class ArUcoScene(ArFeatures.ArScene):
"""
- Define an ArScene based on an ArUcoMarkersGroup description.
+ Define an ArScene based on an ArUcoMarkerGroup description.
"""
@DataFeatures.PipelineStepInit
@@ -39,13 +39,13 @@ class ArUcoScene(ArFeatures.ArScene):
self.__required_markers_number = 2
@property
- def aruco_markers_group(self) -> ArUcoMarkersGroup.ArUcoMarkersGroup:
+ def aruco_markers_group(self) -> ArUcoMarkerGroup.ArUcoMarkerGroup:
"""ArUco markers 3D scene description used to estimate scene pose from detected markers: see [estimate_pose][argaze.ArFeatures.ArScene.estimate_pose] function below."""
return self.__aruco_markers_group
@aruco_markers_group.setter
@DataFeatures.PipelineStepAttributeSetter
- def aruco_markers_group(self, aruco_markers_group: ArUcoMarkersGroup.ArUcoMarkersGroup):
+ def aruco_markers_group(self, aruco_markers_group: ArUcoMarkerGroup.ArUcoMarkerGroup):
self.__aruco_markers_group = aruco_markers_group
@@ -117,7 +117,7 @@ class ArUcoScene(ArFeatures.ArScene):
Parameters:
image: where to draw
- draw_aruco_markers_group: ArUcoMarkersGroup.draw parameters (if None, no group drawn)
+ draw_aruco_markers_group: ArUcoMarkerGroup.draw parameters (if None, no group drawn)
"""
# Draw group if required
diff --git a/src/argaze/ArUcoMarker/__init__.py b/src/argaze/ArUcoMarker/__init__.py
new file mode 100644
index 0000000..f297c0d
--- /dev/null
+++ b/src/argaze/ArUcoMarker/__init__.py
@@ -0,0 +1,6 @@
+"""
+Handle [OpenCV ArUco markers](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html): generate and detect
+markers, calibrate camera, describe scene, ...
+"""
+__all__ = ['ArUcoMarkerDictionary', 'ArUcoMarker', 'ArUcoBoard', 'ArUcoOpticCalibrator', 'ArUcoDetector',
+ 'ArUcoMarkerGroup', 'ArUcoCamera', 'ArUcoScene', 'utils']
diff --git a/src/argaze/ArUcoMarkers/utils/A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf b/src/argaze/ArUcoMarker/utils/A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf
index 2adcee1..2adcee1 100644
--- a/src/argaze/ArUcoMarkers/utils/A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf
+++ b/src/argaze/ArUcoMarker/utils/A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf
Binary files differ
diff --git a/src/argaze/ArUcoMarkers/utils/A4_DICT_APRILTAG_16h5_5cm_0-7.pdf b/src/argaze/ArUcoMarker/utils/A4_DICT_APRILTAG_16h5_5cm_0-7.pdf
index fcf850d..fcf850d 100644
--- a/src/argaze/ArUcoMarkers/utils/A4_DICT_APRILTAG_16h5_5cm_0-7.pdf
+++ b/src/argaze/ArUcoMarker/utils/A4_DICT_APRILTAG_16h5_5cm_0-7.pdf
Binary files differ
diff --git a/src/argaze/ArUcoMarkers/utils/__init__.py b/src/argaze/ArUcoMarker/utils/__init__.py
index 923f5ec..923f5ec 100644
--- a/src/argaze/ArUcoMarkers/utils/__init__.py
+++ b/src/argaze/ArUcoMarker/utils/__init__.py
diff --git a/src/argaze/ArUcoMarkers/__init__.py b/src/argaze/ArUcoMarkers/__init__.py
deleted file mode 100644
index b7b0bf8..0000000
--- a/src/argaze/ArUcoMarkers/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"""
-Handle [OpenCV ArUco markers](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html): generate and detect
-markers, calibrate camera, describe scene, ...
-"""
-__all__ = ['ArUcoMarkersDictionary', 'ArUcoMarker', 'ArUcoBoard', 'ArUcoOpticCalibrator', 'ArUcoDetector',
- 'ArUcoMarkersGroup', 'ArUcoCamera', 'ArUcoScene', 'utils']
diff --git a/src/argaze/__init__.py b/src/argaze/__init__.py
index 2e004f1..a07fa93 100644
--- a/src/argaze/__init__.py
+++ b/src/argaze/__init__.py
@@ -1,7 +1,7 @@
"""
ArGaze is divided in submodules dedicated to various specifics features.
"""
-__all__ = ['ArUcoMarkers', 'AreaOfInterest', 'ArFeatures', 'GazeFeatures', 'GazeAnalysis', 'PupilFeatures', 'PupilAnalysis', 'DataFeatures', 'utils']
+__all__ = ['ArUcoMarker', 'AreaOfInterest', 'ArFeatures', 'GazeFeatures', 'GazeAnalysis', 'PupilFeatures', 'PupilAnalysis', 'DataFeatures', 'utils']
def load(filepath: str) -> any:
"""
diff --git a/src/argaze/utils/aruco_markers_group_export.py b/src/argaze/utils/aruco_markers_group_export.py
deleted file mode 100644
index 569ba6b..0000000
--- a/src/argaze/utils/aruco_markers_group_export.py
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/usr/bin/env python
-
-"""
-
-This program is free software: you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation, either version 3 of the License, or (at your option) any later
-version.
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-You should have received a copy of the GNU General Public License along with
-this program. If not, see <https://www.gnu.org/licenses/>.
-"""
-
-__author__ = "Théo de la Hogue"
-__credits__ = []
-__copyright__ = "Copyright 2023, Ecole Nationale de l'Aviation Civile (ENAC)"
-__license__ = "GPLv3"
-
-import argparse
-import contextlib
-
-import cv2
-
-from argaze import DataFeatures
-from argaze.ArUcoMarkers import ArUcoDetector, ArUcoOpticCalibrator, ArUcoMarkersGroup
-from argaze.utils import UtilsFeatures
-
-
-def main():
- """
- Detect DICTIONARY and SIZE ArUco markers inside a MOVIE frame then, export detected ArUco markers group as .obj file into an OUTPUT folder.
- """
-
- # Manage arguments
- parser = argparse.ArgumentParser(description=main.__doc__.split('-')[0])
- parser.add_argument('movie', metavar='MOVIE', type=str, default=None, help='movie path')
- parser.add_argument('dictionary', metavar='DICTIONARY', type=str, default=None,
- help='expected ArUco markers dictionary')
- parser.add_argument('size', metavar='SIZE', type=float, default=None, help='expected ArUco markers size (in cm)')
-
- parser.add_argument('-p', '--parameters', metavar='PARAMETERS', type=str, default=None,
- help='ArUco detector parameters file')
- parser.add_argument('-op', '--optic_parameters', metavar='OPTIC_PARAMETERS', type=str, default=None,
- help='ArUco detector optic parameters file')
-
- parser.add_argument('-s', '--start', metavar='START', type=float, default=0., help='start time in second')
- parser.add_argument('-o', '--output', metavar='OUTPUT', type=str, default='.', help='export folder path')
- parser.add_argument('-v', '--verbose', action='store_true', default=False,
- help='enable verbose mode to print information in console')
-
- args = parser.parse_args()
-
- # Load movie
- video_capture = cv2.VideoCapture(args.movie)
-
- video_fps = video_capture.get(cv2.CAP_PROP_FPS)
- image_width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
- image_height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
-
- # Edit ArUco detector configuration
- configuration = {
- "dictionary": args.dictionary
- }
-
- if args.parameters:
- configuration["parameters"] = args.parameters
-
- if args.optic_parameters:
- configuration["optic_parameters"] = args.optic_parameters
-
- # Load ArUco detector configuration
- aruco_detector = DataFeatures.from_dict(ArUcoDetector.ArUcoDetector, configuration)
-
- if args.verbose:
- print(aruco_detector)
-
- # Create empty ArUco scene
- aruco_markers_group = None
-
- # Edit draw parameters
- draw_parameters = {
- "color": [255, 255, 255],
- "draw_axes": {
- "thickness": 4
- }
- }
-
- # Create a window
- cv2.namedWindow("Export detected ArUco markers", cv2.WINDOW_AUTOSIZE)
-
- # Init image selection
- current_image_index = -1
- _, current_image = video_capture.read()
- next_image_index = int(args.start * video_fps)
- refresh = False
-
- # Waiting for 'ctrl+C' interruption
- with contextlib.suppress(KeyboardInterrupt):
-
- while True:
-
- # Select a new image and detect markers once
- if next_image_index != current_image_index or refresh:
-
- video_capture.set(cv2.CAP_PROP_POS_FRAMES, next_image_index)
-
- success, video_image = video_capture.read()
-
- video_height, video_width, _ = video_image.shape
-
- # Create default optic parameters adapted to frame size
- if aruco_detector.optic_parameters is None:
- # Note: The choice of 1000 for default focal length should be discussed...
- aruco_detector.optic_parameters = ArUcoOpticCalibrator.OpticParameters(rms=-1, dimensions=(
- video_width, video_height), K=ArUcoOpticCalibrator.K0(focal_length=(1000., 1000.),
- width=video_width, height=video_height))
-
- if success:
-
- # Refresh once
- refresh = False
-
- current_image_index = video_capture.get(cv2.CAP_PROP_POS_FRAMES) - 1
- current_image_time = video_capture.get(cv2.CAP_PROP_POS_MSEC)
-
- try:
-
- # Detect and project AR features
- aruco_detector.detect_markers(video_image)
-
- # Estimate all detected markers pose
- aruco_detector.estimate_markers_pose(args.size)
-
- # Build aruco scene from detected markers
- aruco_markers_group = ArUcoMarkersGroup.ArUcoMarkersGroup(aruco_detector.dictionary,
- aruco_detector.detected_markers())
-
- # Detection succeeded
- exception = None
-
- # Write errors
- except Exception as e:
-
- aruco_markers_group = None
-
- exception = e
-
- # Draw detected markers
- aruco_detector.draw_detected_markers(video_image, draw_parameters)
-
- # Write detected markers
- cv2.putText(video_image, f'Detecting markers {list(aruco_detector.detected_markers().keys())}',
- (20, video_height - 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 1, cv2.LINE_AA)
-
- # Write timing
- cv2.putText(video_image, f'Frame at {int(current_image_time)}ms', (20, 40),
- cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 1, cv2.LINE_AA)
-
- # Write exception
- if exception is not None:
- cv2.putText(video_image, f'error: {exception}', (20, 80), cv2.FONT_HERSHEY_SIMPLEX, 1,
- (0, 255, 255), 1, cv2.LINE_AA)
-
- # Write documentation
- cv2.putText(video_image, f'<- previous image', (video_width - 500, video_height - 160),
- cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 1, cv2.LINE_AA)
- cv2.putText(video_image, f'-> next image', (video_width - 500, video_height - 120),
- cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 1, cv2.LINE_AA)
- cv2.putText(video_image, f'r: reload config', (video_width - 500, video_height - 80),
- cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 1, cv2.LINE_AA)
- cv2.putText(video_image, f'Ctrl+s: export ArUco markers', (video_width - 500, video_height - 40),
- cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 1, cv2.LINE_AA)
-
- # Copy image
- current_image = video_image.copy()
-
- # Keep last image
- else:
-
- video_image = current_image.copy()
-
- key_pressed = cv2.waitKey(10)
-
- #if key_pressed != -1:
- # print(key_pressed)
-
- # Select previous image with left arrow
- if key_pressed == 2:
- next_image_index -= 1
-
- # Select next image with right arrow
- if key_pressed == 3:
- next_image_index += 1
-
- # Clip image index
- if next_image_index < 0:
- next_image_index = 0
-
- # r: reload configuration
- if key_pressed == 114:
- aruco_detector = DataFeatures.from_dict(ArUcoDetector.ArUcoDetector, configuration)
- refresh = True
- print('Configuration reloaded')
-
- # Save selected marker edition using 'Ctrl + s'
- if key_pressed == 19:
-
- if aruco_markers_group:
-
- aruco_markers_group.to_obj(f'{args.output}/{int(current_image_time)}-aruco_markers_group.obj')
- print(f'ArUco markers saved into {args.output}')
-
- else:
-
- print(f'No ArUco markers to export')
-
- # Close window using 'Esc' key
- if key_pressed == 27:
- break
-
- # Display video
- cv2.imshow(aruco_detector.name, video_image)
-
- # Close movie capture
- video_capture.release()
-
- # Stop image display
- cv2.destroyAllWindows()
-
-
-if __name__ == '__main__':
- main()
diff --git a/src/argaze/utils/demo/aruco_markers_pipeline.json b/src/argaze/utils/demo/aruco_markers_pipeline.json
index b64dde3..48071ab 100644
--- a/src/argaze/utils/demo/aruco_markers_pipeline.json
+++ b/src/argaze/utils/demo/aruco_markers_pipeline.json
@@ -1,5 +1,5 @@
{
- "argaze.ArUcoMarkers.ArUcoCamera.ArUcoCamera": {
+ "argaze.ArUcoMarker.ArUcoCamera.ArUcoCamera": {
"name": "Head-mounted camera",
"size": [1920, 1080],
"aruco_detector": {