aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/argaze/ArFeatures.py14
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoDetector.py6
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoScene.py28
-rw-r--r--src/argaze/ArUcoMarkers/README.md11
-rw-r--r--src/argaze/ArUcoMarkers/__init__.py5
-rw-r--r--src/argaze/ArUcoMarkers/utils/__init__.py5
-rw-r--r--src/argaze/AreaOfInterest/AOI2DScene.py20
-rw-r--r--src/argaze/AreaOfInterest/AOI3DScene.py35
-rw-r--r--src/argaze/AreaOfInterest/AOIFeatures.py56
-rw-r--r--src/argaze/AreaOfInterest/README.md5
-rw-r--r--src/argaze/AreaOfInterest/__init__.py3
-rw-r--r--src/argaze/DataStructures.py2
-rw-r--r--src/argaze/GazeAnalysis/Entropy.py6
-rw-r--r--src/argaze/GazeAnalysis/LempelZivComplexity.py2
-rw-r--r--src/argaze/GazeAnalysis/README.md5
-rw-r--r--src/argaze/GazeAnalysis/TransitionMatrix.py6
-rw-r--r--src/argaze/GazeAnalysis/__init__.py3
-rw-r--r--src/argaze/GazeFeatures.py10
-rw-r--r--src/argaze/PupilAnalysis/README.md5
-rw-r--r--src/argaze/PupilAnalysis/__init__.py2
-rw-r--r--src/argaze/__init__.py3
-rw-r--r--src/argaze/utils/MiscFeatures.py4
-rw-r--r--src/argaze/utils/README.md22
-rw-r--r--src/argaze/utils/__init__.py2
24 files changed, 117 insertions, 143 deletions
diff --git a/src/argaze/ArFeatures.py b/src/argaze/ArFeatures.py
index 2f12690..e60f792 100644
--- a/src/argaze/ArFeatures.py
+++ b/src/argaze/ArFeatures.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-""" """
+"""Manage AR environement assets."""
__author__ = "Théo de la Hogue"
__credits__ = []
@@ -205,14 +205,14 @@ class ArScene():
return self.aoi_scene.project(tvec, rvec, K)
- def estimate_pose(self, detected_markers) -> Tuple[numpy.array, numpy.array, dict]:
+ def estimate_pose(self, detected_markers) -> Tuple[numpy.array, numpy.array, str, dict]:
"""Estimate scene pose from detected ArUco markers.
- * **Returns:**
- - scene translation vector
- - scene rotation matrix
- - pose estimation strategy
- - dict of markers used to estimate the pose
+ Returns:
+ scene translation vector
+ scene rotation matrix
+ pose estimation strategy
+ dict of markers used to estimate the pose
"""
# Pose estimation fails when no marker is detected
diff --git a/src/argaze/ArUcoMarkers/ArUcoDetector.py b/src/argaze/ArUcoMarkers/ArUcoDetector.py
index 90d1327..2f424f6 100644
--- a/src/argaze/ArUcoMarkers/ArUcoDetector.py
+++ b/src/argaze/ArUcoMarkers/ArUcoDetector.py
@@ -309,9 +309,9 @@ class ArUcoDetector():
@property
def detection_metrics(self) -> Tuple[int, dict]:
"""Get marker detection metrics.
- * **Returns:**
- - number of detect function call
- - dict with number of detection for each marker identifier"""
+ Returns:
+ number of detect function call
+ dict with number of detection for each marker identifier"""
return self.__detection_count, Counter(self.__detected_ids)
diff --git a/src/argaze/ArUcoMarkers/ArUcoScene.py b/src/argaze/ArUcoMarkers/ArUcoScene.py
index fc2625d..d069df0 100644
--- a/src/argaze/ArUcoMarkers/ArUcoScene.py
+++ b/src/argaze/ArUcoMarkers/ArUcoScene.py
@@ -160,14 +160,14 @@ class ArUcoScene():
def from_obj(self, obj_filepath: str) -> ArUcoSceneType:
"""Load ArUco scene from .obj file.
- .. note::
- Expected object (o) name format: <DICTIONARY>#<IDENTIFIER>_Marker
+ !!! note
+ Expected object (o) name format: <DICTIONARY>#<IDENTIFIER>_Marker
- .. note::
- All markers have to belong to the same dictionary.
+ !!! note
+ All markers have to belong to the same dictionary.
- .. note::
- Marker normal vectors (vn) expected.
+ !!! note
+ Marker normal vectors (vn) expected.
"""
@@ -354,9 +354,9 @@ class ArUcoScene():
def filter_markers(self, detected_markers: dict) -> Tuple[dict, dict]:
"""Sort markers belonging to the scene from given detected markers dict (cf ArUcoDetector.detect_markers()).
- * **Returns:**
- - dict of markers belonging to this scene
- - dict of remaining markers not belonging to this scene
+ Returns:
+ dict of markers belonging to this scene
+ dict of remaining markers not belonging to this scene
"""
scene_markers = {}
@@ -425,13 +425,13 @@ class ArUcoScene():
except:
self.__translation_cache[B_identifier] = {A_identifier: AB_tvec}
- def check_markers_consistency(self, scene_markers: dict, angle_tolerance: float, distance_tolerance: float) -> Tuple[dict, dict]:
+ def check_markers_consistency(self, scene_markers: dict, angle_tolerance: float, distance_tolerance: float) -> Tuple[dict, dict, dict]:
"""Evaluate if given markers configuration match related places configuration.
- * **Returns:**
- - dict of consistent markers
- - dict of unconsistent markers
- - dict of identified distance or angle unconsistencies and out-of-bounds values
+ Returns:
+ dict of consistent markers
+ dict of unconsistent markers
+ dict of identified distance or angle unconsistencies and out-of-bounds values
"""
consistent_markers = {}
diff --git a/src/argaze/ArUcoMarkers/README.md b/src/argaze/ArUcoMarkers/README.md
deleted file mode 100644
index 29ab36b..0000000
--- a/src/argaze/ArUcoMarkers/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-Class interface to work with [OpenCV ArUco markers](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html).
-
-## Wiki
-
-Read [ArGaze wiki page dedicated to ArUco markers](https://git.recherche.enac.fr/projects/argaze/wiki/ArUco_markers) submodule.
-
-## Utils
-
-Print **A3_DICT_ARUCO_ORIGINAL_3cm_35cmx25cm.pdf** onto A3 paper sheet to get board at expected dimensions.
-
-Print **A4_DICT_ARUCO_ORIGINAL_3cm_0-9.pdf** onto A4 paper sheet to get markers at expected dimensions.
diff --git a/src/argaze/ArUcoMarkers/__init__.py b/src/argaze/ArUcoMarkers/__init__.py
index fa769f7..ac1bee4 100644
--- a/src/argaze/ArUcoMarkers/__init__.py
+++ b/src/argaze/ArUcoMarkers/__init__.py
@@ -1,5 +1,4 @@
"""
-.. include:: README.md
+Handle [OpenCV ArUco markers](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html): generate and detect markers, calibrate camera, describe scene, ...
"""
-__docformat__ = "restructuredtext"
-__all__ = ['ArUcoMarkersDictionary', 'ArUcoMarker', 'ArUcoBoard', 'ArUcoCamera', 'ArUcoDetector', 'ArUcoScene'] \ No newline at end of file
+__all__ = ['ArUcoMarkersDictionary', 'ArUcoMarker', 'ArUcoBoard', 'ArUcoCamera', 'ArUcoDetector', 'ArUcoScene', 'utils'] \ No newline at end of file
diff --git a/src/argaze/ArUcoMarkers/utils/__init__.py b/src/argaze/ArUcoMarkers/utils/__init__.py
new file mode 100644
index 0000000..923f5ec
--- /dev/null
+++ b/src/argaze/ArUcoMarkers/utils/__init__.py
@@ -0,0 +1,5 @@
+"""
+Print **A3_DICT_ARUCO_ORIGINAL_3cm_35cmx25cm.pdf** onto A3 paper sheet to get board at expected dimensions.
+
+Print **A4_DICT_ARUCO_ORIGINAL_3cm_0-9.pdf** onto A4 paper sheet to get markers at expected dimensions.
+""" \ No newline at end of file
diff --git a/src/argaze/AreaOfInterest/AOI2DScene.py b/src/argaze/AreaOfInterest/AOI2DScene.py
index bcf9cfa..73988b7 100644
--- a/src/argaze/AreaOfInterest/AOI2DScene.py
+++ b/src/argaze/AreaOfInterest/AOI2DScene.py
@@ -35,10 +35,10 @@ class AOI2DScene(AOIFeatures.AOIScene):
def raycast(self, pointer:tuple) -> Tuple[str, "AOIFeatures.AreaOfInterest", bool]:
"""Iterate over aoi to know which aoi is matching the given pointer position.
- * **Returns:**
- - aoi name
- - aoi object
- - matching status
+ Returns:
+ aoi name
+ aoi object
+ matching status
"""
for name, aoi in self.items():
@@ -67,12 +67,12 @@ class AOI2DScene(AOIFeatures.AOIScene):
def circlecast(self, center:tuple, radius:float) -> Tuple[str, "AOIFeatures.AreaOfInterest", numpy.array, float, float]:
"""Iterate over areas to know which aoi is matching circle.
- * **Returns:**
- - aoi name
- - aoi object
- - matching region points
- - ratio of matching region area relatively to aoi area
- - ratio of matching region area relatively to circle area
+ Returns:
+ aoi name
+ aoi object
+ matching region points
+ ratio of matching region area relatively to aoi area
+ ratio of matching region area relatively to circle area
"""
for name, aoi in self.items():
diff --git a/src/argaze/AreaOfInterest/AOI3DScene.py b/src/argaze/AreaOfInterest/AOI3DScene.py
index ea6c04d..dbb0424 100644
--- a/src/argaze/AreaOfInterest/AOI3DScene.py
+++ b/src/argaze/AreaOfInterest/AOI3DScene.py
@@ -152,12 +152,13 @@ class AOI3DScene(AOIFeatures.AOIScene):
def vision_cone(self, cone_radius, cone_height, cone_tip=[0., 0., 0.], cone_direction=[0., 0., 1.]) -> Tuple[AOI3DSceneType, AOI3DSceneType]:
"""Get AOI which are inside and out a given cone field.
- .. note:: By default
- The cone have its tip at origin and its base oriented to positive Z axis.
+ !!! note
+ **By default**
+ The cone have its tip at origin and its base oriented to positive Z axis.
- * **Returns:**
- - scene inside of the cone
- - scene outside of the cone
+ Returns:
+ scene inside of the cone
+ scene outside of the cone
"""
# define cone tip and direction as numpy array
@@ -192,17 +193,17 @@ class AOI3DScene(AOIFeatures.AOIScene):
def project(self, T: numpy.array = T0, R: numpy.array = R0, K: numpy.array = K0, D: numpy.array = D0) -> AOI2DSceneType:
"""Project 3D scene onto 2D scene according translation, rotation and optical parameters.
- * **Arguments:**
- - translation vector
- - rotation vector
- - camera intrinsic parameters matrix
- - camera distorsion coefficients vector
+ Parameters:
+ T: translation vector
+ R: rotation vector
+ K: camera intrinsic parameters matrix
+ D: camera distorsion coefficients vector
- .. danger::
- Camera distorsion coefficients could projects points which are far from the frame into it.
+ !!! danger
+ Camera distorsion coefficients could projects points which are far from the frame into it.
- .. note::
- As gaze is mainly focusing on the frame center, where the distorsion is low, it could be acceptable to not use camera distorsion.
+ !!! note
+ As gaze is mainly focusing on the frame center, where the distorsion is low, it could be acceptable to not use camera distorsion.
"""
aoi2D_scene = AOI2DScene.AOI2DScene()
@@ -220,9 +221,9 @@ class AOI3DScene(AOIFeatures.AOIScene):
def transform(self, T: numpy.array = T0, R: numpy.array = R0) -> AOI3DSceneType:
"""Translate and/or rotate 3D scene.
- * **Arguments:**
- - translation vector
- - rotation matrix
+ Parameters:
+ T: translation vector
+ R: rotation matrix
"""
aoi3D_scene = AOI3DScene()
diff --git a/src/argaze/AreaOfInterest/AOIFeatures.py b/src/argaze/AreaOfInterest/AOIFeatures.py
index a40eaca..438e15f 100644
--- a/src/argaze/AreaOfInterest/AOIFeatures.py
+++ b/src/argaze/AreaOfInterest/AOIFeatures.py
@@ -72,8 +72,8 @@ class AreaOfInterest(numpy.ndarray):
@property
def bounding_box(self) -> numpy.array:
"""Get area's bounding box.
- .. warning::
- Available for 2D AOI only."""
+ !!! warning
+ Available for 2D AOI only."""
assert(self.size > 1)
assert(self.dimension == 2)
@@ -85,8 +85,8 @@ class AreaOfInterest(numpy.ndarray):
def clockwise(self) -> AreaOfInterestType:
"""Get area points in clockwise order.
- .. warning::
- Available for 2D AOI only."""
+ !!! warning
+ Available for 2D AOI only."""
assert(self.dimension == 2)
@@ -98,10 +98,10 @@ class AreaOfInterest(numpy.ndarray):
def contains_point(self, point: tuple) -> bool:
"""Is a point inside area?
- .. warning::
- Available for 2D AOI only.
- .. danger::
- The AOI points must be sorted in clockwise order."""
+ !!! warning
+ Available for 2D AOI only.
+ !!! danger
+ The AOI points must be sorted in clockwise order."""
assert(self.dimension == 2)
assert(len(point) == self.dimension)
@@ -110,10 +110,10 @@ class AreaOfInterest(numpy.ndarray):
def inner_axis(self, point: tuple) -> tuple:
"""Transform the coordinates from the global axis to the AOI's axis.
- .. warning::
- Available for 2D AOI only.
- .. danger::
- The AOI points must be sorted in clockwise order."""
+ !!! warning
+ Available for 2D AOI only.
+ !!! danger
+ The AOI points must be sorted in clockwise order."""
assert(self.dimension == 2)
@@ -133,10 +133,10 @@ class AreaOfInterest(numpy.ndarray):
def outter_axis(self, point: tuple) -> tuple:
"""Transform the coordinates from the AOI's axis to the global axis.
- .. warning::
- Available for 2D AOI only.
- .. danger::
- The AOI points must be sorted in clockwise order."""
+ !!! warning
+ Available for 2D AOI only.
+ !!! danger
+ The AOI points must be sorted in clockwise order."""
assert(self.dimension == 2)
@@ -156,13 +156,13 @@ class AreaOfInterest(numpy.ndarray):
def circle_intersection(self, center: tuple, radius: float) -> Tuple[numpy.array, float, float]:
"""Get intersection shape with a circle, intersection area / AOI area ratio and intersection area / circle area ratio.
- .. warning::
- Available for 2D AOI only.
+ !!! warning
+ Available for 2D AOI only.
- * **Returns:**
- - intersection shape,
- - intersection aoi ratio,
- - intersection circle ratio
+ Returns:
+ intersection shape
+ intersection aoi ratio
+ intersection circle ratio
"""
assert(self.dimension == 2)
@@ -186,8 +186,8 @@ class AreaOfInterest(numpy.ndarray):
def draw(self, frame, color, border_size=1):
"""Draw 2D AOI into frame.
- .. warning::
- Available for 2D AOI only."""
+ !!! warning
+ Available for 2D AOI only."""
assert(self.dimension == 2)
@@ -211,8 +211,8 @@ class AOIFrame():
def __init__(self, aoi: AreaOfInterestType, size: tuple):
"""
- .. warning::
- Available for 2D AOI only."""
+ !!! warning
+ Available for 2D AOI only."""
assert(aoi.dimension == 2)
@@ -250,8 +250,8 @@ class AOIFrame():
def heatmap_update(self, point: tuple, sigma: float):
"""Update heatmap matrix.
- .. danger::
- Call heatmap_init() method before any update."""
+ !!! danger
+ Call heatmap_init() method before any update."""
point_spread = self.point_spread(point, sigma)
diff --git a/src/argaze/AreaOfInterest/README.md b/src/argaze/AreaOfInterest/README.md
deleted file mode 100644
index d53c189..0000000
--- a/src/argaze/AreaOfInterest/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Class interface to manage Areas of Interest (AOI).
-
-## Wiki
-
-Read [ArGaze wiki page dedicated to Areas Of Interest](https://git.recherche.enac.fr/projects/argaze/wiki/Areas_Of_Interest) submodule. \ No newline at end of file
diff --git a/src/argaze/AreaOfInterest/__init__.py b/src/argaze/AreaOfInterest/__init__.py
index a1e9f47..a9bb2b2 100644
--- a/src/argaze/AreaOfInterest/__init__.py
+++ b/src/argaze/AreaOfInterest/__init__.py
@@ -1,5 +1,4 @@
"""
-.. include:: README.md
+Manage Areas of Interest (AOI) and scenes for 2D and 3D environment.
"""
-__docformat__ = "restructuredtext"
__all__ = ['AOIFeatures', 'AOI2DScene', 'AOI3DScene'] \ No newline at end of file
diff --git a/src/argaze/DataStructures.py b/src/argaze/DataStructures.py
index 1168191..681ec72 100644
--- a/src/argaze/DataStructures.py
+++ b/src/argaze/DataStructures.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-""" """
+"""Timestamped data features."""
__author__ = "Théo de la Hogue"
__credits__ = []
diff --git a/src/argaze/GazeAnalysis/Entropy.py b/src/argaze/GazeAnalysis/Entropy.py
index 05ac5ea..861c73a 100644
--- a/src/argaze/GazeAnalysis/Entropy.py
+++ b/src/argaze/GazeAnalysis/Entropy.py
@@ -31,9 +31,9 @@ class AOIScanPathAnalyzer(GazeFeatures.AOIScanPathAnalyzer):
def analyze(self, aoi_scan_path: GazeFeatures.AOIScanPathType, transition_matrix_probabilities: pandas.DataFrame) -> Tuple[float, float]:
"""Analyze aoi scan path.
- * **Returns:**
- - stationary entropy
- - transition entropy"""
+ Returns:
+ stationary entropy
+ transition entropy"""
assert(len(aoi_scan_path) > 1)
diff --git a/src/argaze/GazeAnalysis/LempelZivComplexity.py b/src/argaze/GazeAnalysis/LempelZivComplexity.py
index ee73820..c449414 100644
--- a/src/argaze/GazeAnalysis/LempelZivComplexity.py
+++ b/src/argaze/GazeAnalysis/LempelZivComplexity.py
@@ -21,8 +21,6 @@ from lempel_ziv_complexity import lempel_ziv_complexity
@dataclass
class AOIScanPathAnalyzer(GazeFeatures.AOIScanPathAnalyzer):
- """Implementation of Lempel ziv complexity algorithm as described in Lounis paper.
- """
def __post_init__(self):
diff --git a/src/argaze/GazeAnalysis/README.md b/src/argaze/GazeAnalysis/README.md
deleted file mode 100644
index b2582cb..0000000
--- a/src/argaze/GazeAnalysis/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Various gaze movement identification and scan path analysis algorithms.
-
-## Wiki
-
-Read [ArGaze wiki page dedicated to gaze analysis](https://git.recherche.enac.fr/projects/argaze/wiki/Gaze_analysis) submodule. \ No newline at end of file
diff --git a/src/argaze/GazeAnalysis/TransitionMatrix.py b/src/argaze/GazeAnalysis/TransitionMatrix.py
index e92baf3..52bfa3a 100644
--- a/src/argaze/GazeAnalysis/TransitionMatrix.py
+++ b/src/argaze/GazeAnalysis/TransitionMatrix.py
@@ -31,9 +31,9 @@ class AOIScanPathAnalyzer(GazeFeatures.AOIScanPathAnalyzer):
def analyze(self, aoi_scan_path: GazeFeatures.AOIScanPathType) -> Tuple[pandas.DataFrame, float]:
"""Analyze aoi scan path.
- * **Returns:**
- - transition matrix probabilities
- - transition matrix density"""
+ Returns:
+ transition matrix probabilities
+ transition matrix density"""
assert(len(aoi_scan_path) > 1)
diff --git a/src/argaze/GazeAnalysis/__init__.py b/src/argaze/GazeAnalysis/__init__.py
index 5f8b102..2bdb820 100644
--- a/src/argaze/GazeAnalysis/__init__.py
+++ b/src/argaze/GazeAnalysis/__init__.py
@@ -1,5 +1,4 @@
"""
-.. include:: README.md
+Various gaze movement identification and scan path analysis algorithms.
"""
-__docformat__ = "restructuredtext"
__all__ = ['DispersionThresholdIdentification', 'VelocityThresholdIdentification', 'TransitionMatrix', 'KCoefficient', 'LempelZivComplexity', 'NGram', 'Entropy', 'NearestNeighborIndex', 'ExploitExploreRatio'] \ No newline at end of file
diff --git a/src/argaze/GazeFeatures.py b/src/argaze/GazeFeatures.py
index 33b9ef8..6209dc9 100644
--- a/src/argaze/GazeFeatures.py
+++ b/src/argaze/GazeFeatures.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-""" """
+"""Generic gaze data and class definitions."""
__author__ = "Théo de la Hogue"
__credits__ = []
@@ -437,8 +437,8 @@ class ScanPath(list):
def append_fixation(self, ts, fixation):
"""Append new fixation to scan path.
- .. warning::
- Consecutives fixations are ignored keeping the last fixation"""
+ !!! warning
+ Consecutives fixations are ignored keeping the last fixation"""
self.__last_fixation = fixation
@@ -610,8 +610,8 @@ class AOIScanPath(list):
def append_fixation(self, ts, fixation, looked_aoi: str) -> bool:
"""Append new fixation to aoi scan path and return last new aoi scan step if one have been created.
- .. warning::
- It could raise AOIScanStepError"""
+ !!! warning
+ It could raise AOIScanStepError"""
if looked_aoi not in self.__expected_aois:
diff --git a/src/argaze/PupilAnalysis/README.md b/src/argaze/PupilAnalysis/README.md
deleted file mode 100644
index 3084c15..0000000
--- a/src/argaze/PupilAnalysis/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Class interface to work with various gaze analysis algorithms.
-
-## Wiki
-
-Read [ArGaze wiki page dedicated to gaze analysis](https://git.recherche.enac.fr/projects/argaze/wiki/Gaze_analysis) submodule. \ No newline at end of file
diff --git a/src/argaze/PupilAnalysis/__init__.py b/src/argaze/PupilAnalysis/__init__.py
index ef86b05..41698b5 100644
--- a/src/argaze/PupilAnalysis/__init__.py
+++ b/src/argaze/PupilAnalysis/__init__.py
@@ -1,5 +1,5 @@
"""
-.. include:: README.md
+Class interface to work with various pupil analysis algorithms.
"""
__docformat__ = "restructuredtext"
__all__ = ['WorkloadIndex'] \ No newline at end of file
diff --git a/src/argaze/__init__.py b/src/argaze/__init__.py
index 0099bfc..5b2685b 100644
--- a/src/argaze/__init__.py
+++ b/src/argaze/__init__.py
@@ -1,5 +1,4 @@
"""
-.. include:: ../../README.md
+ArGaze is divided in submodules dedicated to various specifics features.
"""
-__docformat__ = "restructuredtext"
__all__ = ['ArUcoMarkers','AreaOfInterest','ArFeatures','GazeFeatures','GazeAnalysis','PupilFeatures','PupilAnalysis','DataStructures','utils'] \ No newline at end of file
diff --git a/src/argaze/utils/MiscFeatures.py b/src/argaze/utils/MiscFeatures.py
index 09c289d..a06d82f 100644
--- a/src/argaze/utils/MiscFeatures.py
+++ b/src/argaze/utils/MiscFeatures.py
@@ -32,8 +32,8 @@ def printProgressBar (iteration:int, total:int, prefix:str = '', suffix:str = ''
def importFromTestPackage(module: str):
"""Import module from ArGaze test package.
- * **Returns:**
- - a module named <Module>Test"""
+ Returns:
+ a module named <Module>Test"""
import argaze
import importlib.util
diff --git a/src/argaze/utils/README.md b/src/argaze/utils/README.md
index 0bd5012..d5af45a 100644
--- a/src/argaze/utils/README.md
+++ b/src/argaze/utils/README.md
@@ -1,10 +1,10 @@
-Collection of ready-to-use commands based on ArGaze toolkit.
+Collection of command-line high level features scripts.
-.. note::
- *Consider that all inline commands below needs to be executed into ArGaze root folder.*
+!!! note
+ *Consider that all inline commands below needs to be executed into ArGaze root folder.*
-.. note::
- *Use -h option to get command arguments documentation.*
+!!! note
+ *Use -h option to get command arguments documentation.*
# ArUco Markers factory
@@ -28,8 +28,8 @@ Calibrate a camera device (-d DEVICE) using a 7 columns and 5 rows calibration b
python ./src/argaze/utils/camera_calibrate.py 7 5 5 3 DICT_APRILTAG_16h5 -d DEVICE -o ./src/argaze/utils/demo_environment
```
-.. note::
- Use **A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf** file located in *./src/argaze/ArUcoMarkers/utils/* folder ready to be printed on A3 paper sheet.
+!!! note
+ Use **A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf** file located in *./src/argaze/ArUcoMarkers/utils/* folder ready to be printed on A3 paper sheet.
# AR environment demonstration
@@ -39,11 +39,11 @@ Load AR environment from **setup.json** file, detect ArUco markers into camera d
python ./src/argaze/utils/demo_ar_features_run.py -d DEVICE
```
-.. note::
- This demonstration assumes that camera calibration step is done and a **calibration.json** has been exported into *./src/argaze/utils/demo_environment/* folder.
+!!! note
+ This demonstration assumes that camera calibration step is done and a **calibration.json** has been exported into *./src/argaze/utils/demo_environment/* folder.
-.. note::
- Use **A3_demo.pdf** file located in *./src/argaze/utils/demo_environment/* folder ready to be printed on A3 paper sheet.
+!!! note
+ Use **A3_demo.pdf** file located in *./src/argaze/utils/demo_environment/* folder ready to be printed on A3 paper sheet.
# Gaze features demonstration
diff --git a/src/argaze/utils/__init__.py b/src/argaze/utils/__init__.py
index 262a0e2..8134e6f 100644
--- a/src/argaze/utils/__init__.py
+++ b/src/argaze/utils/__init__.py
@@ -1,5 +1,5 @@
"""
-.. include:: README.md
+{!./src/argaze/utils/README.md!}
"""
__docformat__ = "restructuredtext"
__all__ = ['MiscFeatures'] \ No newline at end of file