Project 3D AOI in the camera frame

Once the ArUcoScene pose is estimated and 3D AOI are described, they can be projected in the ArUcoCamera frame.

3D AOI projection

Add ArLayer to ArUcoScene to load 3D AOI

The ArLayer class allows you to load 3D AOI descriptions.

Here is the previous extract, where one layer is added to ArUcoScene configuration:

{
    "argaze.ArUcoMarker.ArUcoCamera.ArUcoCamera": {
        "name": "My FullHD camera",
        "size": [1920, 1080],
        ...
        "scenes": {
            "MyScene" : {
                "aruco_markers_group": {
                    ...
                },
                "layers": {
                    "MyLayer": {
                        "aoi_scene": {
                            "Left_Screen": [[0, 0, 0], [15, 0, 0], [0, 18.963333, -6.355470], [15, 18.963333, -6.355470]],
                            "Right_Screen": [[20, 0, 0], [35, 0, 0], [20, 18.963337, -6.355472], [35, 18.963337, -6.355472]],
                            "Control_Panel": [[49.5, 30, 18.333333], [55.5, 30, 18.333333], [49.5, 38, 18.333333], [55.5, 38, 18.333333]],
                            "Window": [[-57.8, 5.5, -33.5], [46, 15.5, -35], [1.5, 53, -1], [50.2, 61, 6], [-35.85, 35, -15]]
                        }
                    }
                } 
            }
        }
        ...
    }
}

Now, let's understand the meaning of each JSON entry.

layers

An ArUcoScene instance can contain multiples ArLayers stored by name.

MyLayer

The name of an ArLayer. Basically, it is useful for visualization purposes.

aoi_scene

The set of 3D AOI into the layer, as defined in the 3D AOI description chapter.

Add ArLayer to ArUcoCamera to project 3D AOI into

Here is the previous extract, where one layer is added to the ArUcoCamera configuration and displayed:

{
    "argaze.ArUcoMarker.ArUcoCamera.ArUcoCamera": {
        "name": "My FullHD camera",
        "size": [1920, 1080],
        ...
        "scenes": {
            "MyScene" : {
                "aruco_markers_group": {
                    ...
                },
                "layers": {
                     "MyLayer": {
                        "aoi_scene": {
                            ...
                        }
                    } 
                } 
            }
        },
        "layers": {
            "MyLayer": {}
        }
        ...
        "image_parameters": {
            ...
            "draw_layers": {
                "MyLayer": {
                    "draw_aoi_scene": {
                        "draw_aoi": {
                            "color": [255, 255, 255],
                            "border_size": 1
                        }
                    }
                }
            }
        }
    }
}

Now, let's understand the meaning of each JSON entry.

layers

An ArUcoCamera instance can contain multiples ArLayers stored by name.

MyLayer

The name of an ArLayer. Basically, it is useful for visualization purposes.

Layer name policy

An ArUcoScene layer is projected into an ArUcoCamera layer, provided they have the same name.

Note

ArUcoScene layers are projected into their dedicated ArUcoCamera layers when calling the ArUcoCamera.watch method.

Add AOI analysis features to ArUcoCamera layer

When a scene layer is projected into a camera layer, it means that the 3D scene's AOI are transformed into the 2D camera's AOI.

Therefore, it means that ArUcoCamera benefits from all the services described in the AOI analysis pipeline section.

Here is the previous extract, where AOI matcher, AOI scan path and AOI scan path analyzers were added to the ArUcoCamera layer:

{
    "argaze.ArUcoMarker.ArUcoCamera.ArUcoCamera": {
        "name": "My FullHD camera",
        "size": [1920, 1080],
        ...
        "scenes": {
            "MyScene" : {
                "aruco_markers_group": {
                    ...
                },
                "layers": {
                     "MyLayer": {
                        "aoi_scene": {
                            ...
                        }
                    } 
                } 
            }
        },
        "layers": {
            "MyLayer": {
                "aoi_matcher": {
                    "argaze.GazeAnalysis.DeviationCircleCoverage.AOIMatcher": {
                        "coverage_threshold": 0.5
                    }
                },
                "aoi_scan_path": {
                    "duration_max": 30000
                },
                "aoi_scan_path_analyzers": {
                    "argaze.GazeAnalysis.Basic.AOIScanPathAnalyzer": {},
                    "argaze.GazeAnalysis.TransitionMatrix.AOIScanPathAnalyzer": {},
                    "argaze.GazeAnalysis.NGram.AOIScanPathAnalyzer": {
                        "n_min": 3,
                        "n_max": 5
                    }
                }
            }
        }
        ...
    }
}

Warning

Adding scan path and scan path analyzers to an ArUcoCamera layer doesn't make sense, as the space viewed through the camera frame doesn't have to reflect the space the gaze is covering.