From 0423353fb03adea80a7d25bbc97338f973a643f7 Mon Sep 17 00:00:00 2001 From: Théo de la Hogue Date: Thu, 21 Mar 2024 21:07:08 +0100 Subject: More work on new serialization system. Demo still not working. --- .../advanced_topics/scripting.md | 4 +- docs/user_guide/gaze_analysis_pipeline/logging.md | 56 ++++++++++++++-------- 2 files changed, 37 insertions(+), 23 deletions(-) (limited to 'docs') diff --git a/docs/user_guide/gaze_analysis_pipeline/advanced_topics/scripting.md b/docs/user_guide/gaze_analysis_pipeline/advanced_topics/scripting.md index 19d277f..927e6d7 100644 --- a/docs/user_guide/gaze_analysis_pipeline/advanced_topics/scripting.md +++ b/docs/user_guide/gaze_analysis_pipeline/advanced_topics/scripting.md @@ -95,7 +95,7 @@ Calling [ArFrame.look](../../../argaze.md/#argaze.ArFeatures.ArFrame.look) metho # Do something with scan path analysis if ar_frame.is_analysis_available(): - for scan_path_analyzer_name, scan_path_analysis in ar_frame.analysis(): + for scan_path_analyzer_name, scan_path_analysis in ar_frame.analysis: ... @@ -107,7 +107,7 @@ Calling [ArFrame.look](../../../argaze.md/#argaze.ArFeatures.ArFrame.look) metho if ar_layer.is_analysis_available(): - for aoi_scan_path_analyzer_name, aoi_scan_path_analysis in ar_layer.analysis(): + for aoi_scan_path_analyzer_name, aoi_scan_path_analysis in ar_layer.analysis: ... diff --git a/docs/user_guide/gaze_analysis_pipeline/logging.md b/docs/user_guide/gaze_analysis_pipeline/logging.md index 001c213..9cfe152 100644 --- a/docs/user_guide/gaze_analysis_pipeline/logging.md +++ b/docs/user_guide/gaze_analysis_pipeline/logging.md @@ -13,11 +13,20 @@ Here is an extract from the JSON ArFrame configuration file where logging is ena { "name": "My FullHD screen", "size": [1920, 1080], - "observers": "my_frame_logger.py", + "observers": { + "my_frame_logger.ScanPathAnalysisLogger": { + "path": "./scan_path_metrics.csv", + "header": ["Timestamp (ms)", "Duration (ms)", "Steps number"] + }, ... "layers": { "MyLayer": { - "observers": "my_layer_logger.py", + "observers": { + "my_layer_logger.AOIScanPathAnalysisLogger": { + "path": "./aoi_scan_path_metrics.csv", + "header": ["Timestamp (ms)", "NGram counts"] + } + }, ... } } @@ -42,17 +51,12 @@ class ScanPathAnalysisLogger(DataFeatures.PipelineStepObserver, UtilsFeatures.Fi log = ( timestamp, - ar_frame.scan_path_analyzers['argaze.GazeAnalysis.Basic'].path_duration, - ar_frame.scan_path_analyzers['argaze.GazeAnalysis.Basic'].steps_number + ar_frame.analysis['argaze.GazeAnalysis.Basic'].path_duration, + ar_frame.analysis['argaze.GazeAnalysis.Basic'].steps_number ) # Write to file self.write(log) - -# Export logger as observer -__observers__ = { - "Scan path analysis logger": ScanPathAnalysisLogger(path="./scan_path_metrics.csv", header=("Timestamp (ms)", "Duration (ms)", "Steps number")) - } ``` Assuming that [ArGaze.GazeAnalysis.Basic](../../argaze.md/#argaze.GazeAnalysis.Basic) scan path analysis module is enabled for 'My FullHD screen' ArFrame, a ***scan_path_metrics.csv*** file would be created: @@ -82,16 +86,11 @@ class AOIScanPathAnalysisLogger(DataFeatures.PipelineStepObserver, UtilsFeatures log = ( timestamp, - ar_layer.aoi_scan_path_analyzers['argaze.GazeAnalysis.NGram'].ngrams_count + ar_layer.analysis['argaze.GazeAnalysis.NGram'].ngrams_count ) # Write to file self.write(log) - -# Export logger as observer -__observers__ = { - "AOI Scan path analysis logger": AOIScanPathAnalysisLogger(path="./aoi_scan_path_metrics.csv", header=("Timestamp (ms)", "NGram counts")) - } ``` Assuming that [ArGaze.GazeAnalysis.NGram](../../argaze.md/#argaze.GazeAnalysis.NGram) AOI scan path analysis module is enabled for 'MyLayer' ArLayer, a ***aoi_scan_path_metrics.csv*** file would be created: @@ -110,9 +109,28 @@ Assuming that [ArGaze.GazeAnalysis.NGram](../../argaze.md/#argaze.GazeAnalysis.N As explained in [pipeline steps visualisation chapter](visualisation.md), it is possible to get [ArFrame.image](../../argaze.md/#argaze.ArFeatures.ArFrame.image) once timestamped gaze positions have been processed by [ArFrame.look](../../argaze.md/#argaze.ArFeatures.ArFrame.look) method. +Here is the JSON ArFrame configuration file where [ArFrame](../../argaze.md/#argaze.ArFeatures.ArFrame) observers are extended with a new my_frame_logger.VideoRecorder instance: + +```json +{ + "name": "My FullHD screen", + "size": [1920, 1080], + "observers": { + ... + "my_frame_logger.VideoRecorder": { + "path": "./video.mp4", + "width": 1920, + "height": 1080, + "fps": 15 + }, + ... +} +``` + +Here is *my_frame_logger.py* file extended with a new VideoRecorder class: + ```python -from argaze import DataFeatures -from argaze.utils import UtilsFeatures +... class VideoRecorder(DataFeatures.PipelineStepObserver, UtilsFeatures.VideoWriter): @@ -121,10 +139,6 @@ class VideoRecorder(DataFeatures.PipelineStepObserver, UtilsFeatures.VideoWriter self.write(ar_frame.image()) -# Export recorder as observer -__observers__ = { - "Video recorder": VideoRecorder(path="./video.mp4", width=1920, height=1080, fps=15) - } ``` Assuming that [ArFrame.image_parameters](../../argaze.md/#argaze.ArFeatures.ArFrame.image_parameters) are provided, ***video.mp4*** file would be created. \ No newline at end of file -- cgit v1.1