aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThéo de la Hogue2024-04-26 03:55:23 +0200
committerThéo de la Hogue2024-04-26 03:55:23 +0200
commitb7f531e212f4c7d07df2739de22392829ea45737 (patch)
treedf2455c86e744f8c13f4bc08da4f7ae8df7308fa
parent6125539d82e13edc8a8df56a4e08483b9b4e43a4 (diff)
downloadargaze-b7f531e212f4c7d07df2739de22392829ea45737.zip
argaze-b7f531e212f4c7d07df2739de22392829ea45737.tar.gz
argaze-b7f531e212f4c7d07df2739de22392829ea45737.tar.bz2
argaze-b7f531e212f4c7d07df2739de22392829ea45737.tar.xz
Working around plotting demonstration.
-rw-r--r--src/argaze/utils/demo/plotters.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/argaze/utils/demo/plotters.py b/src/argaze/utils/demo/plotters.py
new file mode 100644
index 0000000..53c35aa
--- /dev/null
+++ b/src/argaze/utils/demo/plotters.py
@@ -0,0 +1,98 @@
+""" """
+
+"""
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later
+version.
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+You should have received a copy of the GNU General Public License along with
+this program. If not, see <https://www.gnu.org/licenses/>.
+"""
+
+__author__ = "Théo de la Hogue"
+__credits__ = []
+__copyright__ = "Copyright 2023, Ecole Nationale de l'Aviation Civile (ENAC)"
+__license__ = "GPLv3"
+
+import logging
+
+from argaze import DataFeatures, GazeFeatures
+from argaze.utils import UtilsFeatures
+
+@DataFeatures.timestamp
+@DataFeatures.metrics
+class ScanPathMetrics:
+
+ duration: float
+ """Path duration (ms)"""
+
+ steps: int
+ """Number of steps"""
+
+ k: float
+ """K Coefficient"""
+
+ nni: float
+ """Nearest Neighbor Index"""
+
+ xxr: float
+ """Explore / Exploit ratio"""
+
+class ScanPathAnalysisPlotter(DataFeatures.PipelineStepObject):
+
+ @DataFeatures.PipelineStepInit
+ def __init__(self, **kwargs):
+
+ self.__ts_metrics = DataFeatures.TimestampedObjectsList(ScanPathMetrics)
+
+ def on_look(self, timestamp, frame, exception):
+ """Plot frame scan path metrics."""
+
+ if frame.is_analysis_available():
+
+ analysis = frame.analysis()
+
+ metrics = ScanPathMetrics(
+ analysis['argaze.GazeAnalysis.Basic.ScanPathAnalyzer'].path_duration,
+ analysis['argaze.GazeAnalysis.Basic.ScanPathAnalyzer'].steps_number,
+ analysis['argaze.GazeAnalysis.KCoefficient.ScanPathAnalyzer'].K,
+ analysis['argaze.GazeAnalysis.NearestNeighborIndex.ScanPathAnalyzer'].nearest_neighbor_index,
+ analysis['argaze.GazeAnalysis.ExploreExploitRatio.ScanPathAnalyzer'].explore_exploit_ratio,
+ timestamp=timestamp
+ )
+
+ self.__ts_metrics.append(metrics)
+
+ # DEBUG
+ print(self.__ts_metrics.as_dataframe())
+'''
+class AOIScanPathAnalysisPlotter(UtilsFeatures.FileWriter):
+
+ def __init__(self, **kwargs):
+
+ super().__init__(**kwargs)
+
+ self.header = "Timestamp (ms)", "Duration (ms)", "Step", "K", "LZC"
+
+ logging.info('%s writes into %s', DataFeatures.get_class_path(self), self.path)
+
+ def on_look(self, timestamp, layer, exception):
+ """Log layer aoi scan path metrics"""
+
+ if layer.is_analysis_available():
+
+ analysis = layer.analysis()
+
+ log = (
+ timestamp,
+ analysis['argaze.GazeAnalysis.Basic.AOIScanPathAnalyzer'].path_duration,
+ analysis['argaze.GazeAnalysis.Basic.AOIScanPathAnalyzer'].steps_number,
+ analysis['argaze.GazeAnalysis.KCoefficient.AOIScanPathAnalyzer'].K,
+ analysis['argaze.GazeAnalysis.LempelZivComplexity.AOIScanPathAnalyzer'].lempel_ziv_complexity
+ )
+
+ self.write(log)
+''' \ No newline at end of file