From 02c931780e08bd21bc6b48136a5430a405478047 Mon Sep 17 00:00:00 2001 From: Théo de la Hogue Date: Thu, 1 Feb 2024 02:04:36 +0100 Subject: Adding VideoWriter class. Using it in demo. Documenting its use. --- docs/user_guide/gaze_analysis_pipeline/logging.md | 31 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'docs/user_guide/gaze_analysis_pipeline/logging.md') diff --git a/docs/user_guide/gaze_analysis_pipeline/logging.md b/docs/user_guide/gaze_analysis_pipeline/logging.md index 617690f..8afb511 100644 --- a/docs/user_guide/gaze_analysis_pipeline/logging.md +++ b/docs/user_guide/gaze_analysis_pipeline/logging.md @@ -3,7 +3,7 @@ Log gaze analysis [ArFrame](../../argaze.md/#argaze.ArFeatures.ArFrame) and [ArLayer](../../argaze.md/#argaze.ArFeatures.ArLayer) analysis can be logged by registering observers to their **look** method. -## Enable ArFrame and ArLayer analysis logging +## Export gaze analysis to CSV file [ArFrame](../../argaze.md/#argaze.ArFeatures.ArFrame) and [ArLayer](../../argaze.md/#argaze.ArFeatures.ArLayer) have an observers attribute to enable pipeline execution logging. @@ -36,7 +36,7 @@ from argaze.utils import UtilsFeatures class ScanPathAnalysisLogger(DataFeatures.PipelineStepObserver, UtilsFeatures.FileWriter): def on_look(self, timestamp, ar_frame): - """Log scan path metrics""" + """Log scan path metrics.ar_frame""" if ar_frame.analysis_available: @@ -76,7 +76,7 @@ from argaze.utils import UtilsFeatures class AOIScanPathAnalysisLogger(DataFeatures.PipelineStepObserver, UtilsFeatures.FileWriter): def on_look(self, timestamp, ar_layer): - """Log aoi scan path metrics""" + """Log aoi scan path metrics.""" if ar_layer.analysis_available: @@ -104,4 +104,27 @@ Assuming that [ArGaze.GazeAnalysis.NGram](../../argaze.md/#argaze.GazeAnalysis.N !!! note "" - Learn to [script the pipeline](./advanced_topics/scripting.md) to know more about [ArFrame](../../argaze.md/#argaze.ArFeatures.ArFrame) and [ArLayers](../../argaze.md/#argaze.ArFeatures.ArLayer) attributes. \ No newline at end of file + Learn to [script the pipeline](./advanced_topics/scripting.md) to know more about [ArFrame](../../argaze.md/#argaze.ArFeatures.ArFrame) and [ArLayers](../../argaze.md/#argaze.ArFeatures.ArLayer) attributes. + +### Export gaze analysis to video file + +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. + +```python +from argaze import DataFeatures +from argaze.utils import UtilsFeatures + +class VideoRecorder(DataFeatures.PipelineStepObserver, UtilsFeatures.VideoWriter): + + def on_look(self, timestamp, ar_frame): + """Record frame image into video file.""" + + 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