aboutsummaryrefslogtreecommitdiff
path: root/docs/user_guide/aruco_markers_pipeline/advanced_topics
diff options
context:
space:
mode:
authorThéo de la Hogue2024-04-10 15:13:12 +0200
committerThéo de la Hogue2024-04-10 15:13:12 +0200
commit03013286100d4a3cc49439afc6f432f7be0c494b (patch)
tree3615506f50381208bd4d327d61a49440143d6ffe /docs/user_guide/aruco_markers_pipeline/advanced_topics
parentbcfb82055c1736262ce974dc5dd10b365dda8d5c (diff)
downloadargaze-03013286100d4a3cc49439afc6f432f7be0c494b.zip
argaze-03013286100d4a3cc49439afc6f432f7be0c494b.tar.gz
argaze-03013286100d4a3cc49439afc6f432f7be0c494b.tar.bz2
argaze-03013286100d4a3cc49439afc6f432f7be0c494b.tar.xz
orthographic corrections
Diffstat (limited to 'docs/user_guide/aruco_markers_pipeline/advanced_topics')
-rw-r--r--docs/user_guide/aruco_markers_pipeline/advanced_topics/aruco_detector_configuration.md37
-rw-r--r--docs/user_guide/aruco_markers_pipeline/advanced_topics/optic_parameters_calibration.md190
-rw-r--r--docs/user_guide/aruco_markers_pipeline/advanced_topics/scripting.md132
3 files changed, 0 insertions, 359 deletions
diff --git a/docs/user_guide/aruco_markers_pipeline/advanced_topics/aruco_detector_configuration.md b/docs/user_guide/aruco_markers_pipeline/advanced_topics/aruco_detector_configuration.md
deleted file mode 100644
index 410e2d7..0000000
--- a/docs/user_guide/aruco_markers_pipeline/advanced_topics/aruco_detector_configuration.md
+++ /dev/null
@@ -1,37 +0,0 @@
-Improve ArUco markers detection
-===============================
-
-As explain in [OpenCV ArUco documentation](https://docs.opencv.org/4.x/d1/dcd/structcv_1_1aruco_1_1DetectorParameters.html), ArUco markers detection is highly configurable.
-
-## Load ArUcoDetector parameters
-
-[ArUcoCamera.detector.parameters](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoDetector.Parameters) can be loaded thanks to a dedicated JSON entry.
-
-Here is an extract from the JSON [ArUcoCamera](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoCamera) configuration file with ArUco detector parameters:
-
-```json
-{
- "name": "My FullHD camera",
- "size": [1920, 1080],
- "aruco_detector": {
- "dictionary": "DICT_APRILTAG_16h5",
- "parameters": {
- "adaptiveThreshConstant": 10,
- "useAruco3Detection": 1
- }
- },
- ...
-```
-
-## Print ArUcoDetector parameters
-
-```python
-# Assuming ArUcoCamera is loaded
-...
-
-# Print all ArUcoDetector parameters
-print(aruco_camera.aruco_detector.parameters)
-
-# Print only modified ArUcoDetector parameters
-print(f'{aruco_camera.aruco_detector.parameters:modified}')
-```
diff --git a/docs/user_guide/aruco_markers_pipeline/advanced_topics/optic_parameters_calibration.md b/docs/user_guide/aruco_markers_pipeline/advanced_topics/optic_parameters_calibration.md
deleted file mode 100644
index c5cecac..0000000
--- a/docs/user_guide/aruco_markers_pipeline/advanced_topics/optic_parameters_calibration.md
+++ /dev/null
@@ -1,190 +0,0 @@
-Calibrate optic parameters
-==========================
-
-A camera device have to be calibrated to compensate its optical distorsion.
-
-![Optic parameters calibration](../../../img/optic_calibration.png)
-
-## Print calibration board
-
-The first step to calibrate a camera is to create an [ArUcoBoard](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoBoard) like in the code below:
-
-``` python
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary, ArUcoBoard
-
-# Create ArUco dictionary
-aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('DICT_APRILTAG_16h5')
-
-# Create an ArUco board of 7 columns and 5 rows with 5 cm squares with 3cm ArUco markers inside
-aruco_board = ArUcoBoard.ArUcoBoard(7, 5, 5, 3, aruco_dictionary)
-
-# Export ArUco board with 300 dpi resolution
-aruco_board.save('./calibration_board.png', 300)
-```
-
-!!! note
- There is **A3_DICT_APRILTAG_16h5_3cm_35cmx25cm.pdf** file located in *./src/argaze/ArUcoMarkers/utils/* folder ready to be printed on A3 paper sheet.
-
-Let's print the calibration board before to go further.
-
-## Capture board pictures
-
-Then, the calibration process needs to make many different captures of an [ArUcoBoard](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoBoard) through the camera and then, pass them to an [ArUcoDetector](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoDetector.ArUcoDetector) instance to detect board corners and store them as calibration data into an [ArUcoOpticCalibrator](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoOpticCalibrator) for final calibration process.
-
-![Calibration step](../../../img/optic_calibration_step.png)
-
-The sample of code below illustrates how to:
-
-* load all required ArGaze objects,
-* detect board corners into a Full HD camera video stream,
-* store detected corners as calibration data then,
-* once enough captures are made, process them to find optic parameters and,
-* finally, save optic parameters into a JSON file.
-
-``` python
-from argaze.ArUcoMarkers import ArUcoMarkersDictionary, ArUcoOpticCalibrator, ArUcoBoard, ArUcoDetector
-
-# Create ArUco dictionary
-aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('DICT_APRILTAG_16h5')
-
-# Create ArUco optic calibrator
-aruco_optic_calibrator = ArUcoOpticCalibrator.ArUcoOpticCalibrator()
-
-# Create ArUco board of 7 columns and 5 rows with 5 cm squares with 3cm aruco markers inside
-# Note: This board is the one expected during further board tracking
-expected_aruco_board = ArUcoBoard.ArUcoBoard(7, 5, 5, 3, aruco_dictionary)
-
-# Create ArUco detector
-aruco_detector = ArUcoDetector.ArUcoDetector(dictionary=aruco_dictionary)
-
-# Assuming that live Full HD (1920x1080) video stream is enabled
-...
-
-# Assuming there is a way to escape the while loop
-...
-
- while video_stream.is_alive():
-
- # Capture image from video stream
- image = video_stream.read()
-
- # Detect all board corners in image
- aruco_detector.detect_board(image, expected_aruco_board, expected_aruco_board.markers_number)
-
- # If all board corners are detected
- if aruco_detector.board_corners_number() == expected_aruco_board.corners_number:
-
- # Draw board corners to show that board tracking succeeded
- aruco_detector.draw_board(image)
-
- # Append tracked board data for further calibration processing
- aruco_optic_calibrator.store_calibration_data(aruco_detector.board_corners(), aruco_detector.board_corners_identifier())
-
-# Start optic calibration processing for Full HD image resolution
-print('Calibrating optic...')
-optic_parameters = aruco_optic_calibrator.calibrate(expected_aruco_board, dimensions=(1920, 1080))
-
-if optic_parameters:
-
- # Export optic parameters
- optic_parameters.to_json('./optic_parameters.json')
-
- print('Calibration succeeded: optic_parameters.json file exported.')
-
-else:
-
- print('Calibration failed.')
-```
-
-Below, an optic_parameters JSON file example:
-
-```json
-{
- "rms": 0.6688921504088245,
- "dimensions": [
- 1920,
- 1080
- ],
- "K": [
- [
- 1135.6524381415752,
- 0.0,
- 956.0685325355497
- ],
- [
- 0.0,
- 1135.9272506869524,
- 560.059099810324
- ],
- [
- 0.0,
- 0.0,
- 1.0
- ]
- ],
- "D": [
- 0.01655492265003404,
- 0.1985524264972037,
- 0.002129965902489484,
- -0.0019528582922179365,
- -0.5792910353639452
- ]
-}
-```
-
-## Load and display optic parameters
-
-[ArUcoCamera.detector.optic_parameters](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoOpticCalibrator.OpticParameters) can be enabled thanks to a dedicated JSON entry.
-
-Here is an extract from the JSON [ArUcoCamera](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoCamera) configuration file where optic parameters are loaded and displayed:
-
-```json
-{
- "name": "My FullHD Camera",
- "size": [1920, 1080],
- "aruco_detector": {
- "dictionary": "DICT_APRILTAG_16h5",
- "optic_parameters": {
- "rms": 0.6688921504088245,
- "dimensions": [
- 1920,
- 1080
- ],
- "K": [
- [
- 1135.6524381415752,
- 0.0,
- 956.0685325355497
- ],
- [
- 0.0,
- 1135.9272506869524,
- 560.059099810324
- ],
- [
- 0.0,
- 0.0,
- 1.0
- ]
- ],
- "D": [
- 0.01655492265003404,
- 0.1985524264972037,
- 0.002129965902489484,
- -0.0019528582922179365,
- -0.5792910353639452
- ]
- }
- },
- ...
- "image_parameters": {
- ...
- "draw_optic_parameters_grid": {
- "width": 192,
- "height": 108,
- "z": 100,
- "point_size": 1,
- "point_color": [0, 0, 255]
- }
- }
-``` \ No newline at end of file
diff --git a/docs/user_guide/aruco_markers_pipeline/advanced_topics/scripting.md b/docs/user_guide/aruco_markers_pipeline/advanced_topics/scripting.md
deleted file mode 100644
index 04d6a2f..0000000
--- a/docs/user_guide/aruco_markers_pipeline/advanced_topics/scripting.md
+++ /dev/null
@@ -1,132 +0,0 @@
-Script the pipeline
-===================
-
-All aruco markers pipeline objects are accessible from Python script.
-This could be particularly useful for realtime AR interaction applications.
-
-## Load ArUcoCamera configuration from dictionary
-
-First of all, [ArUcoCamera](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoCamera) configuration can be loaded from a python dictionary.
-
-```python
-from argaze.ArUcoMarkers import ArUcoCamera
-
-# Edit a dict with ArUcoCamera configuration
-configuration = {
- "name": "My FullHD camera",
- "size": (1920, 1080),
- ...
- "aruco_detector": {
- ...
- },
- "scenes": {
- "MyScene" : {
- "aruco_markers_group": {
- ...
- },
- "layers": {
- "MyLayer": {
- "aoi_scene": {
- ...
- }
- },
- ...
- }
- },
- ...
- }
- "layers": {
- "MyLayer": {
- ...
- },
- ...
- },
- "image_parameters": {
- ...
- }
-}
-
-# Load ArUcoCamera
-aruco_camera = ArUcoCamera.ArUcoCamera.from_dict(configuration)
-
-# Do something with ArUcoCamera
-...
-```
-
-## Access to ArUcoCamera and ArScenes attributes
-
-Then, once the configuration is loaded, it is possible to access to its attributes: [read ArUcoCamera code reference](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoCamera) to get a complete list of what is available.
-
-Thus, the [ArUcoCamera.scenes](../../../argaze.md/#argaze.ArFeatures.ArCamera) attribute allows to access each loaded aruco scene and so, access to their attributes: [read ArUcoScene code reference](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoScene) to get a complete list of what is available.
-
-```python
-from argaze import ArFeatures
-
-# Assuming the ArUcoCamera is loaded
-...
-
-# Iterate over each ArUcoCamera scene
-for name, aruco_scene in aruco_camera.scenes.items():
- ...
-```
-
-## Pipeline execution outputs
-
-[ArUcoCamera.watch](../../../argaze.md/#argaze.ArFeatures.ArCamera.watch) method returns data about pipeline execution.
-
-```python
-# Assuming that timestamped images are available
-...:
-
- try:
-
- # Watch image with ArUco camera
- aruco_camera.watch(image, timestamp=timestamp)
-
- # Do something with pipeline exception
- except Exception as e:
-
- ...
-
- # Do something with detected_markers
- ... aruco_camera.aruco_detector.detected_markers()
-
-```
-
-Let's understand the meaning of each returned data.
-
-### *aruco_camera.aruco_detector.detected_markers()*
-
-A dictionary containing all detected markers provided by [ArUcoDetector](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoDetector) class.
-
-## Setup ArUcoCamera image parameters
-
-Specific [ArUcoCamera.image](../../../argaze.md/#argaze.ArFeatures.ArFrame.image) method parameters can be configured thanks to a python dictionary.
-
-```python
-# Assuming ArUcoCamera is loaded
-...
-
-# Edit a dict with ArUcoCamera image parameters
-image_parameters = {
- "draw_detected_markers": {
- ...
- },
- "draw_scenes": {
- ...
- },
- "draw_optic_parameters_grid": {
- ...
- },
- ...
-}
-
-# Pass image parameters to ArUcoCamera
-aruco_camera_image = aruco_camera.image(**image_parameters)
-
-# Do something with ArUcoCamera image
-...
-```
-
-!!! note
- [ArUcoCamera](../../../argaze.md/#argaze.ArUcoMarkers.ArUcoCamera) inherits from [ArFrame](../../../argaze.md/#argaze.ArFeatures.ArFrame) and so, benefits from all image parameters described in [gaze analysis pipeline visualisation section](../../gaze_analysis_pipeline/visualisation.md). \ No newline at end of file