aboutsummaryrefslogtreecommitdiff
path: root/docs/user_guide/gaze_analysis_pipeline/advanced_topics/gaze_position_calibration.md
blob: 4d2780ad09d7d42ceadfac4a8cd7aae114352409 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Calibrate gaze position
=======================

Gaze position calibration is an optional [ArFrame](../../../argaze.md/#argaze.ArFeatures.ArFrame) pipeline step. It processes each new gaze position before any further pipeline steps.

The calibration algorithm can be selected by instantiating a particular [GazePositionCalibrator from GazeAnalysis submodule](../pipeline_modules/gaze_position_calibrators.md) or [from another Python package](module_loading.md).

## Enable ArFrame calibration

Gaze position calibration can be enabled thanks to a dedicated JSON entry.

Here is an extract from the JSON ArFrame configuration file where a [Linear Regression](../../../argaze.md/#argaze.GazeAnalysis.LinearRegression) calibration algorithm is selected with no parameters:

```json
{
    "name": "My FullHD screen",
    "size": [1920, 1080],
    ...
    "gaze_position_calibrator": {
        "LinearRegression": {}
    },
    ...
```
!!! note
    When a [GazePositionCalibrator](../../../argaze.md/#argaze.GazeFeatures.GazePositionCalibrator) is instantiated, each gaze position passed to [ArFrame.look](../../../argaze.md/#argaze.ArFeatures.ArFrame.look) method will be transformed before gaze movement identification step.

## Edit calibration parameters

```python
# Assuming the ArFrame is loaded
...

    # Start calibration process
    ar_frame.gaze_position_calibrator.reset()

    # Assuming that expected and observed gaze positions are available
    ...

        # If calibration process started
        if ar_frame.gaze_position_calibrator.is_calibrating():

            # Store calibration data
            ar_frame.gaze_position_calibrator.store(timestamp, observed_gaze_position, expected_gaze_position)

    # End calibration process
    score = ar_frame.gaze_position_calibrator.calibrate()
```

## Save calibration parameters as JSON file

Calibration parameters can be save as JSON file:

```python
ar_frame.gaze_position_calibrator.to_json('calibration.json')
```

Here is the saved JSON file where calibration parameters are stored:

```json
{
    "argaze.GazeAnalysis.LinearRegression": {
        "coefficients": [
            [
                0.901167941442693,
                0.0345129853595345
            ],
            [
                0.11551395622739168,
                0.9315744785596141
            ]
        ],
        "intercept": [
            65.43372920399452,
            -52.23141937917768
        ]
    }
}
```

## Load calibration parameters file

Saved calibration parameters can be loaded from JSON ArFrame configuration file:

```json
{
    "name": "My FullHD screen",
    "size": [1920, 1080],
    ...
    "gaze_position_calibrator": "calibration.json"
    ...
```

They also can be loaded from Python script:

```python
ar_frame.gaze_position_calibrator.from_json('calibration.json')
```