From 03013286100d4a3cc49439afc6f432f7be0c494b Mon Sep 17 00:00:00 2001 From: Théo de la Hogue Date: Wed, 10 Apr 2024 15:13:12 +0200 Subject: orthographic corrections --- .../aruco_detector_configuration.md | 37 ---- .../optic_parameters_calibration.md | 190 --------------------- .../advanced_topics/scripting.md | 132 -------------- 3 files changed, 359 deletions(-) delete mode 100644 docs/user_guide/aruco_markers_pipeline/advanced_topics/aruco_detector_configuration.md delete mode 100644 docs/user_guide/aruco_markers_pipeline/advanced_topics/optic_parameters_calibration.md delete mode 100644 docs/user_guide/aruco_markers_pipeline/advanced_topics/scripting.md (limited to 'docs/user_guide/aruco_markers_pipeline/advanced_topics') 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 -- cgit v1.1