diff --git a/Python/OAK/datasets/oak-fcc-3/_0_capture.py b/Python/OAK/datasets/oak-fcc-3/_0_capture.py index e7970cf50..c6c984b4a 100644 --- a/Python/OAK/datasets/oak-fcc-3/_0_capture.py +++ b/Python/OAK/datasets/oak-fcc-3/_0_capture.py @@ -407,8 +407,9 @@ def main(): "camera_params_json": args.module_calibration_json, "note": "autosave", "raw_preview_reference_camera": preview_source_id, + "patch_normalization_result": cam.get_last_patch_normalization_result() } - + save_sample( session_dir, frame_type=frame_type_save, @@ -469,6 +470,7 @@ def main(): "camera_params_json": args.module_calibration_json, "note": "manual", "raw_preview_reference_camera": preview_source_id, + "patch_normalization_result": cam.get_last_patch_normalization_result() } save_sample( diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.json b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.json index 30a43edbd..c8f9a650a 100644 --- a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.json +++ b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.json @@ -1,6 +1,6 @@ { "schema": "multispec_flatfield_v1", - "created_at": "2026-05-06 10:14:01", + "created_at": "2026-05-06 13:37:25", "sensor_width": 1280, "sensor_height": 800, "bayer_pattern": "RGGB", @@ -32,7 +32,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -41,7 +41,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -57,13 +57,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -76,13 +76,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -97,7 +97,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -106,7 +106,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -122,13 +122,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -141,13 +141,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -162,7 +162,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -171,7 +171,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -187,13 +187,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -206,13 +206,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -227,7 +227,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -236,7 +236,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -252,13 +252,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -271,13 +271,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -292,7 +292,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -301,7 +301,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -317,13 +317,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -336,13 +336,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -357,7 +357,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -366,7 +366,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -382,13 +382,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -401,13 +401,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -422,7 +422,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -431,7 +431,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1642, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -447,13 +447,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -466,13 +466,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4392, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -487,7 +487,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -496,7 +496,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -512,13 +512,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -531,13 +531,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -552,7 +552,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -561,7 +561,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -577,13 +577,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -596,13 +596,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -617,7 +617,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -626,7 +626,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -642,13 +642,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -661,13 +661,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -682,7 +682,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -691,7 +691,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -707,13 +707,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -726,13 +726,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -747,7 +747,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -756,7 +756,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -772,13 +772,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -791,13 +791,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -812,7 +812,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -821,7 +821,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -837,13 +837,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -856,13 +856,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -877,7 +877,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -886,7 +886,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -902,13 +902,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -921,13 +921,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -942,7 +942,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -951,7 +951,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -967,13 +967,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -986,13 +986,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1007,7 +1007,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1016,7 +1016,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1032,13 +1032,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1051,13 +1051,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1072,7 +1072,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1081,7 +1081,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1097,13 +1097,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1116,13 +1116,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1137,7 +1137,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1146,7 +1146,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1162,13 +1162,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1181,13 +1181,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1202,7 +1202,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1211,7 +1211,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1227,13 +1227,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1246,13 +1246,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1267,7 +1267,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1276,7 +1276,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1292,13 +1292,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1311,13 +1311,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1332,7 +1332,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1341,7 +1341,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1357,13 +1357,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1376,13 +1376,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1397,7 +1397,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1406,7 +1406,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1422,13 +1422,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1441,13 +1441,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1462,7 +1462,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1471,7 +1471,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1487,13 +1487,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1506,13 +1506,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4297, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1527,7 +1527,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1536,7 +1536,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1552,13 +1552,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1571,13 +1571,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1592,7 +1592,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1601,7 +1601,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1617,13 +1617,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1636,13 +1636,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1657,7 +1657,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1666,7 +1666,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1682,13 +1682,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1701,13 +1701,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1722,7 +1722,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1731,7 +1731,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1747,13 +1747,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1766,13 +1766,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1787,7 +1787,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1796,7 +1796,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1812,13 +1812,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1831,13 +1831,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1852,7 +1852,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1861,7 +1861,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1877,13 +1877,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1896,13 +1896,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1917,7 +1917,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1926,7 +1926,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1942,13 +1942,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1961,13 +1961,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -1982,7 +1982,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -1991,7 +1991,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2007,13 +2007,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2026,13 +2026,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2047,7 +2047,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2056,7 +2056,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2072,13 +2072,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2091,13 +2091,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2112,7 +2112,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2121,7 +2121,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1547, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2137,13 +2137,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2156,13 +2156,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2177,7 +2177,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2186,7 +2186,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2202,13 +2202,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2221,13 +2221,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2242,7 +2242,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2251,7 +2251,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2267,13 +2267,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2286,13 +2286,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2307,7 +2307,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2316,7 +2316,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2332,13 +2332,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2351,13 +2351,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2372,7 +2372,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2381,7 +2381,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2397,13 +2397,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2416,13 +2416,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2437,7 +2437,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2446,7 +2446,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2462,13 +2462,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2481,13 +2481,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2502,7 +2502,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2511,7 +2511,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2527,13 +2527,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2546,13 +2546,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2567,7 +2567,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2576,7 +2576,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2592,13 +2592,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2611,13 +2611,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2632,7 +2632,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2641,7 +2641,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2657,13 +2657,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2676,13 +2676,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2697,7 +2697,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2706,7 +2706,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2722,13 +2722,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2741,13 +2741,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2762,7 +2762,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2771,7 +2771,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2787,13 +2787,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2806,13 +2806,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2827,7 +2827,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2836,7 +2836,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2852,13 +2852,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2871,13 +2871,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2892,7 +2892,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2901,7 +2901,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2917,13 +2917,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2936,13 +2936,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -2957,7 +2957,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2966,7 +2966,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -2982,13 +2982,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3001,13 +3001,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3022,7 +3022,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3031,7 +3031,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3047,13 +3047,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3066,13 +3066,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3087,7 +3087,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3096,7 +3096,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3112,13 +3112,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3131,13 +3131,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3152,7 +3152,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3161,7 +3161,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3177,13 +3177,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3196,13 +3196,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3217,7 +3217,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3226,7 +3226,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3242,13 +3242,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3261,13 +3261,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3282,7 +3282,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3291,7 +3291,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3307,13 +3307,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3326,13 +3326,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3347,7 +3347,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3356,7 +3356,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3372,13 +3372,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3391,13 +3391,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3412,7 +3412,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3421,7 +3421,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3437,13 +3437,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3456,13 +3456,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3477,7 +3477,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3486,7 +3486,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3502,13 +3502,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3521,13 +3521,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3542,7 +3542,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3551,7 +3551,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3567,13 +3567,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3586,13 +3586,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3607,7 +3607,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3616,7 +3616,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3632,13 +3632,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3651,13 +3651,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3672,7 +3672,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3681,7 +3681,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3697,13 +3697,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3716,13 +3716,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3737,7 +3737,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3746,7 +3746,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3762,13 +3762,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3781,13 +3781,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3802,7 +3802,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3811,7 +3811,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3827,13 +3827,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3846,13 +3846,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3867,7 +3867,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3876,7 +3876,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3892,13 +3892,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3911,13 +3911,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3932,7 +3932,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3941,7 +3941,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -3957,13 +3957,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3976,13 +3976,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -3997,7 +3997,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4006,7 +4006,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4022,13 +4022,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4041,13 +4041,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4062,7 +4062,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4071,7 +4071,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4087,13 +4087,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4106,13 +4106,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4127,7 +4127,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4136,7 +4136,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4152,13 +4152,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4171,13 +4171,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4192,7 +4192,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4201,7 +4201,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4217,13 +4217,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4236,13 +4236,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4257,7 +4257,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4266,7 +4266,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4282,13 +4282,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4301,13 +4301,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4322,7 +4322,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4331,7 +4331,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4347,13 +4347,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4366,13 +4366,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4387,7 +4387,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4396,7 +4396,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4412,13 +4412,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4431,13 +4431,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4452,7 +4452,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4461,7 +4461,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4477,13 +4477,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4496,13 +4496,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4517,7 +4517,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4526,7 +4526,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4542,13 +4542,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4561,13 +4561,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4582,7 +4582,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4591,7 +4591,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4607,13 +4607,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4626,13 +4626,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4647,7 +4647,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4656,7 +4656,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4672,13 +4672,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4691,13 +4691,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4712,7 +4712,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4721,7 +4721,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4737,13 +4737,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4756,13 +4756,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4777,7 +4777,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4786,7 +4786,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4802,13 +4802,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4821,13 +4821,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4842,7 +4842,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4851,7 +4851,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4867,13 +4867,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4886,13 +4886,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4907,7 +4907,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4916,7 +4916,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4932,13 +4932,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4951,13 +4951,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -4972,7 +4972,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4981,7 +4981,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -4997,13 +4997,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5016,13 +5016,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5037,7 +5037,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5046,7 +5046,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1464, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5062,13 +5062,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5081,13 +5081,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5102,7 +5102,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5111,7 +5111,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5127,13 +5127,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5146,13 +5146,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5167,7 +5167,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5176,7 +5176,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5192,13 +5192,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5211,13 +5211,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5232,7 +5232,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5241,7 +5241,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5257,13 +5257,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5276,13 +5276,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5297,7 +5297,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5306,7 +5306,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5322,13 +5322,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5341,13 +5341,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5362,7 +5362,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5371,7 +5371,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5387,13 +5387,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5406,13 +5406,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5427,7 +5427,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5436,7 +5436,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5452,13 +5452,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5471,13 +5471,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5492,7 +5492,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5501,7 +5501,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5517,13 +5517,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5536,13 +5536,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5557,7 +5557,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5566,7 +5566,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5582,13 +5582,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5601,13 +5601,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5622,7 +5622,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5631,7 +5631,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5647,13 +5647,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5666,13 +5666,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5687,7 +5687,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5696,7 +5696,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5712,13 +5712,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5731,13 +5731,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5752,7 +5752,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5761,7 +5761,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5777,13 +5777,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5796,13 +5796,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5817,7 +5817,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5826,7 +5826,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5842,13 +5842,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5861,13 +5861,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5882,7 +5882,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5891,7 +5891,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5907,13 +5907,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5926,13 +5926,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5947,7 +5947,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5956,7 +5956,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -5972,13 +5972,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -5991,13 +5991,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6012,7 +6012,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6021,7 +6021,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6037,13 +6037,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6056,13 +6056,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6077,7 +6077,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6086,7 +6086,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6102,13 +6102,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6121,13 +6121,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6142,7 +6142,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6151,7 +6151,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6167,13 +6167,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6186,13 +6186,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6207,7 +6207,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6216,7 +6216,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6232,13 +6232,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6251,13 +6251,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6272,7 +6272,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6281,7 +6281,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6297,13 +6297,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6316,13 +6316,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6337,7 +6337,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6346,7 +6346,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6362,13 +6362,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6381,13 +6381,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6402,7 +6402,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6411,7 +6411,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6427,13 +6427,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6446,13 +6446,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6467,7 +6467,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6476,7 +6476,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 1379, + "exposure_time_us": 1624, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -6492,13 +6492,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6511,13 +6511,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4217, + "exposure_time_us": 4085, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -6529,1003 +6529,1003 @@ ], "meta_log": [ { - "frame_id": 64, + "frame_id": 1107, "sync_ok": true, - "sync_dt_ms": 7.129000034183264, + "sync_dt_ms": 7.988000055775046, "timestamps": { - "CAM_A": 338418.878651, - "CAM_B": 338418.88578, - "CAM_C": 338418.885769 + "CAM_A": 350724.534243, + "CAM_B": 350724.542231, + "CAM_C": 350724.54197 } }, { - "frame_id": 65, + "frame_id": 1108, "sync_ok": true, - "sync_dt_ms": 7.131999998819083, + "sync_dt_ms": 7.990000012796372, "timestamps": { - "CAM_A": 338418.97865, - "CAM_B": 338418.985782, - "CAM_C": 338418.98577 + "CAM_A": 350724.634242, + "CAM_B": 350724.642232, + "CAM_C": 350724.64197 } }, { - "frame_id": 66, + "frame_id": 1109, + "sync_ok": true, + "sync_dt_ms": 7.9910000204108655, + "timestamps": { + "CAM_A": 350724.800908, + "CAM_B": 350724.808899, + "CAM_C": 350724.808637 + } + }, + { + "frame_id": 1110, + "sync_ok": true, + "sync_dt_ms": 7.990999962203205, + "timestamps": { + "CAM_A": 350724.900908, + "CAM_B": 350724.908899, + "CAM_C": 350724.908637 + } + }, + { + "frame_id": 1111, + "sync_ok": true, + "sync_dt_ms": 7.992999977432191, + "timestamps": { + "CAM_A": 350725.03424, + "CAM_B": 350725.042233, + "CAM_C": 350725.041972 + } + }, + { + "frame_id": 1112, + "sync_ok": true, + "sync_dt_ms": 7.993000035639852, + "timestamps": { + "CAM_A": 350725.13424, + "CAM_B": 350725.142233, + "CAM_C": 350725.141973 + } + }, + { + "frame_id": 1113, + "sync_ok": true, + "sync_dt_ms": 7.994999992661178, + "timestamps": { + "CAM_A": 350725.300906, + "CAM_B": 350725.308901, + "CAM_C": 350725.308638 + } + }, + { + "frame_id": 1114, + "sync_ok": true, + "sync_dt_ms": 7.9960000002756715, + "timestamps": { + "CAM_A": 350725.400905, + "CAM_B": 350725.408901, + "CAM_C": 350725.40864 + } + }, + { + "frame_id": 1115, + "sync_ok": true, + "sync_dt_ms": 7.997000007890165, + "timestamps": { + "CAM_A": 350725.534238, + "CAM_B": 350725.542235, + "CAM_C": 350725.541973 + } + }, + { + "frame_id": 1116, + "sync_ok": true, + "sync_dt_ms": 7.998000015504658, + "timestamps": { + "CAM_A": 350725.667571, + "CAM_B": 350725.675569, + "CAM_C": 350725.675307 + } + }, + { + "frame_id": 1117, + "sync_ok": true, + "sync_dt_ms": 7.999000023119152, + "timestamps": { + "CAM_A": 350725.834237, + "CAM_B": 350725.842236, + "CAM_C": 350725.841973 + } + }, + { + "frame_id": 1118, + "sync_ok": true, + "sync_dt_ms": 8.001000038348138, + "timestamps": { + "CAM_A": 350725.967569, + "CAM_B": 350725.97557, + "CAM_C": 350725.975307 + } + }, + { + "frame_id": 1119, + "sync_ok": true, + "sync_dt_ms": 8.002000045962632, + "timestamps": { + "CAM_A": 350726.100902, + "CAM_B": 350726.108904, + "CAM_C": 350726.108639 + } + }, + { + "frame_id": 1120, + "sync_ok": true, + "sync_dt_ms": 8.00199998775497, + "timestamps": { + "CAM_A": 350726.200902, + "CAM_B": 350726.208904, + "CAM_C": 350726.208639 + } + }, + { + "frame_id": 1121, "sync_ok": false, - "sync_dt_ms": 40.452999994158745, + "sync_dt_ms": 41.07199999270961, "timestamps": { - "CAM_A": 338419.07865, - "CAM_B": 338419.085781, - "CAM_C": 338419.119103 + "CAM_A": 350726.367567, + "CAM_B": 350726.375572, + "CAM_C": 350726.408639 } }, { - "frame_id": 67, + "frame_id": 1122, "sync_ok": true, - "sync_dt_ms": 7.131999998819083, + "sync_dt_ms": 8.006000018212944, "timestamps": { - "CAM_A": 338419.211983, - "CAM_B": 338419.219115, - "CAM_C": 338419.219104 + "CAM_A": 350726.5009, + "CAM_B": 350726.508906, + "CAM_C": 350726.508639 } }, { - "frame_id": 68, + "frame_id": 1123, + "sync_ok": true, + "sync_dt_ms": 8.006000018212944, + "timestamps": { + "CAM_A": 350726.634233, + "CAM_B": 350726.642239, + "CAM_C": 350726.641974 + } + }, + { + "frame_id": 1124, + "sync_ok": true, + "sync_dt_ms": 8.00799997523427, + "timestamps": { + "CAM_A": 350726.734232, + "CAM_B": 350726.74224, + "CAM_C": 350726.741974 + } + }, + { + "frame_id": 1125, + "sync_ok": true, + "sync_dt_ms": 8.009999990463257, + "timestamps": { + "CAM_A": 350726.934231, + "CAM_B": 350726.942241, + "CAM_C": 350726.941973 + } + }, + { + "frame_id": 1126, + "sync_ok": true, + "sync_dt_ms": 8.009999990463257, + "timestamps": { + "CAM_A": 350727.034231, + "CAM_B": 350727.042241, + "CAM_C": 350727.041974 + } + }, + { + "frame_id": 1127, + "sync_ok": true, + "sync_dt_ms": 8.012000005692244, + "timestamps": { + "CAM_A": 350727.167564, + "CAM_B": 350727.175576, + "CAM_C": 350727.175307 + } + }, + { + "frame_id": 1128, + "sync_ok": true, + "sync_dt_ms": 8.012000005692244, + "timestamps": { + "CAM_A": 350727.300897, + "CAM_B": 350727.308909, + "CAM_C": 350727.308641 + } + }, + { + "frame_id": 1129, + "sync_ok": true, + "sync_dt_ms": 8.013000013306737, + "timestamps": { + "CAM_A": 350727.467563, + "CAM_B": 350727.475576, + "CAM_C": 350727.475309 + } + }, + { + "frame_id": 1130, + "sync_ok": true, + "sync_dt_ms": 8.015000028535724, + "timestamps": { + "CAM_A": 350727.600895, + "CAM_B": 350727.60891, + "CAM_C": 350727.608642 + } + }, + { + "frame_id": 1131, + "sync_ok": true, + "sync_dt_ms": 8.014999970328063, + "timestamps": { + "CAM_A": 350727.700895, + "CAM_B": 350727.70891, + "CAM_C": 350727.708643 + } + }, + { + "frame_id": 1132, + "sync_ok": true, + "sync_dt_ms": 8.017999993171543, + "timestamps": { + "CAM_A": 350727.834227, + "CAM_B": 350727.842245, + "CAM_C": 350727.841975 + } + }, + { + "frame_id": 1133, + "sync_ok": true, + "sync_dt_ms": 8.017999993171543, + "timestamps": { + "CAM_A": 350728.000893, + "CAM_B": 350728.008911, + "CAM_C": 350728.008642 + } + }, + { + "frame_id": 1134, + "sync_ok": true, + "sync_dt_ms": 8.019000000786036, + "timestamps": { + "CAM_A": 350728.134226, + "CAM_B": 350728.142245, + "CAM_C": 350728.141975 + } + }, + { + "frame_id": 1135, + "sync_ok": true, + "sync_dt_ms": 8.02000000840053, + "timestamps": { + "CAM_A": 350728.267559, + "CAM_B": 350728.275579, + "CAM_C": 350728.27531 + } + }, + { + "frame_id": 1136, + "sync_ok": true, + "sync_dt_ms": 8.022000023629516, + "timestamps": { + "CAM_A": 350728.400891, + "CAM_B": 350728.408913, + "CAM_C": 350728.408642 + } + }, + { + "frame_id": 1137, "sync_ok": false, - "sync_dt_ms": 40.45499995118007, + "sync_dt_ms": 41.357000009156764, "timestamps": { - "CAM_A": 338419.378649, - "CAM_B": 338419.385782, - "CAM_C": 338419.419104 + "CAM_A": 350728.60089, + "CAM_B": 350728.642247, + "CAM_C": 350728.641976 } }, { - "frame_id": 69, - "sync_ok": true, - "sync_dt_ms": 7.132999948225915, - "timestamps": { - "CAM_A": 338419.511982, - "CAM_B": 338419.519115, - "CAM_C": 338419.519105 - } - }, - { - "frame_id": 70, - "sync_ok": true, - "sync_dt_ms": 7.135000021662563, - "timestamps": { - "CAM_A": 338419.611981, - "CAM_B": 338419.619116, - "CAM_C": 338419.619105 - } - }, - { - "frame_id": 71, + "frame_id": 1138, "sync_ok": false, - "sync_dt_ms": 40.45800003223121, + "sync_dt_ms": 41.08599998289719, "timestamps": { - "CAM_A": 338419.711981, - "CAM_B": 338419.719116, - "CAM_C": 338419.752439 + "CAM_A": 350728.734223, + "CAM_B": 350728.742248, + "CAM_C": 350728.775309 } }, { - "frame_id": 72, + "frame_id": 1139, "sync_ok": true, - "sync_dt_ms": 7.13700003689155, + "sync_dt_ms": 8.025999995879829, "timestamps": { - "CAM_A": 338419.91198, - "CAM_B": 338419.919117, - "CAM_C": 338419.919106 + "CAM_A": 350728.867556, + "CAM_B": 350728.875582, + "CAM_C": 350728.87531 } }, { - "frame_id": 73, + "frame_id": 1140, "sync_ok": true, - "sync_dt_ms": 7.13700003689155, + "sync_dt_ms": 8.027000003494322, "timestamps": { - "CAM_A": 338420.045313, - "CAM_B": 338420.05245, - "CAM_C": 338420.05244 + "CAM_A": 350728.967555, + "CAM_B": 350728.975582, + "CAM_C": 350728.975311 } }, { - "frame_id": 74, - "sync_ok": true, - "sync_dt_ms": 7.137999986298382, - "timestamps": { - "CAM_A": 338420.145313, - "CAM_B": 338420.152451, - "CAM_C": 338420.15244 - } - }, - { - "frame_id": 75, - "sync_ok": true, - "sync_dt_ms": 7.138999993912876, - "timestamps": { - "CAM_A": 338420.245312, - "CAM_B": 338420.252451, - "CAM_C": 338420.25244 - } - }, - { - "frame_id": 76, - "sync_ok": true, - "sync_dt_ms": 7.138999993912876, - "timestamps": { - "CAM_A": 338420.411979, - "CAM_B": 338420.419118, - "CAM_C": 338420.419107 - } - }, - { - "frame_id": 77, - "sync_ok": true, - "sync_dt_ms": 7.1409999509342015, - "timestamps": { - "CAM_A": 338420.545311, - "CAM_B": 338420.552452, - "CAM_C": 338420.552441 - } - }, - { - "frame_id": 78, - "sync_ok": true, - "sync_dt_ms": 7.141000009141862, - "timestamps": { - "CAM_A": 338420.645311, - "CAM_B": 338420.652452, - "CAM_C": 338420.652441 - } - }, - { - "frame_id": 79, - "sync_ok": true, - "sync_dt_ms": 7.142000016756356, - "timestamps": { - "CAM_A": 338420.745311, - "CAM_B": 338420.752453, - "CAM_C": 338420.752442 - } - }, - { - "frame_id": 80, - "sync_ok": true, - "sync_dt_ms": 7.142999966163188, - "timestamps": { - "CAM_A": 338420.911977, - "CAM_B": 338420.91912, - "CAM_C": 338420.919109 - } - }, - { - "frame_id": 81, + "frame_id": 1141, "sync_ok": false, - "sync_dt_ms": 40.46700004255399, + "sync_dt_ms": 41.36199998902157, "timestamps": { - "CAM_A": 338421.011976, - "CAM_B": 338421.01912, - "CAM_C": 338421.052443 + "CAM_A": 350729.134053, + "CAM_B": 350729.175415, + "CAM_C": 350729.175141 } }, { - "frame_id": 82, + "frame_id": 1142, "sync_ok": true, - "sync_dt_ms": 7.1440000319853425, + "sync_dt_ms": 8.028999960515648, "timestamps": { - "CAM_A": 338421.14531, - "CAM_B": 338421.152454, - "CAM_C": 338421.152443 + "CAM_A": 350729.267385, + "CAM_B": 350729.275414, + "CAM_C": 350729.275141 } }, { - "frame_id": 83, + "frame_id": 1143, "sync_ok": true, - "sync_dt_ms": 7.144999981392175, + "sync_dt_ms": 8.030000026337802, "timestamps": { - "CAM_A": 338421.245309, - "CAM_B": 338421.252454, - "CAM_C": 338421.252444 + "CAM_A": 350729.367385, + "CAM_B": 350729.375415, + "CAM_C": 350729.375142 } }, { - "frame_id": 84, + "frame_id": 1144, "sync_ok": true, - "sync_dt_ms": 7.146999996621162, + "sync_dt_ms": 8.030999975744635, "timestamps": { - "CAM_A": 338421.445308, - "CAM_B": 338421.452455, - "CAM_C": 338421.452444 + "CAM_A": 350729.500718, + "CAM_B": 350729.508749, + "CAM_C": 350729.508475 } }, { - "frame_id": 85, + "frame_id": 1145, "sync_ok": true, - "sync_dt_ms": 7.146999996621162, + "sync_dt_ms": 8.03200004156679, "timestamps": { - "CAM_A": 338421.545308, - "CAM_B": 338421.552455, - "CAM_C": 338421.552444 + "CAM_A": 350729.667384, + "CAM_B": 350729.675416, + "CAM_C": 350729.675142 } }, { - "frame_id": 86, - "sync_ok": true, - "sync_dt_ms": 7.148000004235655, - "timestamps": { - "CAM_A": 338421.678641, - "CAM_B": 338421.685789, - "CAM_C": 338421.685778 - } - }, - { - "frame_id": 87, - "sync_ok": true, - "sync_dt_ms": 7.149000011850148, - "timestamps": { - "CAM_A": 338421.778641, - "CAM_B": 338421.78579, - "CAM_C": 338421.785778 - } - }, - { - "frame_id": 88, - "sync_ok": true, - "sync_dt_ms": 7.149000011850148, - "timestamps": { - "CAM_A": 338421.945307, - "CAM_B": 338421.952456, - "CAM_C": 338421.952445 - } - }, - { - "frame_id": 89, - "sync_ok": true, - "sync_dt_ms": 7.153000042308122, - "timestamps": { - "CAM_A": 338422.045306, - "CAM_B": 338422.052459, - "CAM_C": 338422.052446 - } - }, - { - "frame_id": 90, - "sync_ok": true, - "sync_dt_ms": 7.151000027079135, - "timestamps": { - "CAM_A": 338422.17864, - "CAM_B": 338422.185791, - "CAM_C": 338422.185779 - } - }, - { - "frame_id": 91, - "sync_ok": true, - "sync_dt_ms": 7.150999968871474, - "timestamps": { - "CAM_A": 338422.278639, - "CAM_B": 338422.28579, - "CAM_C": 338422.28578 - } - }, - { - "frame_id": 92, - "sync_ok": true, - "sync_dt_ms": 7.151999976485968, - "timestamps": { - "CAM_A": 338422.378639, - "CAM_B": 338422.385791, - "CAM_C": 338422.38578 - } - }, - { - "frame_id": 93, - "sync_ok": true, - "sync_dt_ms": 7.153999991714954, - "timestamps": { - "CAM_A": 338422.545304, - "CAM_B": 338422.552458, - "CAM_C": 338422.552448 - } - }, - { - "frame_id": 94, - "sync_ok": true, - "sync_dt_ms": 7.153999991714954, - "timestamps": { - "CAM_A": 338422.645304, - "CAM_B": 338422.652458, - "CAM_C": 338422.652448 - } - }, - { - "frame_id": 95, - "sync_ok": true, - "sync_dt_ms": 7.153999991714954, - "timestamps": { - "CAM_A": 338422.745304, - "CAM_B": 338422.752458, - "CAM_C": 338422.752448 - } - }, - { - "frame_id": 96, - "sync_ok": true, - "sync_dt_ms": 7.168000040110201, - "timestamps": { - "CAM_A": 338422.878637, - "CAM_B": 338422.885805, - "CAM_C": 338422.885794 - } - }, - { - "frame_id": 97, - "sync_ok": true, - "sync_dt_ms": 7.156000006943941, - "timestamps": { - "CAM_A": 338422.945315, - "CAM_B": 338422.952471, - "CAM_C": 338422.952461 - } - }, - { - "frame_id": 98, + "frame_id": 1146, "sync_ok": false, - "sync_dt_ms": 40.489999984856695, + "sync_dt_ms": 41.367000027094036, "timestamps": { - "CAM_A": 338423.111982, - "CAM_B": 338423.152472, - "CAM_C": 338423.152461 + "CAM_A": 350729.767383, + "CAM_B": 350729.80875, + "CAM_C": 350729.808476 } }, { - "frame_id": 99, + "frame_id": 1147, + "sync_ok": true, + "sync_dt_ms": 8.033999998588115, + "timestamps": { + "CAM_A": 350729.900716, + "CAM_B": 350729.90875, + "CAM_C": 350729.908476 + } + }, + { + "frame_id": 1148, + "sync_ok": true, + "sync_dt_ms": 8.036000013817102, + "timestamps": { + "CAM_A": 350730.034048, + "CAM_B": 350730.042084, + "CAM_C": 350730.041809 + } + }, + { + "frame_id": 1149, + "sync_ok": true, + "sync_dt_ms": 8.038000029046088, + "timestamps": { + "CAM_A": 350730.200714, + "CAM_B": 350730.208752, + "CAM_C": 350730.208476 + } + }, + { + "frame_id": 1150, "sync_ok": false, - "sync_dt_ms": 40.481000032741576, + "sync_dt_ms": 41.096000000834465, "timestamps": { - "CAM_A": 338423.211981, - "CAM_B": 338423.219139, - "CAM_C": 338423.252462 + "CAM_A": 350730.300714, + "CAM_B": 350730.308752, + "CAM_C": 350730.34181 } }, { - "frame_id": 100, + "frame_id": 1151, "sync_ok": true, - "sync_dt_ms": 7.158000022172928, + "sync_dt_ms": 8.038999978452921, "timestamps": { - "CAM_A": 338423.345314, - "CAM_B": 338423.352472, - "CAM_C": 338423.352462 + "CAM_A": 350730.434047, + "CAM_B": 350730.442086, + "CAM_C": 350730.44181 } }, { - "frame_id": 101, + "frame_id": 1152, + "sync_ok": true, + "sync_dt_ms": 8.042000001296401, + "timestamps": { + "CAM_A": 350730.534046, + "CAM_B": 350730.542088, + "CAM_C": 350730.54181 + } + }, + { + "frame_id": 1153, + "sync_ok": true, + "sync_dt_ms": 8.043000008910894, + "timestamps": { + "CAM_A": 350730.734045, + "CAM_B": 350730.742088, + "CAM_C": 350730.74181 + } + }, + { + "frame_id": 1154, + "sync_ok": true, + "sync_dt_ms": 8.043999958317727, + "timestamps": { + "CAM_A": 350730.834045, + "CAM_B": 350730.842089, + "CAM_C": 350730.84181 + } + }, + { + "frame_id": 1155, + "sync_ok": true, + "sync_dt_ms": 8.045000024139881, + "timestamps": { + "CAM_A": 350730.934044, + "CAM_B": 350730.942089, + "CAM_C": 350730.94181 + } + }, + { + "frame_id": 1156, + "sync_ok": true, + "sync_dt_ms": 8.045999973546714, + "timestamps": { + "CAM_A": 350731.067377, + "CAM_B": 350731.075423, + "CAM_C": 350731.075144 + } + }, + { + "frame_id": 1157, + "sync_ok": true, + "sync_dt_ms": 8.047000039368868, + "timestamps": { + "CAM_A": 350731.234043, + "CAM_B": 350731.24209, + "CAM_C": 350731.241811 + } + }, + { + "frame_id": 1158, + "sync_ok": true, + "sync_dt_ms": 8.0479999887757, + "timestamps": { + "CAM_A": 350731.334042, + "CAM_B": 350731.34209, + "CAM_C": 350731.341811 + } + }, + { + "frame_id": 1159, + "sync_ok": true, + "sync_dt_ms": 8.048999996390194, + "timestamps": { + "CAM_A": 350731.467375, + "CAM_B": 350731.475424, + "CAM_C": 350731.475144 + } + }, + { + "frame_id": 1160, + "sync_ok": true, + "sync_dt_ms": 8.048999996390194, + "timestamps": { + "CAM_A": 350731.600708, + "CAM_B": 350731.608757, + "CAM_C": 350731.608478 + } + }, + { + "frame_id": 1161, + "sync_ok": true, + "sync_dt_ms": 8.05100001161918, + "timestamps": { + "CAM_A": 350731.767374, + "CAM_B": 350731.775425, + "CAM_C": 350731.775145 + } + }, + { + "frame_id": 1162, "sync_ok": false, - "sync_dt_ms": 40.48200004035607, + "sync_dt_ms": 41.384999989531934, "timestamps": { - "CAM_A": 338423.41198, - "CAM_B": 338423.419139, - "CAM_C": 338423.452462 + "CAM_A": 350731.867374, + "CAM_B": 350731.908759, + "CAM_C": 350731.908479 } }, { - "frame_id": 102, + "frame_id": 1163, "sync_ok": true, - "sync_dt_ms": 7.159999979194254, + "sync_dt_ms": 8.052999968640506, "timestamps": { - "CAM_A": 338423.51198, - "CAM_B": 338423.51914, - "CAM_C": 338423.519129 + "CAM_A": 350732.000706, + "CAM_B": 350732.008759, + "CAM_C": 350732.008479 } }, { - "frame_id": 103, + "frame_id": 1164, "sync_ok": true, - "sync_dt_ms": 7.160999986808747, + "sync_dt_ms": 8.05400003446266, "timestamps": { - "CAM_A": 338423.711979, - "CAM_B": 338423.71914, - "CAM_C": 338423.71913 + "CAM_A": 350732.100705, + "CAM_B": 350732.108759, + "CAM_C": 350732.108479 } }, { - "frame_id": 104, + "frame_id": 1165, "sync_ok": true, - "sync_dt_ms": 7.16199999442324, + "sync_dt_ms": 8.054999983869493, "timestamps": { - "CAM_A": 338423.811979, - "CAM_B": 338423.819141, - "CAM_C": 338423.81913 + "CAM_A": 350732.300705, + "CAM_B": 350732.30876, + "CAM_C": 350732.308479 } }, { - "frame_id": 105, - "sync_ok": true, - "sync_dt_ms": 7.163000002037734, - "timestamps": { - "CAM_A": 338423.911978, - "CAM_B": 338423.919141, - "CAM_C": 338423.91913 - } - }, - { - "frame_id": 106, - "sync_ok": true, - "sync_dt_ms": 7.164000009652227, - "timestamps": { - "CAM_A": 338424.011978, - "CAM_B": 338424.019142, - "CAM_C": 338424.01913 - } - }, - { - "frame_id": 107, - "sync_ok": true, - "sync_dt_ms": 7.164000009652227, - "timestamps": { - "CAM_A": 338424.111978, - "CAM_B": 338424.119142, - "CAM_C": 338424.119131 - } - }, - { - "frame_id": 108, - "sync_ok": true, - "sync_dt_ms": 7.1650000172667205, - "timestamps": { - "CAM_A": 338424.278644, - "CAM_B": 338424.285809, - "CAM_C": 338424.285798 - } - }, - { - "frame_id": 109, - "sync_ok": true, - "sync_dt_ms": 7.1650000172667205, - "timestamps": { - "CAM_A": 338424.378644, - "CAM_B": 338424.385809, - "CAM_C": 338424.385798 - } - }, - { - "frame_id": 110, - "sync_ok": true, - "sync_dt_ms": 7.166999974288046, - "timestamps": { - "CAM_A": 338424.478643, - "CAM_B": 338424.48581, - "CAM_C": 338424.485799 - } - }, - { - "frame_id": 111, - "sync_ok": true, - "sync_dt_ms": 7.167000032495707, - "timestamps": { - "CAM_A": 338424.578643, - "CAM_B": 338424.58581, - "CAM_C": 338424.585799 - } - }, - { - "frame_id": 112, - "sync_ok": true, - "sync_dt_ms": 7.166999974288046, - "timestamps": { - "CAM_A": 338424.678643, - "CAM_B": 338424.68581, - "CAM_C": 338424.685799 - } - }, - { - "frame_id": 113, - "sync_ok": true, - "sync_dt_ms": 7.16799998190254, - "timestamps": { - "CAM_A": 338424.845309, - "CAM_B": 338424.852477, - "CAM_C": 338424.852466 - } - }, - { - "frame_id": 114, - "sync_ok": true, - "sync_dt_ms": 7.1699999971315265, - "timestamps": { - "CAM_A": 338424.945308, - "CAM_B": 338424.952478, - "CAM_C": 338424.952467 - } - }, - { - "frame_id": 115, - "sync_ok": true, - "sync_dt_ms": 7.1699999971315265, - "timestamps": { - "CAM_A": 338425.045308, - "CAM_B": 338425.052478, - "CAM_C": 338425.052467 - } - }, - { - "frame_id": 116, - "sync_ok": true, - "sync_dt_ms": 7.1699999971315265, - "timestamps": { - "CAM_A": 338425.145308, - "CAM_B": 338425.152478, - "CAM_C": 338425.152468 - } - }, - { - "frame_id": 117, - "sync_ok": true, - "sync_dt_ms": 7.172000012360513, - "timestamps": { - "CAM_A": 338425.245307, - "CAM_B": 338425.252479, - "CAM_C": 338425.252468 - } - }, - { - "frame_id": 118, - "sync_ok": true, - "sync_dt_ms": 7.172000012360513, - "timestamps": { - "CAM_A": 338425.411974, - "CAM_B": 338425.419146, - "CAM_C": 338425.419135 - } - }, - { - "frame_id": 119, - "sync_ok": true, - "sync_dt_ms": 7.173999969381839, - "timestamps": { - "CAM_A": 338425.511973, - "CAM_B": 338425.519147, - "CAM_C": 338425.519135 - } - }, - { - "frame_id": 120, - "sync_ok": true, - "sync_dt_ms": 7.186000002548099, - "timestamps": { - "CAM_A": 338425.611972, - "CAM_B": 338425.619158, - "CAM_C": 338425.619135 - } - }, - { - "frame_id": 121, - "sync_ok": true, - "sync_dt_ms": 7.186000002548099, - "timestamps": { - "CAM_A": 338425.711972, - "CAM_B": 338425.719158, - "CAM_C": 338425.719136 - } - }, - { - "frame_id": 122, - "sync_ok": true, - "sync_dt_ms": 7.175999984610826, - "timestamps": { - "CAM_A": 338425.811972, - "CAM_B": 338425.819148, - "CAM_C": 338425.819136 - } - }, - { - "frame_id": 123, - "sync_ok": true, - "sync_dt_ms": 7.188000017777085, - "timestamps": { - "CAM_A": 338426.011971, - "CAM_B": 338426.019159, - "CAM_C": 338426.019137 - } - }, - { - "frame_id": 124, - "sync_ok": true, - "sync_dt_ms": 7.1779999998398125, - "timestamps": { - "CAM_A": 338426.111971, - "CAM_B": 338426.119149, - "CAM_C": 338426.119137 - } - }, - { - "frame_id": 125, - "sync_ok": true, - "sync_dt_ms": 7.189999974798411, - "timestamps": { - "CAM_A": 338426.21197, - "CAM_B": 338426.21916, - "CAM_C": 338426.219137 - } - }, - { - "frame_id": 126, - "sync_ok": true, - "sync_dt_ms": 7.190000033006072, - "timestamps": { - "CAM_A": 338426.31197, - "CAM_B": 338426.31916, - "CAM_C": 338426.319138 - } - }, - { - "frame_id": 127, - "sync_ok": true, - "sync_dt_ms": 7.189999974798411, - "timestamps": { - "CAM_A": 338426.41197, - "CAM_B": 338426.41916, - "CAM_C": 338426.419138 - } - }, - { - "frame_id": 128, - "sync_ok": true, - "sync_dt_ms": 7.191999990027398, - "timestamps": { - "CAM_A": 338426.578636, - "CAM_B": 338426.585828, - "CAM_C": 338426.585805 - } - }, - { - "frame_id": 129, - "sync_ok": true, - "sync_dt_ms": 7.191999990027398, - "timestamps": { - "CAM_A": 338426.678636, - "CAM_B": 338426.685828, - "CAM_C": 338426.685805 - } - }, - { - "frame_id": 130, - "sync_ok": true, - "sync_dt_ms": 7.192999997641891, - "timestamps": { - "CAM_A": 338426.778635, - "CAM_B": 338426.785828, - "CAM_C": 338426.785806 - } - }, - { - "frame_id": 131, - "sync_ok": true, - "sync_dt_ms": 7.193000055849552, - "timestamps": { - "CAM_A": 338426.878635, - "CAM_B": 338426.885828, - "CAM_C": 338426.885806 - } - }, - { - "frame_id": 132, - "sync_ok": true, - "sync_dt_ms": 7.194000005256385, - "timestamps": { - "CAM_A": 338426.978635, - "CAM_B": 338426.985829, - "CAM_C": 338426.985806 - } - }, - { - "frame_id": 133, - "sync_ok": true, - "sync_dt_ms": 7.196000020485371, - "timestamps": { - "CAM_A": 338427.145301, - "CAM_B": 338427.152497, - "CAM_C": 338427.152474 - } - }, - { - "frame_id": 134, - "sync_ok": true, - "sync_dt_ms": 7.19599996227771, - "timestamps": { - "CAM_A": 338427.2453, - "CAM_B": 338427.252496, - "CAM_C": 338427.252474 - } - }, - { - "frame_id": 135, - "sync_ok": true, - "sync_dt_ms": 7.196000020485371, - "timestamps": { - "CAM_A": 338427.3453, - "CAM_B": 338427.352496, - "CAM_C": 338427.352474 - } - }, - { - "frame_id": 136, - "sync_ok": true, - "sync_dt_ms": 7.197999977506697, - "timestamps": { - "CAM_A": 338427.445299, - "CAM_B": 338427.452497, - "CAM_C": 338427.452475 - } - }, - { - "frame_id": 137, - "sync_ok": true, - "sync_dt_ms": 7.198000035714358, - "timestamps": { - "CAM_A": 338427.545299, - "CAM_B": 338427.552497, - "CAM_C": 338427.552475 - } - }, - { - "frame_id": 138, - "sync_ok": true, - "sync_dt_ms": 7.1989999851211905, - "timestamps": { - "CAM_A": 338427.711965, - "CAM_B": 338427.719164, - "CAM_C": 338427.719142 - } - }, - { - "frame_id": 139, - "sync_ok": true, - "sync_dt_ms": 7.199999992735684, - "timestamps": { - "CAM_A": 338427.811965, - "CAM_B": 338427.819165, - "CAM_C": 338427.819142 - } - }, - { - "frame_id": 140, - "sync_ok": true, - "sync_dt_ms": 7.201000000350177, - "timestamps": { - "CAM_A": 338427.911964, - "CAM_B": 338427.919165, - "CAM_C": 338427.919143 - } - }, - { - "frame_id": 141, - "sync_ok": true, - "sync_dt_ms": 7.202000007964671, - "timestamps": { - "CAM_A": 338428.045297, - "CAM_B": 338428.052499, - "CAM_C": 338428.052476 - } - }, - { - "frame_id": 142, - "sync_ok": true, - "sync_dt_ms": 7.202000007964671, - "timestamps": { - "CAM_A": 338428.111964, - "CAM_B": 338428.119166, - "CAM_C": 338428.119143 - } - }, - { - "frame_id": 143, - "sync_ok": true, - "sync_dt_ms": 7.203000015579164, - "timestamps": { - "CAM_A": 338428.311963, - "CAM_B": 338428.319166, - "CAM_C": 338428.319144 - } - }, - { - "frame_id": 144, - "sync_ok": true, - "sync_dt_ms": 7.202999957371503, - "timestamps": { - "CAM_A": 338428.411963, - "CAM_B": 338428.419166, - "CAM_C": 338428.419144 - } - }, - { - "frame_id": 145, - "sync_ok": true, - "sync_dt_ms": 7.205000030808151, - "timestamps": { - "CAM_A": 338428.511962, - "CAM_B": 338428.519167, - "CAM_C": 338428.519144 - } - }, - { - "frame_id": 146, - "sync_ok": true, - "sync_dt_ms": 7.20499997260049, - "timestamps": { - "CAM_A": 338428.611962, - "CAM_B": 338428.619167, - "CAM_C": 338428.619145 - } - }, - { - "frame_id": 147, - "sync_ok": true, - "sync_dt_ms": 7.20499997260049, - "timestamps": { - "CAM_A": 338428.711962, - "CAM_B": 338428.719167, - "CAM_C": 338428.719145 - } - }, - { - "frame_id": 148, + "frame_id": 1166, "sync_ok": false, - "sync_dt_ms": 40.5400000163354, + "sync_dt_ms": 41.38900001998991, "timestamps": { - "CAM_A": 338428.878628, - "CAM_B": 338428.919168, - "CAM_C": 338428.919146 + "CAM_A": 350732.400705, + "CAM_B": 350732.442094, + "CAM_C": 350732.441812 } }, { - "frame_id": 149, + "frame_id": 1167, "sync_ok": true, - "sync_dt_ms": 7.2070000460371375, + "sync_dt_ms": 8.058000006712973, "timestamps": { - "CAM_A": 338429.011961, - "CAM_B": 338429.019168, - "CAM_C": 338429.019146 + "CAM_A": 350732.534037, + "CAM_B": 350732.542095, + "CAM_C": 350732.541814 } }, { - "frame_id": 150, + "frame_id": 1168, "sync_ok": true, - "sync_dt_ms": 7.20799999544397, + "sync_dt_ms": 8.058000006712973, "timestamps": { - "CAM_A": 338429.111961, - "CAM_B": 338429.119169, - "CAM_C": 338429.119146 + "CAM_A": 350732.66737, + "CAM_B": 350732.675428, + "CAM_C": 350732.675146 } }, { - "frame_id": 151, - "sync_ok": true, - "sync_dt_ms": 7.209000003058463, - "timestamps": { - "CAM_A": 338429.21196, - "CAM_B": 338429.219169, - "CAM_C": 338429.219147 - } - }, - { - "frame_id": 152, - "sync_ok": true, - "sync_dt_ms": 7.210000010672957, - "timestamps": { - "CAM_A": 338429.311959, - "CAM_B": 338429.319169, - "CAM_C": 338429.319147 - } - }, - { - "frame_id": 153, - "sync_ok": true, - "sync_dt_ms": 7.210000010672957, - "timestamps": { - "CAM_A": 338429.478626, - "CAM_B": 338429.485836, - "CAM_C": 338429.485814 - } - }, - { - "frame_id": 154, - "sync_ok": true, - "sync_dt_ms": 7.2119999676942825, - "timestamps": { - "CAM_A": 338429.578625, - "CAM_B": 338429.585837, - "CAM_C": 338429.585814 - } - }, - { - "frame_id": 155, - "sync_ok": true, - "sync_dt_ms": 7.212999975308776, - "timestamps": { - "CAM_A": 338429.678625, - "CAM_B": 338429.685838, - "CAM_C": 338429.685815 - } - }, - { - "frame_id": 156, - "sync_ok": true, - "sync_dt_ms": 7.2120000259019434, - "timestamps": { - "CAM_A": 338429.778625, - "CAM_B": 338429.785837, - "CAM_C": 338429.785815 - } - }, - { - "frame_id": 157, - "sync_ok": true, - "sync_dt_ms": 7.213000033516437, - "timestamps": { - "CAM_A": 338429.845291, - "CAM_B": 338429.852504, - "CAM_C": 338429.852482 - } - }, - { - "frame_id": 158, - "sync_ok": true, - "sync_dt_ms": 7.21400004113093, - "timestamps": { - "CAM_A": 338430.045291, - "CAM_B": 338430.052505, - "CAM_C": 338430.052482 - } - }, - { - "frame_id": 159, - "sync_ok": true, - "sync_dt_ms": 7.214999990537763, - "timestamps": { - "CAM_A": 338430.14529, - "CAM_B": 338430.152505, - "CAM_C": 338430.152483 - } - }, - { - "frame_id": 160, - "sync_ok": true, - "sync_dt_ms": 7.215999998152256, - "timestamps": { - "CAM_A": 338430.24529, - "CAM_B": 338430.252506, - "CAM_C": 338430.252483 - } - }, - { - "frame_id": 161, - "sync_ok": true, - "sync_dt_ms": 7.215999998152256, - "timestamps": { - "CAM_A": 338430.345289, - "CAM_B": 338430.352505, - "CAM_C": 338430.352483 - } - }, - { - "frame_id": 162, - "sync_ok": true, - "sync_dt_ms": 7.2200000286102295, - "timestamps": { - "CAM_A": 338430.445289, - "CAM_B": 338430.452509, - "CAM_C": 338430.452484 - } - }, - { - "frame_id": 163, + "frame_id": 1169, "sync_ok": false, - "sync_dt_ms": 40.551000041887164, + "sync_dt_ms": 41.10999999102205, "timestamps": { - "CAM_A": 338430.611742, - "CAM_B": 338430.652293, - "CAM_C": 338430.652271 + "CAM_A": 350732.834036, + "CAM_B": 350732.842095, + "CAM_C": 350732.875146 + } + }, + { + "frame_id": 1170, + "sync_ok": true, + "sync_dt_ms": 8.061999978963286, + "timestamps": { + "CAM_A": 350732.967368, + "CAM_B": 350732.97543, + "CAM_C": 350732.975147 + } + }, + { + "frame_id": 1171, + "sync_ok": true, + "sync_dt_ms": 8.062999986577779, + "timestamps": { + "CAM_A": 350733.100701, + "CAM_B": 350733.108764, + "CAM_C": 350733.10848 + } + }, + { + "frame_id": 1172, + "sync_ok": true, + "sync_dt_ms": 8.063999994192272, + "timestamps": { + "CAM_A": 350733.2007, + "CAM_B": 350733.208764, + "CAM_C": 350733.208481 + } + }, + { + "frame_id": 1173, + "sync_ok": false, + "sync_dt_ms": 41.39899997971952, + "timestamps": { + "CAM_A": 350733.367366, + "CAM_B": 350733.408765, + "CAM_C": 350733.408481 + } + }, + { + "frame_id": 1174, + "sync_ok": true, + "sync_dt_ms": 8.065999951213598, + "timestamps": { + "CAM_A": 350733.500699, + "CAM_B": 350733.508765, + "CAM_C": 350733.508481 + } + }, + { + "frame_id": 1175, + "sync_ok": true, + "sync_dt_ms": 8.067000017035753, + "timestamps": { + "CAM_A": 350733.634032, + "CAM_B": 350733.642099, + "CAM_C": 350733.641824 + } + }, + { + "frame_id": 1176, + "sync_ok": true, + "sync_dt_ms": 8.067999966442585, + "timestamps": { + "CAM_A": 350733.734032, + "CAM_B": 350733.7421, + "CAM_C": 350733.741817 + } + }, + { + "frame_id": 1177, + "sync_ok": true, + "sync_dt_ms": 8.069999981671572, + "timestamps": { + "CAM_A": 350733.93403, + "CAM_B": 350733.9421, + "CAM_C": 350733.941822 + } + }, + { + "frame_id": 1178, + "sync_ok": false, + "sync_dt_ms": 41.117999993730336, + "timestamps": { + "CAM_A": 350734.03403, + "CAM_B": 350734.0421, + "CAM_C": 350734.075148 + } + }, + { + "frame_id": 1179, + "sync_ok": true, + "sync_dt_ms": 8.071999996900558, + "timestamps": { + "CAM_A": 350734.167362, + "CAM_B": 350734.175434, + "CAM_C": 350734.175157 + } + }, + { + "frame_id": 1180, + "sync_ok": true, + "sync_dt_ms": 8.071999996900558, + "timestamps": { + "CAM_A": 350734.267363, + "CAM_B": 350734.275435, + "CAM_C": 350734.275149 + } + }, + { + "frame_id": 1181, + "sync_ok": true, + "sync_dt_ms": 8.074999961536378, + "timestamps": { + "CAM_A": 350734.467361, + "CAM_B": 350734.475436, + "CAM_C": 350734.475158 + } + }, + { + "frame_id": 1182, + "sync_ok": true, + "sync_dt_ms": 8.075999969150871, + "timestamps": { + "CAM_A": 350734.600694, + "CAM_B": 350734.60877, + "CAM_C": 350734.608485 + } + }, + { + "frame_id": 1183, + "sync_ok": true, + "sync_dt_ms": 8.075999969150871, + "timestamps": { + "CAM_A": 350734.734027, + "CAM_B": 350734.742103, + "CAM_C": 350734.741821 + } + }, + { + "frame_id": 1184, + "sync_ok": false, + "sync_dt_ms": 41.130000026896596, + "timestamps": { + "CAM_A": 350734.834026, + "CAM_B": 350734.842104, + "CAM_C": 350734.875156 + } + }, + { + "frame_id": 1185, + "sync_ok": true, + "sync_dt_ms": 8.077999984379858, + "timestamps": { + "CAM_A": 350735.034026, + "CAM_B": 350735.042104, + "CAM_C": 350735.041822 + } + }, + { + "frame_id": 1186, + "sync_ok": true, + "sync_dt_ms": 8.079999999608845, + "timestamps": { + "CAM_A": 350735.134025, + "CAM_B": 350735.142105, + "CAM_C": 350735.141821 + } + }, + { + "frame_id": 1187, + "sync_ok": true, + "sync_dt_ms": 8.081000007223338, + "timestamps": { + "CAM_A": 350735.267358, + "CAM_B": 350735.275439, + "CAM_C": 350735.275153 + } + }, + { + "frame_id": 1188, + "sync_ok": false, + "sync_dt_ms": 41.13699996378273, + "timestamps": { + "CAM_A": 350735.367357, + "CAM_B": 350735.375439, + "CAM_C": 350735.408494 + } + }, + { + "frame_id": 1189, + "sync_ok": true, + "sync_dt_ms": 8.082999964244664, + "timestamps": { + "CAM_A": 350735.567357, + "CAM_B": 350735.57544, + "CAM_C": 350735.575151 + } + }, + { + "frame_id": 1190, + "sync_ok": false, + "sync_dt_ms": 41.41800000797957, + "timestamps": { + "CAM_A": 350735.667356, + "CAM_B": 350735.708774, + "CAM_C": 350735.708484 + } + }, + { + "frame_id": 1191, + "sync_ok": true, + "sync_dt_ms": 8.08499997947365, + "timestamps": { + "CAM_A": 350735.800689, + "CAM_B": 350735.808774, + "CAM_C": 350735.808493 + } + }, + { + "frame_id": 1192, + "sync_ok": true, + "sync_dt_ms": 8.086999994702637, + "timestamps": { + "CAM_A": 350735.934021, + "CAM_B": 350735.942108, + "CAM_C": 350735.941818 + } + }, + { + "frame_id": 1193, + "sync_ok": false, + "sync_dt_ms": 41.421999980229884, + "timestamps": { + "CAM_A": 350736.100687, + "CAM_B": 350736.142109, + "CAM_C": 350736.141818 + } + }, + { + "frame_id": 1194, + "sync_ok": true, + "sync_dt_ms": 8.090000017546117, + "timestamps": { + "CAM_A": 350736.23402, + "CAM_B": 350736.24211, + "CAM_C": 350736.241818 + } + }, + { + "frame_id": 1195, + "sync_ok": true, + "sync_dt_ms": 8.09100002516061, + "timestamps": { + "CAM_A": 350736.367352, + "CAM_B": 350736.375443, + "CAM_C": 350736.375152 + } + }, + { + "frame_id": 1196, + "sync_ok": false, + "sync_dt_ms": 41.138999979011714, + "timestamps": { + "CAM_A": 350736.467352, + "CAM_B": 350736.475445, + "CAM_C": 350736.508491 + } + }, + { + "frame_id": 1197, + "sync_ok": true, + "sync_dt_ms": 8.09700001263991, + "timestamps": { + "CAM_A": 350736.667351, + "CAM_B": 350736.675448, + "CAM_C": 350736.675152 + } + }, + { + "frame_id": 1198, + "sync_ok": true, + "sync_dt_ms": 8.098000020254403, + "timestamps": { + "CAM_A": 350736.76735, + "CAM_B": 350736.775448, + "CAM_C": 350736.775152 + } + }, + { + "frame_id": 1199, + "sync_ok": true, + "sync_dt_ms": 8.094999997410923, + "timestamps": { + "CAM_A": 350736.900684, + "CAM_B": 350736.908779, + "CAM_C": 350736.908486 + } + }, + { + "frame_id": 1200, + "sync_ok": true, + "sync_dt_ms": 8.096000005025417, + "timestamps": { + "CAM_A": 350737.000683, + "CAM_B": 350737.008779, + "CAM_C": 350737.008486 + } + }, + { + "frame_id": 1201, + "sync_ok": true, + "sync_dt_ms": 8.096999954432249, + "timestamps": { + "CAM_A": 350737.200682, + "CAM_B": 350737.208779, + "CAM_C": 350737.208486 + } + }, + { + "frame_id": 1202, + "sync_ok": false, + "sync_dt_ms": 41.430999990552664, + "timestamps": { + "CAM_A": 350737.300682, + "CAM_B": 350737.342113, + "CAM_C": 350737.34182 + } + }, + { + "frame_id": 1203, + "sync_ok": true, + "sync_dt_ms": 8.031999983359128, + "timestamps": { + "CAM_A": 350737.434014, + "CAM_B": 350737.442046, + "CAM_C": 350737.441752 + } + }, + { + "frame_id": 1204, + "sync_ok": true, + "sync_dt_ms": 8.100999984890223, + "timestamps": { + "CAM_A": 350737.567279, + "CAM_B": 350737.57538, + "CAM_C": 350737.575086 + } + }, + { + "frame_id": 1205, + "sync_ok": true, + "sync_dt_ms": 8.101999992504716, + "timestamps": { + "CAM_A": 350737.733945, + "CAM_B": 350737.742047, + "CAM_C": 350737.741753 + } + }, + { + "frame_id": 1206, + "sync_ok": false, + "sync_dt_ms": 41.43599997041747, + "timestamps": { + "CAM_A": 350737.833945, + "CAM_B": 350737.875381, + "CAM_C": 350737.875087 } } ], @@ -7545,7 +7545,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7554,7 +7554,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7570,13 +7570,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7589,13 +7589,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7610,7 +7610,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7619,7 +7619,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7635,13 +7635,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7654,13 +7654,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7675,7 +7675,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7684,7 +7684,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7700,13 +7700,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7719,13 +7719,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7740,7 +7740,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7749,7 +7749,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3382, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7765,13 +7765,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7784,13 +7784,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6153, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7805,7 +7805,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7814,7 +7814,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7830,13 +7830,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7849,13 +7849,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5203, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7870,7 +7870,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7879,7 +7879,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7895,13 +7895,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7914,13 +7914,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7935,7 +7935,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7944,7 +7944,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -7960,13 +7960,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -7979,13 +7979,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8000,7 +8000,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8009,7 +8009,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3494, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8025,13 +8025,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8044,13 +8044,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6357, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8065,7 +8065,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8074,7 +8074,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8090,13 +8090,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8109,13 +8109,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8130,7 +8130,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8139,7 +8139,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2351, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8155,13 +8155,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8174,13 +8174,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5374, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8195,7 +8195,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8204,7 +8204,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8220,13 +8220,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8239,13 +8239,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8260,7 +8260,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8269,7 +8269,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3610, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8285,13 +8285,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8304,13 +8304,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6568, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8325,7 +8325,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8334,7 +8334,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8350,13 +8350,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8369,13 +8369,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8390,7 +8390,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8399,7 +8399,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8415,13 +8415,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8434,13 +8434,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8455,7 +8455,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8464,7 +8464,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2508, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8480,13 +8480,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8499,13 +8499,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5550, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8520,7 +8520,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8529,7 +8529,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3729, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8545,13 +8545,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8564,13 +8564,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 6786, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8585,7 +8585,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8594,7 +8594,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8610,13 +8610,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8629,13 +8629,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8650,7 +8650,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8659,7 +8659,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8675,13 +8675,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8694,13 +8694,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8715,7 +8715,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8724,7 +8724,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8740,13 +8740,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8759,13 +8759,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8780,7 +8780,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8789,7 +8789,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2590, + "exposure_time_us": 3852, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8805,13 +8805,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8824,13 +8824,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5732, + "exposure_time_us": 7012, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8845,7 +8845,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8854,7 +8854,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8870,13 +8870,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8889,13 +8889,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8910,7 +8910,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8919,7 +8919,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8935,13 +8935,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8954,13 +8954,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -8975,7 +8975,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -8984,7 +8984,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9000,13 +9000,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9019,13 +9019,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9040,7 +9040,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9049,7 +9049,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2675, + "exposure_time_us": 3979, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9065,13 +9065,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9084,13 +9084,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5920, + "exposure_time_us": 7245, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9105,7 +9105,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9114,7 +9114,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9130,13 +9130,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9149,13 +9149,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9170,7 +9170,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9179,7 +9179,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9195,13 +9195,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9214,13 +9214,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9235,7 +9235,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9244,7 +9244,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9260,13 +9260,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9279,13 +9279,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9300,7 +9300,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9309,7 +9309,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2763, + "exposure_time_us": 4111, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9325,13 +9325,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9344,13 +9344,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6114, + "exposure_time_us": 7486, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9365,7 +9365,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9374,7 +9374,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9390,13 +9390,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9409,13 +9409,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9430,7 +9430,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9439,7 +9439,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9455,13 +9455,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9474,13 +9474,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9495,7 +9495,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9504,7 +9504,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9520,13 +9520,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9539,13 +9539,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9560,7 +9560,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9569,7 +9569,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4247, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9585,13 +9585,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9604,13 +9604,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7735, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9625,7 +9625,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9634,7 +9634,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2854, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9650,13 +9650,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9669,13 +9669,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6315, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9690,7 +9690,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9699,7 +9699,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9715,13 +9715,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9734,13 +9734,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9755,7 +9755,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9764,7 +9764,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9780,13 +9780,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9799,13 +9799,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9820,7 +9820,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9829,7 +9829,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4387, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9845,13 +9845,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9864,13 +9864,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 7992, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9885,7 +9885,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9894,7 +9894,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9910,13 +9910,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9929,13 +9929,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9950,7 +9950,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9959,7 +9959,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2948, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -9975,13 +9975,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -9994,13 +9994,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6522, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10015,7 +10015,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10024,7 +10024,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10040,13 +10040,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10059,13 +10059,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10080,7 +10080,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10089,7 +10089,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4532, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10105,13 +10105,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10124,13 +10124,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8258, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10145,7 +10145,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10154,7 +10154,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10170,13 +10170,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10189,13 +10189,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10210,7 +10210,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10219,7 +10219,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3045, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10235,13 +10235,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10254,13 +10254,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6735, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10275,7 +10275,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10284,7 +10284,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10300,13 +10300,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10319,13 +10319,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10340,7 +10340,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10349,7 +10349,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4682, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10365,13 +10365,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10384,13 +10384,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8532, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10405,7 +10405,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4836, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10414,7 +10414,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4836, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10430,13 +10430,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10449,13 +10449,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10470,7 +10470,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4836, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10479,7 +10479,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4836, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10495,13 +10495,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10514,13 +10514,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10535,7 +10535,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4836, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10544,7 +10544,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3145, + "exposure_time_us": 4836, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10560,13 +10560,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10579,13 +10579,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 6955, + "exposure_time_us": 8816, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10600,7 +10600,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 4995, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10609,7 +10609,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 4995, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10625,13 +10625,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10644,13 +10644,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10665,7 +10665,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 4995, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10674,7 +10674,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 4995, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10690,13 +10690,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10709,13 +10709,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10730,7 +10730,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 4995, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10739,7 +10739,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 4995, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10755,13 +10755,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10774,13 +10774,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9109, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10795,7 +10795,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10804,7 +10804,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10820,13 +10820,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10839,13 +10839,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10860,7 +10860,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10869,7 +10869,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3248, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10885,13 +10885,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10904,13 +10904,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7182, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10925,7 +10925,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10934,7 +10934,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10950,13 +10950,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10969,13 +10969,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -10990,7 +10990,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -10999,7 +10999,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5160, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11015,13 +11015,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11034,13 +11034,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9412, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11055,7 +11055,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11064,7 +11064,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11080,13 +11080,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11099,13 +11099,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11120,7 +11120,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11129,7 +11129,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11145,13 +11145,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11164,13 +11164,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11185,7 +11185,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11194,7 +11194,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3354, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11210,13 +11210,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11229,13 +11229,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7416, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11250,7 +11250,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11259,7 +11259,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5330, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11275,13 +11275,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11294,13 +11294,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 9725, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11315,7 +11315,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11324,7 +11324,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11340,13 +11340,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11359,13 +11359,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11380,7 +11380,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11389,7 +11389,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11405,13 +11405,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11424,13 +11424,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11445,7 +11445,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11454,7 +11454,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11470,13 +11470,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11489,13 +11489,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11510,7 +11510,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11519,7 +11519,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3464, + "exposure_time_us": 5506, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11535,13 +11535,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11554,13 +11554,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7658, + "exposure_time_us": 10048, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11575,7 +11575,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11584,7 +11584,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11600,13 +11600,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11619,13 +11619,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11640,7 +11640,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11649,7 +11649,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11665,13 +11665,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11684,13 +11684,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11705,7 +11705,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11714,7 +11714,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11730,13 +11730,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11749,13 +11749,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11770,7 +11770,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11779,7 +11779,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3577, + "exposure_time_us": 5687, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11795,13 +11795,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11814,13 +11814,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 7908, + "exposure_time_us": 10382, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11835,7 +11835,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11844,7 +11844,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11860,13 +11860,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11879,13 +11879,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11900,7 +11900,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11909,7 +11909,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11925,13 +11925,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11944,13 +11944,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -11965,7 +11965,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11974,7 +11974,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -11990,13 +11990,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12009,13 +12009,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12030,7 +12030,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12039,7 +12039,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3694, + "exposure_time_us": 5874, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12055,13 +12055,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12074,13 +12074,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8166, + "exposure_time_us": 10727, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12095,7 +12095,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12104,7 +12104,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12120,13 +12120,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12139,13 +12139,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12160,7 +12160,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12169,7 +12169,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12185,13 +12185,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12204,13 +12204,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12225,7 +12225,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12234,7 +12234,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12250,13 +12250,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12269,13 +12269,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12290,7 +12290,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12299,7 +12299,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6067, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12315,13 +12315,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12334,13 +12334,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11084, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12355,7 +12355,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6267, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12364,7 +12364,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3815, + "exposure_time_us": 6267, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12380,13 +12380,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12399,13 +12399,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8432, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12420,7 +12420,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6267, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12429,7 +12429,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6267, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12445,13 +12445,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12464,13 +12464,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12485,7 +12485,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6267, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12494,7 +12494,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6267, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12510,13 +12510,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12529,13 +12529,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11453, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12550,7 +12550,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12559,7 +12559,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12575,13 +12575,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12594,13 +12594,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12615,7 +12615,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12624,7 +12624,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 3940, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12640,13 +12640,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12659,13 +12659,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8705, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12680,7 +12680,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12689,7 +12689,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12705,13 +12705,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12724,13 +12724,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12745,7 +12745,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12754,7 +12754,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6473, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12770,13 +12770,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12789,13 +12789,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 11834, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12810,7 +12810,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12819,7 +12819,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12835,13 +12835,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12854,13 +12854,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12875,7 +12875,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12884,7 +12884,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4069, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12900,13 +12900,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12919,13 +12919,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 8987, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12940,7 +12940,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12949,7 +12949,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -12965,13 +12965,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -12984,13 +12984,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13005,7 +13005,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13014,7 +13014,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6686, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13030,13 +13030,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13049,13 +13049,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12227, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13070,7 +13070,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13079,7 +13079,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13095,13 +13095,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13114,13 +13114,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13135,7 +13135,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13144,7 +13144,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13160,13 +13160,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13179,13 +13179,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13200,7 +13200,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13209,7 +13209,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4202, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13225,13 +13225,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13244,13 +13244,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9278, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13265,7 +13265,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13274,7 +13274,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 6906, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13290,13 +13290,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13309,13 +13309,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 12634, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13330,7 +13330,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13339,7 +13339,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13355,13 +13355,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13374,13 +13374,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13395,7 +13395,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13404,7 +13404,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13420,13 +13420,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13439,13 +13439,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13460,7 +13460,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13469,7 +13469,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13485,13 +13485,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13504,13 +13504,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13525,7 +13525,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13534,7 +13534,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4339, + "exposure_time_us": 7133, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13550,13 +13550,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13569,13 +13569,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9579, + "exposure_time_us": 13054, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13590,7 +13590,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13599,7 +13599,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13615,13 +13615,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13634,13 +13634,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13655,7 +13655,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13664,7 +13664,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13680,13 +13680,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13699,13 +13699,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13720,7 +13720,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13729,7 +13729,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13745,13 +13745,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13764,13 +13764,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13785,7 +13785,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13794,7 +13794,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4480, + "exposure_time_us": 7367, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13810,13 +13810,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13829,13 +13829,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 9890, + "exposure_time_us": 13488, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13850,7 +13850,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4626, + "exposure_time_us": 7609, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13859,7 +13859,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4626, + "exposure_time_us": 7609, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13875,13 +13875,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13894,13 +13894,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13915,7 +13915,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4626, + "exposure_time_us": 7609, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13924,7 +13924,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4626, + "exposure_time_us": 7609, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13940,13 +13940,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13959,13 +13959,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -13980,7 +13980,7 @@ "role": "rgb", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4626, + "exposure_time_us": 7609, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -13989,7 +13989,7 @@ "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 4626, + "exposure_time_us": 7609, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -14005,13 +14005,13 @@ "role": "re", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -14024,13 +14024,13 @@ "role": "nir", "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "raw": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 10211, + "exposure_time_us": 13937, "analogue_gain": 1.0, "colour_gains": null, "ok": true, @@ -14042,1003 +14042,1003 @@ ], "meta_log": [ { - "frame_id": 395, - "sync_ok": true, - "sync_dt_ms": 7.379000016953796, - "timestamps": { - "CAM_A": 338452.911483, - "CAM_B": 338452.918862, - "CAM_C": 338452.918826 - } - }, - { - "frame_id": 396, - "sync_ok": true, - "sync_dt_ms": 7.379999966360629, - "timestamps": { - "CAM_A": 338453.07815, - "CAM_B": 338453.08553, - "CAM_C": 338453.085493 - } - }, - { - "frame_id": 397, + "frame_id": 1399, "sync_ok": false, - "sync_dt_ms": 40.67800001939759, + "sync_dt_ms": 41.62300005555153, "timestamps": { - "CAM_A": 338453.178149, - "CAM_B": 338453.18553, - "CAM_C": 338453.218827 + "CAM_A": 350759.70027, + "CAM_B": 350759.741893, + "CAM_C": 350759.741544 } }, { - "frame_id": 398, - "sync_ok": true, - "sync_dt_ms": 7.380999973975122, - "timestamps": { - "CAM_A": 338453.278149, - "CAM_B": 338453.28553, - "CAM_C": 338453.285494 - } - }, - { - "frame_id": 399, + "frame_id": 1400, "sync_ok": false, - "sync_dt_ms": 40.71600001771003, + "sync_dt_ms": 41.62400000495836, "timestamps": { - "CAM_A": 338453.378148, - "CAM_B": 338453.418864, - "CAM_C": 338453.418827 + "CAM_A": 350759.90027, + "CAM_B": 350759.941894, + "CAM_C": 350759.941543 } }, { - "frame_id": 400, - "sync_ok": true, - "sync_dt_ms": 7.382999989204109, - "timestamps": { - "CAM_A": 338453.478148, - "CAM_B": 338453.485531, - "CAM_C": 338453.485494 - } - }, - { - "frame_id": 401, + "frame_id": 1401, "sync_ok": false, - "sync_dt_ms": 40.680999984033406, + "sync_dt_ms": 41.27500002505258, "timestamps": { - "CAM_A": 338453.644794, - "CAM_B": 338453.652178, - "CAM_C": 338453.685475 + "CAM_A": 350760.033602, + "CAM_B": 350760.041896, + "CAM_C": 350760.074877 } }, { - "frame_id": 402, + "frame_id": 1402, "sync_ok": true, - "sync_dt_ms": 7.3850000044330955, + "sync_dt_ms": 8.29399999929592, "timestamps": { - "CAM_A": 338453.744794, - "CAM_B": 338453.752179, - "CAM_C": 338453.752142 + "CAM_A": 350760.200268, + "CAM_B": 350760.208562, + "CAM_C": 350760.20821 } }, { - "frame_id": 403, + "frame_id": 1403, "sync_ok": true, - "sync_dt_ms": 7.386000012047589, + "sync_dt_ms": 8.295999956317246, "timestamps": { - "CAM_A": 338453.878127, - "CAM_B": 338453.885513, - "CAM_C": 338453.885476 + "CAM_A": 350760.333601, + "CAM_B": 350760.341897, + "CAM_C": 350760.341544 } }, { - "frame_id": 404, - "sync_ok": true, - "sync_dt_ms": 7.386000012047589, - "timestamps": { - "CAM_A": 338453.978127, - "CAM_B": 338453.985513, - "CAM_C": 338453.985476 - } - }, - { - "frame_id": 405, - "sync_ok": true, - "sync_dt_ms": 7.386000012047589, - "timestamps": { - "CAM_A": 338454.078127, - "CAM_B": 338454.085513, - "CAM_C": 338454.085476 - } - }, - { - "frame_id": 406, + "frame_id": 1404, "sync_ok": false, - "sync_dt_ms": 40.68500001449138, + "sync_dt_ms": 41.62999999243766, "timestamps": { - "CAM_A": 338454.244792, - "CAM_B": 338454.25218, - "CAM_C": 338454.285477 + "CAM_A": 350760.500267, + "CAM_B": 350760.541897, + "CAM_C": 350760.541544 } }, { - "frame_id": 407, + "frame_id": 1405, "sync_ok": true, - "sync_dt_ms": 7.389000034891069, + "sync_dt_ms": 8.298000029753894, "timestamps": { - "CAM_A": 338454.378125, - "CAM_B": 338454.385514, - "CAM_C": 338454.385477 + "CAM_A": 350760.666933, + "CAM_B": 350760.675231, + "CAM_C": 350760.674878 } }, { - "frame_id": 408, + "frame_id": 1406, "sync_ok": true, - "sync_dt_ms": 7.389999984297901, + "sync_dt_ms": 8.29999998677522, "timestamps": { - "CAM_A": 338454.478125, - "CAM_B": 338454.485515, - "CAM_C": 338454.485477 + "CAM_A": 350760.800265, + "CAM_B": 350760.808565, + "CAM_C": 350760.808211 } }, { - "frame_id": 409, + "frame_id": 1407, "sync_ok": true, - "sync_dt_ms": 7.389999984297901, + "sync_dt_ms": 8.302000002004206, "timestamps": { - "CAM_A": 338454.578125, - "CAM_B": 338454.585515, - "CAM_C": 338454.585478 + "CAM_A": 350760.933598, + "CAM_B": 350760.9419, + "CAM_C": 350760.941545 } }, { - "frame_id": 410, - "sync_ok": true, - "sync_dt_ms": 7.391999999526888, - "timestamps": { - "CAM_A": 338454.711457, - "CAM_B": 338454.718849, - "CAM_C": 338454.718811 - } - }, - { - "frame_id": 411, - "sync_ok": true, - "sync_dt_ms": 7.3930000071413815, - "timestamps": { - "CAM_A": 338454.84479, - "CAM_B": 338454.852183, - "CAM_C": 338454.852145 - } - }, - { - "frame_id": 412, - "sync_ok": true, - "sync_dt_ms": 7.394000014755875, - "timestamps": { - "CAM_A": 338454.978123, - "CAM_B": 338454.985517, - "CAM_C": 338454.985479 - } - }, - { - "frame_id": 413, - "sync_ok": true, - "sync_dt_ms": 7.394000014755875, - "timestamps": { - "CAM_A": 338455.078123, - "CAM_B": 338455.085517, - "CAM_C": 338455.085479 - } - }, - { - "frame_id": 414, - "sync_ok": true, - "sync_dt_ms": 7.396000029984862, - "timestamps": { - "CAM_A": 338455.211455, - "CAM_B": 338455.218851, - "CAM_C": 338455.218813 - } - }, - { - "frame_id": 415, - "sync_ok": true, - "sync_dt_ms": 7.395999971777201, - "timestamps": { - "CAM_A": 338455.311455, - "CAM_B": 338455.318851, - "CAM_C": 338455.318813 - } - }, - { - "frame_id": 416, - "sync_ok": true, - "sync_dt_ms": 7.397999987006187, - "timestamps": { - "CAM_A": 338455.478121, - "CAM_B": 338455.485519, - "CAM_C": 338455.48548 - } - }, - { - "frame_id": 417, - "sync_ok": true, - "sync_dt_ms": 7.397999987006187, - "timestamps": { - "CAM_A": 338455.578121, - "CAM_B": 338455.585519, - "CAM_C": 338455.585481 - } - }, - { - "frame_id": 418, - "sync_ok": true, - "sync_dt_ms": 7.399000052828342, - "timestamps": { - "CAM_A": 338455.711454, - "CAM_B": 338455.718853, - "CAM_C": 338455.718814 - } - }, - { - "frame_id": 419, - "sync_ok": true, - "sync_dt_ms": 7.398999994620681, - "timestamps": { - "CAM_A": 338455.811454, - "CAM_B": 338455.818853, - "CAM_C": 338455.818815 - } - }, - { - "frame_id": 420, - "sync_ok": true, - "sync_dt_ms": 7.402000017464161, - "timestamps": { - "CAM_A": 338456.011452, - "CAM_B": 338456.018854, - "CAM_C": 338456.018816 - } - }, - { - "frame_id": 421, + "frame_id": 1408, "sync_ok": false, - "sync_dt_ms": 40.695999981835485, + "sync_dt_ms": 41.63799999514595, "timestamps": { - "CAM_A": 338456.111453, - "CAM_B": 338456.118855, - "CAM_C": 338456.152149 + "CAM_A": 350761.133446, + "CAM_B": 350761.175084, + "CAM_C": 350761.174728 } }, { - "frame_id": 422, + "frame_id": 1409, "sync_ok": true, - "sync_dt_ms": 7.403000025078654, + "sync_dt_ms": 8.303999959025532, "timestamps": { - "CAM_A": 338456.244785, - "CAM_B": 338456.252188, - "CAM_C": 338456.252149 + "CAM_A": 350761.300112, + "CAM_B": 350761.308416, + "CAM_C": 350761.308061 } }, { - "frame_id": 423, + "frame_id": 1410, "sync_ok": true, - "sync_dt_ms": 7.403999974485487, + "sync_dt_ms": 8.30600003246218, "timestamps": { - "CAM_A": 338456.344785, - "CAM_B": 338456.352189, - "CAM_C": 338456.35215 + "CAM_A": 350761.433445, + "CAM_B": 350761.441751, + "CAM_C": 350761.441394 } }, { - "frame_id": 424, + "frame_id": 1411, "sync_ok": true, - "sync_dt_ms": 7.40499998209998, + "sync_dt_ms": 8.307000040076673, "timestamps": { - "CAM_A": 338456.511451, - "CAM_B": 338456.518856, - "CAM_C": 338456.518817 + "CAM_A": 350761.566778, + "CAM_B": 350761.575085, + "CAM_C": 350761.574728 } }, { - "frame_id": 425, + "frame_id": 1412, "sync_ok": true, - "sync_dt_ms": 7.4059999897144735, + "sync_dt_ms": 8.307999989483505, "timestamps": { - "CAM_A": 338456.61145, - "CAM_B": 338456.618856, - "CAM_C": 338456.618817 + "CAM_A": 350761.766777, + "CAM_B": 350761.775085, + "CAM_C": 350761.774728 } }, { - "frame_id": 426, + "frame_id": 1413, "sync_ok": true, - "sync_dt_ms": 7.406999997328967, + "sync_dt_ms": 8.310000004712492, "timestamps": { - "CAM_A": 338456.71145, - "CAM_B": 338456.718857, - "CAM_C": 338456.718818 + "CAM_A": 350761.900109, + "CAM_B": 350761.908419, + "CAM_C": 350761.908062 } }, { - "frame_id": 427, + "frame_id": 1414, "sync_ok": true, - "sync_dt_ms": 7.406999997328967, + "sync_dt_ms": 8.308999997097999, "timestamps": { - "CAM_A": 338456.81145, - "CAM_B": 338456.818857, - "CAM_C": 338456.818818 + "CAM_A": 350762.033442, + "CAM_B": 350762.041751, + "CAM_C": 350762.041395 } }, { - "frame_id": 428, + "frame_id": 1415, "sync_ok": true, - "sync_dt_ms": 7.409000012557954, + "sync_dt_ms": 8.312000019941479, "timestamps": { - "CAM_A": 338456.911449, - "CAM_B": 338456.918858, - "CAM_C": 338456.918818 + "CAM_A": 350762.166775, + "CAM_B": 350762.175087, + "CAM_C": 350762.174729 } }, { - "frame_id": 429, + "frame_id": 1416, "sync_ok": true, - "sync_dt_ms": 7.409000012557954, + "sync_dt_ms": 8.312000019941479, "timestamps": { - "CAM_A": 338457.078116, - "CAM_B": 338457.085525, - "CAM_C": 338457.085485 + "CAM_A": 350762.366774, + "CAM_B": 350762.375086, + "CAM_C": 350762.374729 } }, { - "frame_id": 430, + "frame_id": 1417, + "sync_ok": true, + "sync_dt_ms": 8.313000027555972, + "timestamps": { + "CAM_A": 350762.500107, + "CAM_B": 350762.50842, + "CAM_C": 350762.508063 + } + }, + { + "frame_id": 1418, + "sync_ok": true, + "sync_dt_ms": 8.314000035170466, + "timestamps": { + "CAM_A": 350762.666773, + "CAM_B": 350762.675087, + "CAM_C": 350762.67473 + } + }, + { + "frame_id": 1419, + "sync_ok": true, + "sync_dt_ms": 8.316000050399452, + "timestamps": { + "CAM_A": 350762.800105, + "CAM_B": 350762.808421, + "CAM_C": 350762.808063 + } + }, + { + "frame_id": 1420, + "sync_ok": true, + "sync_dt_ms": 8.319000015035272, + "timestamps": { + "CAM_A": 350763.000104, + "CAM_B": 350763.008423, + "CAM_C": 350763.008063 + } + }, + { + "frame_id": 1421, + "sync_ok": true, + "sync_dt_ms": 8.320000022649765, + "timestamps": { + "CAM_A": 350763.133437, + "CAM_B": 350763.141757, + "CAM_C": 350763.141397 + } + }, + { + "frame_id": 1422, + "sync_ok": true, + "sync_dt_ms": 8.321000030264258, + "timestamps": { + "CAM_A": 350763.26677, + "CAM_B": 350763.275091, + "CAM_C": 350763.27473 + } + }, + { + "frame_id": 1423, + "sync_ok": true, + "sync_dt_ms": 8.322999987285584, + "timestamps": { + "CAM_A": 350763.400103, + "CAM_B": 350763.408426, + "CAM_C": 350763.408064 + } + }, + { + "frame_id": 1424, "sync_ok": false, - "sync_dt_ms": 40.74299999047071, + "sync_dt_ms": 41.296000010333955, "timestamps": { - "CAM_A": 338457.178116, - "CAM_B": 338457.218859, - "CAM_C": 338457.218819 + "CAM_A": 350763.600102, + "CAM_B": 350763.608425, + "CAM_C": 350763.641398 } }, { - "frame_id": 431, - "sync_ok": true, - "sync_dt_ms": 7.410999969579279, - "timestamps": { - "CAM_A": 338457.311448, - "CAM_B": 338457.318859, - "CAM_C": 338457.318819 - } - }, - { - "frame_id": 432, - "sync_ok": true, - "sync_dt_ms": 7.411999977193773, - "timestamps": { - "CAM_A": 338457.411448, - "CAM_B": 338457.41886, - "CAM_C": 338457.418819 - } - }, - { - "frame_id": 433, - "sync_ok": true, - "sync_dt_ms": 7.412999984808266, - "timestamps": { - "CAM_A": 338457.511447, - "CAM_B": 338457.51886, - "CAM_C": 338457.51882 - } - }, - { - "frame_id": 434, - "sync_ok": true, - "sync_dt_ms": 7.412999984808266, - "timestamps": { - "CAM_A": 338457.678114, - "CAM_B": 338457.685527, - "CAM_C": 338457.685487 - } - }, - { - "frame_id": 435, - "sync_ok": true, - "sync_dt_ms": 7.415000000037253, - "timestamps": { - "CAM_A": 338457.811446, - "CAM_B": 338457.818861, - "CAM_C": 338457.818821 - } - }, - { - "frame_id": 436, - "sync_ok": true, - "sync_dt_ms": 7.416000007651746, - "timestamps": { - "CAM_A": 338457.911446, - "CAM_B": 338457.918862, - "CAM_C": 338457.918821 - } - }, - { - "frame_id": 437, - "sync_ok": true, - "sync_dt_ms": 7.416000007651746, - "timestamps": { - "CAM_A": 338458.044779, - "CAM_B": 338458.052195, - "CAM_C": 338458.052155 - } - }, - { - "frame_id": 438, - "sync_ok": true, - "sync_dt_ms": 7.417999964673072, - "timestamps": { - "CAM_A": 338458.211445, - "CAM_B": 338458.218863, - "CAM_C": 338458.218822 - } - }, - { - "frame_id": 439, - "sync_ok": true, - "sync_dt_ms": 7.419000030495226, - "timestamps": { - "CAM_A": 338458.311444, - "CAM_B": 338458.318863, - "CAM_C": 338458.318822 - } - }, - { - "frame_id": 440, - "sync_ok": true, - "sync_dt_ms": 7.419999979902059, - "timestamps": { - "CAM_A": 338458.411444, - "CAM_B": 338458.418864, - "CAM_C": 338458.418823 - } - }, - { - "frame_id": 441, - "sync_ok": true, - "sync_dt_ms": 7.419999979902059, - "timestamps": { - "CAM_A": 338458.511444, - "CAM_B": 338458.518864, - "CAM_C": 338458.518823 - } - }, - { - "frame_id": 442, - "sync_ok": true, - "sync_dt_ms": 7.421000045724213, - "timestamps": { - "CAM_A": 338458.611443, - "CAM_B": 338458.618864, - "CAM_C": 338458.618823 - } - }, - { - "frame_id": 443, - "sync_ok": true, - "sync_dt_ms": 7.421999995131046, - "timestamps": { - "CAM_A": 338458.811443, - "CAM_B": 338458.818865, - "CAM_C": 338458.818824 - } - }, - { - "frame_id": 444, - "sync_ok": true, - "sync_dt_ms": 7.423000002745539, - "timestamps": { - "CAM_A": 338458.911442, - "CAM_B": 338458.918865, - "CAM_C": 338458.918824 - } - }, - { - "frame_id": 445, - "sync_ok": true, - "sync_dt_ms": 7.424000010360032, - "timestamps": { - "CAM_A": 338459.011442, - "CAM_B": 338459.018866, - "CAM_C": 338459.018824 - } - }, - { - "frame_id": 446, + "frame_id": 1425, "sync_ok": false, - "sync_dt_ms": 40.71599995950237, + "sync_dt_ms": 41.65799997281283, "timestamps": { - "CAM_A": 338459.111442, - "CAM_B": 338459.118867, - "CAM_C": 338459.152158 + "CAM_A": 350763.733435, + "CAM_B": 350763.775093, + "CAM_C": 350763.774731 } }, { - "frame_id": 447, + "frame_id": 1426, "sync_ok": true, - "sync_dt_ms": 7.424999959766865, + "sync_dt_ms": 8.326000010129064, "timestamps": { - "CAM_A": 338459.244775, - "CAM_B": 338459.2522, - "CAM_C": 338459.252159 + "CAM_A": 350763.866767, + "CAM_B": 350763.875093, + "CAM_C": 350763.874731 } }, { - "frame_id": 448, + "frame_id": 1427, "sync_ok": true, - "sync_dt_ms": 7.425999967381358, + "sync_dt_ms": 8.328999974764884, "timestamps": { - "CAM_A": 338459.411441, - "CAM_B": 338459.418867, - "CAM_C": 338459.418825 + "CAM_A": 350764.0001, + "CAM_B": 350764.008429, + "CAM_C": 350764.008065 } }, { - "frame_id": 449, + "frame_id": 1428, "sync_ok": true, - "sync_dt_ms": 7.428000040818006, + "sync_dt_ms": 8.32799996715039, "timestamps": { - "CAM_A": 338459.51144, - "CAM_B": 338459.518868, - "CAM_C": 338459.518826 + "CAM_A": 350764.200099, + "CAM_B": 350764.208427, + "CAM_C": 350764.208065 } }, { - "frame_id": 450, - "sync_ok": true, - "sync_dt_ms": 7.429000048432499, - "timestamps": { - "CAM_A": 338459.644773, - "CAM_B": 338459.652202, - "CAM_C": 338459.65216 - } - }, - { - "frame_id": 451, - "sync_ok": true, - "sync_dt_ms": 7.428999990224838, - "timestamps": { - "CAM_A": 338459.744773, - "CAM_B": 338459.752202, - "CAM_C": 338459.75216 - } - }, - { - "frame_id": 452, - "sync_ok": true, - "sync_dt_ms": 7.451999990735203, - "timestamps": { - "CAM_A": 338459.844772, - "CAM_B": 338459.852224, - "CAM_C": 338459.85216 - } - }, - { - "frame_id": 453, - "sync_ok": true, - "sync_dt_ms": 7.45099998312071, - "timestamps": { - "CAM_A": 338460.011438, - "CAM_B": 338460.018889, - "CAM_C": 338460.018828 - } - }, - { - "frame_id": 454, - "sync_ok": true, - "sync_dt_ms": 7.4560000211931765, - "timestamps": { - "CAM_A": 338460.111438, - "CAM_B": 338460.118894, - "CAM_C": 338460.118828 - } - }, - { - "frame_id": 455, - "sync_ok": true, - "sync_dt_ms": 7.451999990735203, - "timestamps": { - "CAM_A": 338460.211438, - "CAM_B": 338460.21889, - "CAM_C": 338460.218828 - } - }, - { - "frame_id": 456, - "sync_ok": true, - "sync_dt_ms": 7.4560000211931765, - "timestamps": { - "CAM_A": 338460.311437, - "CAM_B": 338460.318893, - "CAM_C": 338460.318829 - } - }, - { - "frame_id": 457, - "sync_ok": true, - "sync_dt_ms": 7.451999990735203, - "timestamps": { - "CAM_A": 338460.44477, - "CAM_B": 338460.452222, - "CAM_C": 338460.452162 - } - }, - { - "frame_id": 458, - "sync_ok": true, - "sync_dt_ms": 7.450000033713877, - "timestamps": { - "CAM_A": 338460.611436, - "CAM_B": 338460.618886, - "CAM_C": 338460.618829 - } - }, - { - "frame_id": 459, - "sync_ok": true, - "sync_dt_ms": 7.45400000596419, - "timestamps": { - "CAM_A": 338460.711436, - "CAM_B": 338460.71889, - "CAM_C": 338460.718829 - } - }, - { - "frame_id": 460, - "sync_ok": true, - "sync_dt_ms": 7.45099998312071, - "timestamps": { - "CAM_A": 338460.844769, - "CAM_B": 338460.85222, - "CAM_C": 338460.852163 - } - }, - { - "frame_id": 461, - "sync_ok": true, - "sync_dt_ms": 7.451000041328371, - "timestamps": { - "CAM_A": 338460.944768, - "CAM_B": 338460.952219, - "CAM_C": 338460.952164 - } - }, - { - "frame_id": 462, - "sync_ok": true, - "sync_dt_ms": 7.454999955371022, - "timestamps": { - "CAM_A": 338461.111435, - "CAM_B": 338461.11889, - "CAM_C": 338461.118831 - } - }, - { - "frame_id": 463, - "sync_ok": true, - "sync_dt_ms": 7.452999998349696, - "timestamps": { - "CAM_A": 338461.211434, - "CAM_B": 338461.218887, - "CAM_C": 338461.218831 - } - }, - { - "frame_id": 464, - "sync_ok": true, - "sync_dt_ms": 7.449999975506216, - "timestamps": { - "CAM_A": 338461.344767, - "CAM_B": 338461.352217, - "CAM_C": 338461.352165 - } - }, - { - "frame_id": 465, - "sync_ok": true, - "sync_dt_ms": 7.237000041641295, - "timestamps": { - "CAM_A": 338461.444767, - "CAM_B": 338461.452004, - "CAM_C": 338461.45195 - } - }, - { - "frame_id": 466, - "sync_ok": true, - "sync_dt_ms": 7.449999975506216, - "timestamps": { - "CAM_A": 338461.611218, - "CAM_B": 338461.618668, - "CAM_C": 338461.618617 - } - }, - { - "frame_id": 467, - "sync_ok": true, - "sync_dt_ms": 7.452999998349696, - "timestamps": { - "CAM_A": 338461.711218, - "CAM_B": 338461.718671, - "CAM_C": 338461.718618 - } - }, - { - "frame_id": 468, - "sync_ok": true, - "sync_dt_ms": 7.451000041328371, - "timestamps": { - "CAM_A": 338461.844551, - "CAM_B": 338461.852002, - "CAM_C": 338461.851952 - } - }, - { - "frame_id": 469, - "sync_ok": true, - "sync_dt_ms": 7.451999990735203, - "timestamps": { - "CAM_A": 338461.911217, - "CAM_B": 338461.918669, - "CAM_C": 338461.918619 - } - }, - { - "frame_id": 470, - "sync_ok": true, - "sync_dt_ms": 7.45400000596419, - "timestamps": { - "CAM_A": 338462.04455, - "CAM_B": 338462.052004, - "CAM_C": 338462.051952 - } - }, - { - "frame_id": 471, + "frame_id": 1429, "sync_ok": false, - "sync_dt_ms": 40.73700000299141, + "sync_dt_ms": 41.29999998258427, "timestamps": { - "CAM_A": 338462.211216, - "CAM_B": 338462.218668, - "CAM_C": 338462.251953 + "CAM_A": 350764.333432, + "CAM_B": 350764.341762, + "CAM_C": 350764.374732 } }, { - "frame_id": 472, + "frame_id": 1430, "sync_ok": true, - "sync_dt_ms": 7.452000048942864, + "sync_dt_ms": 8.33099998999387, "timestamps": { - "CAM_A": 338462.344549, - "CAM_B": 338462.352001, - "CAM_C": 338462.351953 + "CAM_A": 350764.500098, + "CAM_B": 350764.508429, + "CAM_C": 350764.508066 } }, { - "frame_id": 473, + "frame_id": 1431, "sync_ok": true, - "sync_dt_ms": 7.449999975506216, + "sync_dt_ms": 8.333000005222857, "timestamps": { - "CAM_A": 338462.444549, - "CAM_B": 338462.451999, - "CAM_C": 338462.451953 + "CAM_A": 350764.63343, + "CAM_B": 350764.641763, + "CAM_C": 350764.641399 } }, { - "frame_id": 474, + "frame_id": 1432, "sync_ok": true, - "sync_dt_ms": 7.451000041328371, + "sync_dt_ms": 8.33400001283735, "timestamps": { - "CAM_A": 338462.544549, - "CAM_B": 338462.552, - "CAM_C": 338462.551954 + "CAM_A": 350764.833429, + "CAM_B": 350764.841763, + "CAM_C": 350764.8414 } }, { - "frame_id": 475, + "frame_id": 1433, "sync_ok": true, - "sync_dt_ms": 7.45099998312071, + "sync_dt_ms": 8.336000028066337, "timestamps": { - "CAM_A": 338462.744548, - "CAM_B": 338462.751999, - "CAM_C": 338462.751954 + "CAM_A": 350764.966762, + "CAM_B": 350764.975098, + "CAM_C": 350764.974733 } }, { - "frame_id": 476, + "frame_id": 1434, "sync_ok": true, - "sync_dt_ms": 7.451999990735203, + "sync_dt_ms": 8.335999969858676, "timestamps": { - "CAM_A": 338462.844547, - "CAM_B": 338462.851999, - "CAM_C": 338462.851955 + "CAM_A": 350765.100095, + "CAM_B": 350765.108431, + "CAM_C": 350765.108067 } }, { - "frame_id": 477, + "frame_id": 1435, "sync_ok": true, - "sync_dt_ms": 7.452999998349696, + "sync_dt_ms": 8.338999992702156, "timestamps": { - "CAM_A": 338462.97788, - "CAM_B": 338462.985333, - "CAM_C": 338462.985288 + "CAM_A": 350765.233428, + "CAM_B": 350765.241767, + "CAM_C": 350765.2414 } }, { - "frame_id": 478, + "frame_id": 1436, "sync_ok": true, - "sync_dt_ms": 7.45400000596419, + "sync_dt_ms": 8.338999992702156, "timestamps": { - "CAM_A": 338463.07788, - "CAM_B": 338463.085334, - "CAM_C": 338463.085288 + "CAM_A": 350765.433426, + "CAM_B": 350765.441765, + "CAM_C": 350765.4414 } }, { - "frame_id": 479, + "frame_id": 1437, "sync_ok": true, - "sync_dt_ms": 7.455000013578683, + "sync_dt_ms": 8.34000000031665, "timestamps": { - "CAM_A": 338463.244546, - "CAM_B": 338463.252001, - "CAM_C": 338463.251956 + "CAM_A": 350765.56676, + "CAM_B": 350765.5751, + "CAM_C": 350765.574734 } }, { - "frame_id": 480, + "frame_id": 1438, "sync_ok": true, - "sync_dt_ms": 7.4560000211931765, + "sync_dt_ms": 8.341999957337976, "timestamps": { - "CAM_A": 338463.344545, - "CAM_B": 338463.352001, - "CAM_C": 338463.351956 + "CAM_A": 350765.700092, + "CAM_B": 350765.708434, + "CAM_C": 350765.708068 } }, { - "frame_id": 481, + "frame_id": 1439, "sync_ok": true, - "sync_dt_ms": 7.456999970600009, + "sync_dt_ms": 8.346999995410442, "timestamps": { - "CAM_A": 338463.477878, - "CAM_B": 338463.485335, - "CAM_C": 338463.48529 + "CAM_A": 350765.833425, + "CAM_B": 350765.841772, + "CAM_C": 350765.841402 } }, { - "frame_id": 482, + "frame_id": 1440, "sync_ok": true, - "sync_dt_ms": 7.457999978214502, + "sync_dt_ms": 8.345999987795949, "timestamps": { - "CAM_A": 338463.544544, - "CAM_B": 338463.552002, - "CAM_C": 338463.551957 + "CAM_A": 350766.033424, + "CAM_B": 350766.04177, + "CAM_C": 350766.041401 } }, { - "frame_id": 483, + "frame_id": 1441, "sync_ok": true, - "sync_dt_ms": 7.457999978214502, + "sync_dt_ms": 8.345999987795949, "timestamps": { - "CAM_A": 338463.677878, - "CAM_B": 338463.685336, - "CAM_C": 338463.68529 + "CAM_A": 350766.166757, + "CAM_B": 350766.175103, + "CAM_C": 350766.174737 } }, { - "frame_id": 484, - "sync_ok": true, - "sync_dt_ms": 7.459999993443489, - "timestamps": { - "CAM_A": 338463.844543, - "CAM_B": 338463.852003, - "CAM_C": 338463.851957 - } - }, - { - "frame_id": 485, - "sync_ok": true, - "sync_dt_ms": 7.4610000010579824, - "timestamps": { - "CAM_A": 338463.944543, - "CAM_B": 338463.952004, - "CAM_C": 338463.951958 - } - }, - { - "frame_id": 486, - "sync_ok": true, - "sync_dt_ms": 7.4610000010579824, - "timestamps": { - "CAM_A": 338464.044543, - "CAM_B": 338464.052004, - "CAM_C": 338464.051958 - } - }, - { - "frame_id": 487, - "sync_ok": true, - "sync_dt_ms": 7.462000008672476, - "timestamps": { - "CAM_A": 338464.177876, - "CAM_B": 338464.185338, - "CAM_C": 338464.185292 - } - }, - { - "frame_id": 488, - "sync_ok": true, - "sync_dt_ms": 7.462000008672476, - "timestamps": { - "CAM_A": 338464.277876, - "CAM_B": 338464.285338, - "CAM_C": 338464.285292 - } - }, - { - "frame_id": 489, - "sync_ok": true, - "sync_dt_ms": 7.464999973308295, - "timestamps": { - "CAM_A": 338464.444541, - "CAM_B": 338464.452006, - "CAM_C": 338464.451959 - } - }, - { - "frame_id": 490, - "sync_ok": true, - "sync_dt_ms": 7.465000031515956, - "timestamps": { - "CAM_A": 338464.544541, - "CAM_B": 338464.552006, - "CAM_C": 338464.55196 - } - }, - { - "frame_id": 491, + "frame_id": 1442, "sync_ok": false, - "sync_dt_ms": 40.75300000840798, + "sync_dt_ms": 41.31299996515736, "timestamps": { - "CAM_A": 338464.64454, - "CAM_B": 338464.652006, - "CAM_C": 338464.685293 + "CAM_A": 350766.300089, + "CAM_B": 350766.308438, + "CAM_C": 350766.341402 } }, { - "frame_id": 492, + "frame_id": 1443, "sync_ok": true, - "sync_dt_ms": 7.465999980922788, + "sync_dt_ms": 8.350000018253922, "timestamps": { - "CAM_A": 338464.777874, - "CAM_B": 338464.78534, - "CAM_C": 338464.785294 + "CAM_A": 350766.433423, + "CAM_B": 350766.441773, + "CAM_C": 350766.441402 } }, { - "frame_id": 493, + "frame_id": 1444, "sync_ok": true, - "sync_dt_ms": 7.4690000037662685, + "sync_dt_ms": 8.352999982889742, "timestamps": { - "CAM_A": 338464.944539, - "CAM_B": 338464.952008, - "CAM_C": 338464.951961 + "CAM_A": 350766.666754, + "CAM_B": 350766.675107, + "CAM_C": 350766.674736 } }, { - "frame_id": 494, + "frame_id": 1445, "sync_ok": true, - "sync_dt_ms": 7.4690000037662685, + "sync_dt_ms": 8.351999975275248, "timestamps": { - "CAM_A": 338465.077873, - "CAM_B": 338465.085342, - "CAM_C": 338465.085295 + "CAM_A": 350766.800087, + "CAM_B": 350766.808439, + "CAM_C": 350766.808071 + } + }, + { + "frame_id": 1446, + "sync_ok": true, + "sync_dt_ms": 8.353999990504235, + "timestamps": { + "CAM_A": 350766.93342, + "CAM_B": 350766.941774, + "CAM_C": 350766.941402 + } + }, + { + "frame_id": 1447, + "sync_ok": false, + "sync_dt_ms": 41.68800002662465, + "timestamps": { + "CAM_A": 350767.166752, + "CAM_B": 350767.20844, + "CAM_C": 350767.20807 + } + }, + { + "frame_id": 1448, + "sync_ok": true, + "sync_dt_ms": 8.354999998118728, + "timestamps": { + "CAM_A": 350767.333418, + "CAM_B": 350767.341773, + "CAM_C": 350767.341403 + } + }, + { + "frame_id": 1449, + "sync_ok": true, + "sync_dt_ms": 8.356999955140054, + "timestamps": { + "CAM_A": 350767.466751, + "CAM_B": 350767.475108, + "CAM_C": 350767.474737 + } + }, + { + "frame_id": 1450, + "sync_ok": false, + "sync_dt_ms": 41.689999983645976, + "timestamps": { + "CAM_A": 350767.633417, + "CAM_B": 350767.675107, + "CAM_C": 350767.674737 + } + }, + { + "frame_id": 1451, + "sync_ok": true, + "sync_dt_ms": 8.358000020962209, + "timestamps": { + "CAM_A": 350767.800083, + "CAM_B": 350767.808441, + "CAM_C": 350767.808071 + } + }, + { + "frame_id": 1452, + "sync_ok": true, + "sync_dt_ms": 8.361999993212521, + "timestamps": { + "CAM_A": 350767.933415, + "CAM_B": 350767.941777, + "CAM_C": 350767.941404 + } + }, + { + "frame_id": 1453, + "sync_ok": true, + "sync_dt_ms": 8.361999993212521, + "timestamps": { + "CAM_A": 350768.066748, + "CAM_B": 350768.07511, + "CAM_C": 350768.074738 + } + }, + { + "frame_id": 1454, + "sync_ok": true, + "sync_dt_ms": 8.363000000827014, + "timestamps": { + "CAM_A": 350768.266747, + "CAM_B": 350768.27511, + "CAM_C": 350768.274739 + } + }, + { + "frame_id": 1455, + "sync_ok": false, + "sync_dt_ms": 41.69699997873977, + "timestamps": { + "CAM_A": 350768.40008, + "CAM_B": 350768.441777, + "CAM_C": 350768.441405 + } + }, + { + "frame_id": 1456, + "sync_ok": true, + "sync_dt_ms": 8.36799998069182, + "timestamps": { + "CAM_A": 350768.566746, + "CAM_B": 350768.575114, + "CAM_C": 350768.574738 + } + }, + { + "frame_id": 1457, + "sync_ok": true, + "sync_dt_ms": 8.369999995920807, + "timestamps": { + "CAM_A": 350768.700078, + "CAM_B": 350768.708448, + "CAM_C": 350768.708073 + } + }, + { + "frame_id": 1458, + "sync_ok": true, + "sync_dt_ms": 8.368999988306314, + "timestamps": { + "CAM_A": 350768.900011, + "CAM_B": 350768.90838, + "CAM_C": 350768.908006 + } + }, + { + "frame_id": 1459, + "sync_ok": false, + "sync_dt_ms": 41.32799996295944, + "timestamps": { + "CAM_A": 350769.000011, + "CAM_B": 350769.008383, + "CAM_C": 350769.041339 + } + }, + { + "frame_id": 1460, + "sync_ok": true, + "sync_dt_ms": 8.372000011149794, + "timestamps": { + "CAM_A": 350769.166676, + "CAM_B": 350769.175048, + "CAM_C": 350769.174673 + } + }, + { + "frame_id": 1461, + "sync_ok": true, + "sync_dt_ms": 8.372000011149794, + "timestamps": { + "CAM_A": 350769.300009, + "CAM_B": 350769.308381, + "CAM_C": 350769.308007 + } + }, + { + "frame_id": 1462, + "sync_ok": true, + "sync_dt_ms": 8.37400002637878, + "timestamps": { + "CAM_A": 350769.500008, + "CAM_B": 350769.508382, + "CAM_C": 350769.508007 + } + }, + { + "frame_id": 1463, + "sync_ok": true, + "sync_dt_ms": 8.3769999910146, + "timestamps": { + "CAM_A": 350769.633341, + "CAM_B": 350769.641718, + "CAM_C": 350769.641341 + } + }, + { + "frame_id": 1464, + "sync_ok": true, + "sync_dt_ms": 8.377999998629093, + "timestamps": { + "CAM_A": 350769.766674, + "CAM_B": 350769.775052, + "CAM_C": 350769.774674 + } + }, + { + "frame_id": 1465, + "sync_ok": true, + "sync_dt_ms": 8.377999998629093, + "timestamps": { + "CAM_A": 350769.900007, + "CAM_B": 350769.908385, + "CAM_C": 350769.908007 + } + }, + { + "frame_id": 1466, + "sync_ok": true, + "sync_dt_ms": 8.379999955650419, + "timestamps": { + "CAM_A": 350770.100006, + "CAM_B": 350770.108386, + "CAM_C": 350770.108008 + } + }, + { + "frame_id": 1467, + "sync_ok": false, + "sync_dt_ms": 41.71299998415634, + "timestamps": { + "CAM_A": 350770.200005, + "CAM_B": 350770.241718, + "CAM_C": 350770.241341 + } + }, + { + "frame_id": 1468, + "sync_ok": false, + "sync_dt_ms": 41.33700003148988, + "timestamps": { + "CAM_A": 350770.333338, + "CAM_B": 350770.341719, + "CAM_C": 350770.374675 + } + }, + { + "frame_id": 1469, + "sync_ok": true, + "sync_dt_ms": 8.382999978493899, + "timestamps": { + "CAM_A": 350770.466671, + "CAM_B": 350770.475054, + "CAM_C": 350770.474675 + } + }, + { + "frame_id": 1470, + "sync_ok": true, + "sync_dt_ms": 8.384000044316053, + "timestamps": { + "CAM_A": 350770.700003, + "CAM_B": 350770.708387, + "CAM_C": 350770.708008 + } + }, + { + "frame_id": 1471, + "sync_ok": false, + "sync_dt_ms": 41.338999988511205, + "timestamps": { + "CAM_A": 350770.800003, + "CAM_B": 350770.808387, + "CAM_C": 350770.841342 + } + }, + { + "frame_id": 1472, + "sync_ok": true, + "sync_dt_ms": 8.38600000133738, + "timestamps": { + "CAM_A": 350770.933335, + "CAM_B": 350770.941721, + "CAM_C": 350770.941343 + } + }, + { + "frame_id": 1473, + "sync_ok": true, + "sync_dt_ms": 8.38600000133738, + "timestamps": { + "CAM_A": 350771.066668, + "CAM_B": 350771.075054, + "CAM_C": 350771.074677 + } + }, + { + "frame_id": 1474, + "sync_ok": false, + "sync_dt_ms": 41.341999953147024, + "timestamps": { + "CAM_A": 350771.266668, + "CAM_B": 350771.275057, + "CAM_C": 350771.30801 + } + }, + { + "frame_id": 1475, + "sync_ok": false, + "sync_dt_ms": 41.723999951500446, + "timestamps": { + "CAM_A": 350771.4, + "CAM_B": 350771.441724, + "CAM_C": 350771.441343 + } + }, + { + "frame_id": 1476, + "sync_ok": true, + "sync_dt_ms": 8.392999996431172, + "timestamps": { + "CAM_A": 350771.566666, + "CAM_B": 350771.575059, + "CAM_C": 350771.574676 + } + }, + { + "frame_id": 1477, + "sync_ok": true, + "sync_dt_ms": 8.394000004045665, + "timestamps": { + "CAM_A": 350771.799998, + "CAM_B": 350771.808392, + "CAM_C": 350771.80801 + } + }, + { + "frame_id": 1478, + "sync_ok": false, + "sync_dt_ms": 41.344999975990504, + "timestamps": { + "CAM_A": 350771.899998, + "CAM_B": 350771.908395, + "CAM_C": 350771.941343 + } + }, + { + "frame_id": 1479, + "sync_ok": true, + "sync_dt_ms": 8.396000019274652, + "timestamps": { + "CAM_A": 350772.066663, + "CAM_B": 350772.075059, + "CAM_C": 350772.074677 + } + }, + { + "frame_id": 1480, + "sync_ok": true, + "sync_dt_ms": 8.398000034503639, + "timestamps": { + "CAM_A": 350772.199996, + "CAM_B": 350772.208394, + "CAM_C": 350772.208011 + } + }, + { + "frame_id": 1481, + "sync_ok": true, + "sync_dt_ms": 8.398999983910471, + "timestamps": { + "CAM_A": 350772.399996, + "CAM_B": 350772.408395, + "CAM_C": 350772.408011 + } + }, + { + "frame_id": 1482, + "sync_ok": false, + "sync_dt_ms": 41.34999995585531, + "timestamps": { + "CAM_A": 350772.499995, + "CAM_B": 350772.508395, + "CAM_C": 350772.541345 + } + }, + { + "frame_id": 1483, + "sync_ok": true, + "sync_dt_ms": 8.400999999139458, + "timestamps": { + "CAM_A": 350772.633327, + "CAM_B": 350772.641728, + "CAM_C": 350772.641345 + } + }, + { + "frame_id": 1484, + "sync_ok": true, + "sync_dt_ms": 8.403999963775277, + "timestamps": { + "CAM_A": 350772.76666, + "CAM_B": 350772.775064, + "CAM_C": 350772.774678 + } + }, + { + "frame_id": 1485, + "sync_ok": true, + "sync_dt_ms": 8.403999963775277, + "timestamps": { + "CAM_A": 350772.966659, + "CAM_B": 350772.975063, + "CAM_C": 350772.974678 + } + }, + { + "frame_id": 1486, + "sync_ok": true, + "sync_dt_ms": 8.405000029597431, + "timestamps": { + "CAM_A": 350773.099992, + "CAM_B": 350773.108397, + "CAM_C": 350773.108012 + } + }, + { + "frame_id": 1487, + "sync_ok": true, + "sync_dt_ms": 8.405000029597431, + "timestamps": { + "CAM_A": 350773.233325, + "CAM_B": 350773.24173, + "CAM_C": 350773.241346 + } + }, + { + "frame_id": 1488, + "sync_ok": true, + "sync_dt_ms": 8.406000037211925, + "timestamps": { + "CAM_A": 350773.366658, + "CAM_B": 350773.375064, + "CAM_C": 350773.374679 + } + }, + { + "frame_id": 1489, + "sync_ok": false, + "sync_dt_ms": 41.35600000154227, + "timestamps": { + "CAM_A": 350773.566657, + "CAM_B": 350773.575066, + "CAM_C": 350773.608013 + } + }, + { + "frame_id": 1490, + "sync_ok": false, + "sync_dt_ms": 41.7429999797605, + "timestamps": { + "CAM_A": 350773.69999, + "CAM_B": 350773.741733, + "CAM_C": 350773.741347 + } + }, + { + "frame_id": 1491, + "sync_ok": true, + "sync_dt_ms": 8.41399998171255, + "timestamps": { + "CAM_A": 350773.866655, + "CAM_B": 350773.875069, + "CAM_C": 350773.87468 + } + }, + { + "frame_id": 1492, + "sync_ok": false, + "sync_dt_ms": 41.744999994989485, + "timestamps": { + "CAM_A": 350773.966655, + "CAM_B": 350774.0084, + "CAM_C": 350774.008013 + } + }, + { + "frame_id": 1493, + "sync_ok": true, + "sync_dt_ms": 8.41399998171255, + "timestamps": { + "CAM_A": 350774.199987, + "CAM_B": 350774.208401, + "CAM_C": 350774.208014 + } + }, + { + "frame_id": 1494, + "sync_ok": true, + "sync_dt_ms": 8.418000012170523, + "timestamps": { + "CAM_A": 350774.299987, + "CAM_B": 350774.308405, + "CAM_C": 350774.308014 + } + }, + { + "frame_id": 1495, + "sync_ok": true, + "sync_dt_ms": 8.415000047534704, + "timestamps": { + "CAM_A": 350774.466653, + "CAM_B": 350774.475068, + "CAM_C": 350774.474681 + } + }, + { + "frame_id": 1496, + "sync_ok": true, + "sync_dt_ms": 8.41700000455603, + "timestamps": { + "CAM_A": 350774.599985, + "CAM_B": 350774.608402, + "CAM_C": 350774.608014 + } + }, + { + "frame_id": 1497, + "sync_ok": true, + "sync_dt_ms": 8.419000019785017, + "timestamps": { + "CAM_A": 350774.799985, + "CAM_B": 350774.808404, + "CAM_C": 350774.808015 + } + }, + { + "frame_id": 1498, + "sync_ok": true, + "sync_dt_ms": 8.421000035014004, + "timestamps": { + "CAM_A": 350774.933317, + "CAM_B": 350774.941738, + "CAM_C": 350774.941348 } } ], @@ -15066,21 +15066,21 @@ "flat_norm_key": "flat_norm_R", "white_median_key": "white_median_R", "dark_median_key": "dark_median_R", - "gain_min": 0.5480560660362244, - "gain_max": 1.6087802648544312, - "gain_mean": 1.0039905309677124, - "gain_std": 0.28920215368270874, + "gain_min": 0.5639018416404724, + "gain_max": 1.8886771202087402, + "gain_mean": 1.0681155920028687, + "gain_std": 0.3506295084953308, "white_signal_stats": { "valid": true, - "mean": 0.3907608687877655, - "std": 0.2809775471687317, + "mean": 0.4134359657764435, + "std": 0.2713942527770996, "p01": 0.0, - "p05": 0.025558410212397575, - "p50": 0.31635308265686035, - "p95": 0.9334045648574829, - "p99": 1.0, - "sat_pct": 1.95, - "dark_pct": 3.358984375 + "p05": 0.023122180253267288, + "p50": 0.3815130889415741, + "p95": 0.926323413848877, + "p99": 0.9999995827674866, + "sat_pct": 1.8632812499999998, + "dark_pct": 3.656640625 } }, "G": { @@ -15092,21 +15092,21 @@ "flat_norm_key": "flat_norm_G", "white_median_key": "white_median_G", "dark_median_key": "dark_median_G", - "gain_min": 0.5317091345787048, - "gain_max": 1.8951553106307983, - "gain_mean": 1.0328274965286255, - "gain_std": 0.3529214859008789, + "gain_min": 0.5427238941192627, + "gain_max": 2.177884101867676, + "gain_mean": 1.0985527038574219, + "gain_std": 0.4235461354255676, "white_signal_stats": { "valid": true, - "mean": 0.415198415517807, - "std": 0.27684783935546875, + "mean": 0.4249175190925598, + "std": 0.270187109708786, "p01": 0.0, - "p05": 0.029957445338368416, - "p50": 0.350130558013916, - "p95": 0.9411033987998962, + "p05": 0.024895550683140755, + "p50": 0.39447832107543945, + "p95": 0.9275228381156921, "p99": 1.0, - "sat_pct": 2.013671875, - "dark_pct": 3.1429687499999996 + "sat_pct": 1.8624999999999998, + "dark_pct": 3.4816406250000003 } }, "B": { @@ -15118,73 +15118,73 @@ "flat_norm_key": "flat_norm_B", "white_median_key": "white_median_B", "dark_median_key": "dark_median_B", - "gain_min": 0.5656915903091431, - "gain_max": 1.8551995754241943, - "gain_mean": 1.0326939821243286, - "gain_std": 0.3330632746219635, + "gain_min": 0.57332444190979, + "gain_max": 1.991808533668518, + "gain_mean": 1.0765669345855713, + "gain_std": 0.36871764063835144, "white_signal_stats": { "valid": true, - "mean": 0.43463394045829773, - "std": 0.2784397602081299, + "mean": 0.43237531185150146, + "std": 0.2711445391178131, "p01": 0.0, - "p05": 0.03415222465991974, - "p50": 0.3756799101829529, - "p95": 0.9501466751098633, + "p05": 0.026977332308888435, + "p50": 0.4031939208507538, + "p95": 0.9295872449874878, "p99": 1.0, - "sat_pct": 2.212890625, - "dark_pct": 2.865625 + "sat_pct": 1.9132812499999998, + "dark_pct": 3.332421875 } }, "RE": { "shape": [ 800, - 1600 + 1280 ], "gain_key": "gain_RE", "flat_norm_key": "flat_norm_RE", "white_median_key": "white_median_RE", "dark_median_key": "dark_median_RE", - "gain_min": 0.955564022064209, - "gain_max": 4.0, - "gain_mean": 1.2053359746932983, - "gain_std": 0.28413665294647217, + "gain_min": 0.7719405889511108, + "gain_max": 1.6437114477157593, + "gain_mean": 1.0222759246826172, + "gain_std": 0.19225353002548218, "white_signal_stats": { "valid": true, - "mean": 0.631171703338623, - "std": 0.23936878144741058, - "p01": 7.279488301037418e-08, - "p05": 0.13254357874393463, - "p50": 0.6718320846557617, - "p95": 0.9501800537109375, + "mean": 0.5707723498344421, + "std": 0.2610760033130646, + "p01": 0.0, + "p05": 0.09382370114326477, + "p50": 0.5555976033210754, + "p95": 0.965719997882843, "p99": 1.0, - "sat_pct": 2.28359375, - "dark_pct": 1.2437500000000001 + "sat_pct": 2.5050781250000003, + "dark_pct": 1.6770507812499997 } }, "NIR": { "shape": [ 800, - 1600 + 1280 ], "gain_key": "gain_NIR", "flat_norm_key": "flat_norm_NIR", "white_median_key": "white_median_NIR", "dark_median_key": "dark_median_NIR", - "gain_min": 0.8534727096557617, - "gain_max": 4.0, - "gain_mean": 1.146588921546936, - "gain_std": 0.4995245635509491, + "gain_min": 0.808167576789856, + "gain_max": 1.5716955661773682, + "gain_mean": 1.021193265914917, + "gain_std": 0.1498267650604248, "white_signal_stats": { "valid": true, - "mean": 0.6661378145217896, - "std": 0.2007295787334442, - "p01": 1.109380676211913e-07, - "p05": 0.25269243121147156, - "p50": 0.6728745698928833, - "p95": 0.9449974894523621, + "mean": 0.5710085034370422, + "std": 0.24658380448818207, + "p01": 0.0, + "p05": 0.11108382046222687, + "p50": 0.5721622109413147, + "p95": 0.9383468627929688, "p99": 1.0, - "sat_pct": 1.7489062499999999, - "dark_pct": 1.1205468749999998 + "sat_pct": 1.743359375, + "dark_pct": 1.34619140625 } } } diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.npz b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.npz index c170431a2..2fd2b6865 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.npz and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_maps_v1.npz differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_B.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_B.png index 209d410cb..399695583 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_B.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_B.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_G.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_G.png index 0db0e8bbb..a24044160 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_G.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_G.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_NIR.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_NIR.png index 62f3060f9..ff8e832cc 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_NIR.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_NIR.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_R.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_R.png index ba691a72f..2be447b3e 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_R.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_R.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_RE.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_RE.png index 24c5c1b84..3773b6508 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_RE.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/gain_RE.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_B.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_B.png index a5c8cb28b..020553970 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_B.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_B.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_G.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_G.png index 96148b4be..9c459b601 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_G.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_G.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_NIR.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_NIR.png index ae6bb74db..cd9c9453b 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_NIR.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_NIR.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_R.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_R.png index 71e6ded5c..ad75058a0 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_R.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_R.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_RE.png b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_RE.png index 985e4fc29..3803ef431 100644 Binary files a/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_RE.png and b/Python/OAK/datasets/oak-fcc-3/calibration/flatfield_previews/white_signal_RE.png differ diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/module_params.json b/Python/OAK/datasets/oak-fcc-3/calibration/module_params.json index 780a23f72..ba2e8c9cd 100644 --- a/Python/OAK/datasets/oak-fcc-3/calibration/module_params.json +++ b/Python/OAK/datasets/oak-fcc-3/calibration/module_params.json @@ -1,6 +1,6 @@ { "schema": "multispec_module_params_v3", - "saved_at": "2026-05-06 10:16:07", + "saved_at": "2026-05-07 09:03:53", "frame_type": "RAW_BRUTO", "capture_mode_requested": "AUTO", "capture_mode_effective": "AUTO", @@ -12,7 +12,7 @@ "rgb": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 2000, + "exposure_time_us": 4800, "analogue_gain": 1.0, "colour_gains": [ 1.0, @@ -22,14 +22,14 @@ "re": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5000, + "exposure_time_us": 13200, "analogue_gain": 1.0, "colour_gains": null }, "nir": { "ae_enable": false, "awb_enable": false, - "exposure_time_us": 5000, + "exposure_time_us": 13200, "analogue_gain": 1.0, "colour_gains": null } @@ -94,20 +94,13 @@ "enabled": true, "interval_s": 0.5, "verbose": true, - "metering_mode": "global", + "metering_mode": "reference_patches", "spectral_control_mode": "shared", - "global_roi_pct": { - "x0": 0.082812, - "y0": 0.08, - "x1": 0.903125, - "y1": 0.905 - }, "control_metric": "p50", - "target_value": 0.4, - "deadband": 0.04, - "p95_limit": 0.94, - "saturation_limit_pct": 1.0, - "dark_limit_pct": 35.0, + "target_value": 0.5, + "deadband": 0.035, + "p95_limit": 0.95, + "saturation_limit_pct": 2.0, "alpha": 0.18, "exp_step_gain": 0.55, "prefer_exposure": true, @@ -115,46 +108,231 @@ "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 4.0, - "role_limits": { - "rgb": { - "exp_min_us": 100, - "exp_max_us": 80000, - "gain_min": 1.0, - "gain_max": 4.0 + "reference_patches": [ + { + "name": "black_reference", + "type": "black", + "roles": [ + "rgb", + "re", + "nir" + ], + "roi_pct": { + "x0": 0.015625, + "y0": 0.9025, + "x1": 0.1125, + "y1": 0.995 + }, + "target_value": 0.08, + "weight": 0.7, + "roi_pct_by_role": { + "rgb": { + "x0": 0.015625, + "y0": 0.9025, + "x1": 0.1125, + "y1": 0.995 + }, + "re": { + "x0": 0.034375, + "y0": 0.83, + "x1": 0.132812, + "y1": 0.925 + }, + "nir": { + "x0": 0.0125, + "y0": 0.86, + "x1": 0.107813, + "y1": 0.95 + } + } }, - "re": { - "exp_min_us": 100, - "exp_max_us": 80000, - "gain_min": 1.0, - "gain_max": 3.0 + { + "name": "gray_reference", + "type": "gray", + "roles": [ + "rgb", + "re", + "nir" + ], + "roi_pct": { + "x0": 0.475, + "y0": 0.895, + "x1": 0.56875, + "y1": 0.995 + }, + "target_value": 0.42, + "target_value_by_role": { + "rgb": 0.42, + "re": 0.36, + "nir": 0.40 + }, + "weight": 1.0, + "roi_pct_by_role": { + "rgb": { + "x0": 0.475, + "y0": 0.895, + "x1": 0.56875, + "y1": 0.995 + }, + "re": { + "x0": 0.5, + "y0": 0.83, + "x1": 0.590625, + "y1": 0.9225 + }, + "nir": { + "x0": 0.470313, + "y0": 0.86, + "x1": 0.565625, + "y1": 0.9625 + } + } }, - "nir": { - "exp_min_us": 100, - "exp_max_us": 80000, - "gain_min": 1.0, - "gain_max": 3.0 + { + "name": "white_reference", + "type": "white", + "roles": [ + "rgb", + "re", + "nir" + ], + "roi_pct": { + "x0": 0.870313, + "y0": 0.9025, + "x1": 0.9625, + "y1": 0.995 + }, + "target_value": 0.82, + "weight": 0.8, + "roi_pct_by_role": { + "rgb": { + "x0": 0.870313, + "y0": 0.9025, + "x1": 0.9625, + "y1": 0.995 + }, + "re": { + "x0": 0.89375, + "y0": 0.8325, + "x1": 0.984375, + "y1": 0.93 + }, + "nir": { + "x0": 0.875, + "y0": 0.86, + "x1": 0.970313, + "y1": 0.96 + } + } } - }, + ], "exp_apply_threshold_us": 80, "gain_apply_threshold": 0.05, "apply_same_spectral_to_both": true, "spectral_roles": [ "re", "nir" - ] + ], + "dark_limit_pct": 35.0, + "control_strategy": "ratio", + "ratio_alpha": 0.55, + "ratio_min": 0.55, + "ratio_max": 1.20, + "reduce_fast_factor": 0.60, + "factor_min": 0.72, + "factor_max": 1.28, + "gain_return_enabled": true, + "gain_reduce_on_saturation": true, + "gain_increase_required_cycles": 5, + "gain_decrease_required_cycles": 2, + "gain_step_up": 0.2, + "gain_step_down": 0.5, + "gain_hard_reset_on_saturation": false, + "exp_high_ratio_for_gain": 0.95, + "exp_low_ratio_for_gain_return": 0.75, + "role_limits": { + "rgb": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + }, + "re": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + }, + "nir": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + } + }, + "ready_required_cycles": 3, + "patch_control_mode": "gray_primary", + "patch_require_order": true, + "patch_min_separation": 0.08, + "patch_white_sat_limit_pct": 2.0, + "patch_white_p95_limit": 0.94, + "patch_black_dark_limit_pct": 80.0, + "patch_black_max_p50": 0.2, + "patch_gray_min_p50": 0.08, + "patch_gray_max_p50": 0.85 + }, + "radiometric_normalization": { + "enabled": true, + "method": "exposure_gain_reference", + "apply_stage": "after_dark_before_flat_gain", + "reference_controls": { + "rgb": { + "exposure_time_us": 4800, + "analogue_gain": 1.0 + }, + "re": { + "exposure_time_us": 13200, + "analogue_gain": 1.0 + }, + "nir": { + "exposure_time_us": 13200, + "analogue_gain": 1.0 + } + }, + "clip_output": true + }, + "patch_normalization": { + "enabled": true, + "apply_when_metering_mode": "reference_patches", + "apply_stage": "after_fusion", + "method": "gray_scale_with_white_guard", + "space": "multispec_tensor", + "targets": { + "black": 0.06, + "gray": 0.4, + "white": 0.78 + }, + "white_guard_max": 0.92, + "scale_min": 0.35, + "scale_max": 2.5, + "clip_output": true, + "require_valid_gray": true, + "use_black_for_offset": false, + "save_patch_stats": true }, "rgb_calibration": { "enabled": true, "gains": { - "R": 1.0, + "R": 1.2500000000000002, "G": 1.0, - "B": 1.0 + "B": 1.5500000000000005 } }, "flatfield_config": { "enabled": true, + "subtract_dark": true, "schema": "multispec_flatfield_v1", - "created_at": "2026-05-06 10:14:01", + "created_at": "2026-05-06 13:37:25", "json_file": "calibration/flatfield_maps_v1.json", "npz_file": "calibration/flatfield_maps_v1.npz", "apply_before_fusion": true, @@ -179,10 +357,10 @@ 400, 640 ], - "gain_min": 0.5480560660362244, - "gain_max": 1.6087802648544312, - "gain_mean": 1.0039905309677124, - "gain_std": 0.28920215368270874 + "gain_min": 0.5639018416404724, + "gain_max": 1.8886771202087402, + "gain_mean": 1.0681155920028687, + "gain_std": 0.3506295084953308 }, "G": { "gain_key": "gain_G", @@ -193,10 +371,10 @@ 400, 640 ], - "gain_min": 0.5317091345787048, - "gain_max": 1.8951553106307983, - "gain_mean": 1.0328274965286255, - "gain_std": 0.3529214859008789 + "gain_min": 0.5427238941192627, + "gain_max": 2.177884101867676, + "gain_mean": 1.0985527038574219, + "gain_std": 0.4235461354255676 }, "B": { "gain_key": "gain_B", @@ -207,10 +385,10 @@ 400, 640 ], - "gain_min": 0.5656915903091431, - "gain_max": 1.8551995754241943, - "gain_mean": 1.0326939821243286, - "gain_std": 0.3330632746219635 + "gain_min": 0.57332444190979, + "gain_max": 1.991808533668518, + "gain_mean": 1.0765669345855713, + "gain_std": 0.36871764063835144 }, "RE": { "gain_key": "gain_RE", @@ -219,12 +397,12 @@ "dark_median_key": "dark_median_RE", "shape": [ 800, - 1600 + 1280 ], - "gain_min": 0.955564022064209, - "gain_max": 4.0, - "gain_mean": 1.2053359746932983, - "gain_std": 0.28413665294647217 + "gain_min": 0.7719405889511108, + "gain_max": 1.6437114477157593, + "gain_mean": 1.0222759246826172, + "gain_std": 0.19225353002548218 }, "NIR": { "gain_key": "gain_NIR", @@ -233,12 +411,12 @@ "dark_median_key": "dark_median_NIR", "shape": [ 800, - 1600 + 1280 ], - "gain_min": 0.8534727096557617, - "gain_max": 4.0, - "gain_mean": 1.146588921546936, - "gain_std": 0.4995245635509491 + "gain_min": 0.808167576789856, + "gain_max": 1.5716955661773682, + "gain_mean": 1.021193265914917, + "gain_std": 0.1498267650604248 } }, "exp_gain_correct_during_flat_capture": true, diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/radiometric_config.json b/Python/OAK/datasets/oak-fcc-3/calibration/radiometric_config.json index da9a9786b..ff8331deb 100644 --- a/Python/OAK/datasets/oak-fcc-3/calibration/radiometric_config.json +++ b/Python/OAK/datasets/oak-fcc-3/calibration/radiometric_config.json @@ -51,7 +51,44 @@ "spectral_roles": [ "re", "nir" - ] + ], + "control_strategy": "ratio", + "ratio_alpha": 0.55, + "ratio_min": 0.55, + "ratio_max": 1.85, + "reduce_fast_factor": 0.75, + "factor_min": 0.72, + "factor_max": 1.28, + "gain_return_enabled": true, + "gain_reduce_on_saturation": true, + "gain_increase_required_cycles": 5, + "gain_decrease_required_cycles": 2, + "gain_step_up": 0.2, + "gain_step_down": 0.5, + "gain_hard_reset_on_saturation": false, + "exp_high_ratio_for_gain": 0.95, + "exp_low_ratio_for_gain_return": 0.75, + "ready_required_cycles": 3, + "global_roi_pct_by_role": { + "rgb": { + "x0": 0.08, + "y0": 0.08, + "x1": 0.92, + "y1": 0.92 + }, + "re": { + "x0": 0.08, + "y0": 0.08, + "x1": 0.92, + "y1": 0.92 + }, + "nir": { + "x0": 0.08, + "y0": 0.08, + "x1": 0.92, + "y1": 0.92 + } + } } }, "three_reference_patches_mode": { @@ -83,13 +120,33 @@ "nir" ], "roi_pct": { - "x0": 0.05, - "y0": 0.92, - "x1": 0.18, - "y1": 0.99 + "x0": 0.015625, + "y0": 0.9025, + "x1": 0.1125, + "y1": 0.995 }, "target_value": 0.08, - "weight": 0.7 + "weight": 0.7, + "roi_pct_by_role": { + "rgb": { + "x0": 0.015625, + "y0": 0.9025, + "x1": 0.1125, + "y1": 0.995 + }, + "re": { + "x0": 0.034375, + "y0": 0.83, + "x1": 0.132812, + "y1": 0.925 + }, + "nir": { + "x0": 0.0125, + "y0": 0.86, + "x1": 0.107813, + "y1": 0.95 + } + } }, { "name": "gray_reference", @@ -100,13 +157,33 @@ "nir" ], "roi_pct": { - "x0": 0.35, - "y0": 0.92, - "x1": 0.55, - "y1": 0.99 + "x0": 0.475, + "y0": 0.895, + "x1": 0.56875, + "y1": 0.995 }, "target_value": 0.5, - "weight": 1.0 + "weight": 1.0, + "roi_pct_by_role": { + "rgb": { + "x0": 0.475, + "y0": 0.895, + "x1": 0.56875, + "y1": 0.995 + }, + "re": { + "x0": 0.5, + "y0": 0.83, + "x1": 0.590625, + "y1": 0.9225 + }, + "nir": { + "x0": 0.470313, + "y0": 0.86, + "x1": 0.565625, + "y1": 0.9625 + } + } }, { "name": "white_reference", @@ -117,13 +194,33 @@ "nir" ], "roi_pct": { - "x0": 0.75, - "y0": 0.92, - "x1": 0.95, - "y1": 0.99 + "x0": 0.870313, + "y0": 0.9025, + "x1": 0.9625, + "y1": 0.995 }, "target_value": 0.82, - "weight": 0.8 + "weight": 0.8, + "roi_pct_by_role": { + "rgb": { + "x0": 0.870313, + "y0": 0.9025, + "x1": 0.9625, + "y1": 0.995 + }, + "re": { + "x0": 0.89375, + "y0": 0.8325, + "x1": 0.984375, + "y1": 0.93 + }, + "nir": { + "x0": 0.875, + "y0": 0.86, + "x1": 0.970313, + "y1": 0.96 + } + } } ], "exp_apply_threshold_us": 80, @@ -132,7 +229,54 @@ "spectral_roles": [ "re", "nir" - ] + ], + "dark_limit_pct": 35.0, + "control_strategy": "ratio", + "ratio_alpha": 0.55, + "ratio_min": 0.55, + "ratio_max": 1.85, + "reduce_fast_factor": 0.75, + "factor_min": 0.72, + "factor_max": 1.28, + "gain_return_enabled": true, + "gain_reduce_on_saturation": true, + "gain_increase_required_cycles": 5, + "gain_decrease_required_cycles": 2, + "gain_step_up": 0.2, + "gain_step_down": 0.5, + "gain_hard_reset_on_saturation": false, + "exp_high_ratio_for_gain": 0.95, + "exp_low_ratio_for_gain_return": 0.75, + "role_limits": { + "rgb": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + }, + "re": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + }, + "nir": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + } + }, + "ready_required_cycles": 3, + "patch_control_mode": "gray_primary", + "patch_require_order": true, + "patch_min_separation": 0.08, + "patch_white_sat_limit_pct": 0.5, + "patch_white_p95_limit": 0.9, + "patch_black_dark_limit_pct": 80.0, + "patch_black_max_p50": 0.2, + "patch_gray_min_p50": 0.08, + "patch_gray_max_p50": 0.85 } }, "legacy_patch_mode": { @@ -158,6 +302,212 @@ "verbose": true } }, - "schema": "multispec_radiometric_config_profiles_v1", - "saved_at": "2026-05-06 09:58:16" + "schema": "multispec_radiometric_config_profiles_v3", + "saved_at": "2026-05-07 08:55:15", + "active_profile": "three_reference_patches_mode", + "patch_normalization": { + "enabled": true, + "apply_when_metering_mode": "reference_patches", + "apply_stage": "after_fusion", + "method": "gray_scale_with_white_guard", + "space": "multispec_tensor", + "targets": { + "black": 0.06, + "gray": 0.4, + "white": 0.78 + }, + "white_guard_max": 0.92, + "scale_min": 0.35, + "scale_max": 2.5, + "clip_output": true, + "require_valid_gray": true, + "use_black_for_offset": false, + "save_patch_stats": true + }, + "radiometric_config": { + "enabled": true, + "interval_s": 0.5, + "verbose": true, + "metering_mode": "reference_patches", + "spectral_control_mode": "shared", + "control_metric": "p50", + "target_value": 0.5, + "deadband": 0.035, + "p95_limit": 0.92, + "saturation_limit_pct": 0.5, + "alpha": 0.18, + "exp_step_gain": 0.55, + "prefer_exposure": true, + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 4.0, + "reference_patches": [ + { + "name": "black_reference", + "type": "black", + "roles": [ + "rgb", + "re", + "nir" + ], + "roi_pct": { + "x0": 0.015625, + "y0": 0.9025, + "x1": 0.1125, + "y1": 0.995 + }, + "target_value": 0.08, + "weight": 0.7, + "roi_pct_by_role": { + "rgb": { + "x0": 0.015625, + "y0": 0.9025, + "x1": 0.1125, + "y1": 0.995 + }, + "re": { + "x0": 0.034375, + "y0": 0.83, + "x1": 0.132812, + "y1": 0.925 + }, + "nir": { + "x0": 0.0125, + "y0": 0.86, + "x1": 0.107813, + "y1": 0.95 + } + } + }, + { + "name": "gray_reference", + "type": "gray", + "roles": [ + "rgb", + "re", + "nir" + ], + "roi_pct": { + "x0": 0.475, + "y0": 0.895, + "x1": 0.56875, + "y1": 0.995 + }, + "target_value": 0.5, + "weight": 1.0, + "roi_pct_by_role": { + "rgb": { + "x0": 0.475, + "y0": 0.895, + "x1": 0.56875, + "y1": 0.995 + }, + "re": { + "x0": 0.5, + "y0": 0.83, + "x1": 0.590625, + "y1": 0.9225 + }, + "nir": { + "x0": 0.470313, + "y0": 0.86, + "x1": 0.565625, + "y1": 0.9625 + } + } + }, + { + "name": "white_reference", + "type": "white", + "roles": [ + "rgb", + "re", + "nir" + ], + "roi_pct": { + "x0": 0.870313, + "y0": 0.9025, + "x1": 0.9625, + "y1": 0.995 + }, + "target_value": 0.82, + "weight": 0.8, + "roi_pct_by_role": { + "rgb": { + "x0": 0.870313, + "y0": 0.9025, + "x1": 0.9625, + "y1": 0.995 + }, + "re": { + "x0": 0.89375, + "y0": 0.8325, + "x1": 0.984375, + "y1": 0.93 + }, + "nir": { + "x0": 0.875, + "y0": 0.86, + "x1": 0.970313, + "y1": 0.96 + } + } + } + ], + "exp_apply_threshold_us": 80, + "gain_apply_threshold": 0.05, + "apply_same_spectral_to_both": true, + "spectral_roles": [ + "re", + "nir" + ], + "dark_limit_pct": 35.0, + "control_strategy": "ratio", + "ratio_alpha": 0.55, + "ratio_min": 0.55, + "ratio_max": 1.85, + "reduce_fast_factor": 0.75, + "factor_min": 0.72, + "factor_max": 1.28, + "gain_return_enabled": true, + "gain_reduce_on_saturation": true, + "gain_increase_required_cycles": 5, + "gain_decrease_required_cycles": 2, + "gain_step_up": 0.2, + "gain_step_down": 0.5, + "gain_hard_reset_on_saturation": false, + "exp_high_ratio_for_gain": 0.95, + "exp_low_ratio_for_gain_return": 0.75, + "role_limits": { + "rgb": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + }, + "re": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + }, + "nir": { + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 2.0 + } + }, + "ready_required_cycles": 3, + "patch_control_mode": "gray_primary", + "patch_require_order": true, + "patch_min_separation": 0.08, + "patch_white_sat_limit_pct": 0.5, + "patch_white_p95_limit": 0.9, + "patch_black_dark_limit_pct": 80.0, + "patch_black_max_p50": 0.2, + "patch_gray_min_p50": 0.08, + "patch_gray_max_p50": 0.85 + } } \ No newline at end of file diff --git a/Python/OAK/datasets/oak-fcc-3/calibration/sensor_calibration.json b/Python/OAK/datasets/oak-fcc-3/calibration/sensor_calibration.json index 033935d17..ce65a706b 100644 --- a/Python/OAK/datasets/oak-fcc-3/calibration/sensor_calibration.json +++ b/Python/OAK/datasets/oak-fcc-3/calibration/sensor_calibration.json @@ -1,6 +1,6 @@ { "schema": "multispec_camera_params_v2", - "saved_at": "2026-05-06 09:26:40", + "saved_at": "2026-05-06 13:41:54", "frame_type": "RAW_BRUTO", "capture_mode_requested": "AUTO", "capture_mode_effective": "AUTO", @@ -37,9 +37,9 @@ "rgb_calibration": { "enabled": true, "gains": { - "R": 1.0, + "R": 1.2500000000000002, "G": 1.0, - "B": 1.0 + "B": 1.5500000000000005 } }, "rois": { diff --git a/Python/OAK/datasets/oak-fcc-3/core/oak_fcc3_client.py b/Python/OAK/datasets/oak-fcc-3/core/oak_fcc3_client.py index a5fcdd316..ac8e15ec4 100644 --- a/Python/OAK/datasets/oak-fcc-3/core/oak_fcc3_client.py +++ b/Python/OAK/datasets/oak-fcc-3/core/oak_fcc3_client.py @@ -249,6 +249,12 @@ class OakFcc3Client: return previews, meta + def get_last_patch_normalization_result(self): + try: + return self.core.last_patch_normalization_result + except Exception: + return None + def build_infer_tensor(self, frame, meta, channels_expected, target_size=None): return self.core.build_infer_tensor_from_stream( frame, diff --git a/Python/OAK/datasets/oak-fcc-3/core/radiometric_controller.py b/Python/OAK/datasets/oak-fcc-3/core/radiometric_controller.py index 534d2e92d..ffdfdf4d0 100644 --- a/Python/OAK/datasets/oak-fcc-3/core/radiometric_controller.py +++ b/Python/OAK/datasets/oak-fcc-3/core/radiometric_controller.py @@ -61,16 +61,41 @@ class RadiometricController: self.patch_x1_pct = float(cfg.get("patch_x1_pct", patch_x1_pct)) global_roi = cfg.get("global_roi_pct", {}) or {} - self.global_roi_pct = { - "x0": float(global_roi.get("x0", 0.08)), - "y0": float(global_roi.get("y0", 0.08)), - "x1": float(global_roi.get("x1", 0.92)), - "y1": float(global_roi.get("y1", 0.92)), - } + self.global_roi_pct = self._safe_roi_pct( + global_roi, + fallback={"x0": 0.08, "y0": 0.08, "x1": 0.92, "y1": 0.92}, + ) + + raw_global_by_role = cfg.get("global_roi_pct_by_role", {}) or {} + self.global_roi_pct_by_role = {} + + for role in self.ROLES: + roi = raw_global_by_role.get(role) + if isinstance(roi, dict) and roi: + self.global_roi_pct_by_role[role] = self._safe_roi_pct( + roi, + fallback=self.global_roi_pct, + ) + else: + self.global_roi_pct_by_role[role] = dict(self.global_roi_pct) self.reference_patches = cfg.get("reference_patches", []) or [] self.patch_aggregation = str(cfg.get("patch_aggregation", "weighted_mean")).lower() + self.patch_control_mode = str(cfg.get("patch_control_mode", "gray_primary")).lower() + + self.patch_require_order = bool(cfg.get("patch_require_order", True)) + self.patch_min_separation = float(cfg.get("patch_min_separation", 0.08)) + + self.patch_white_sat_limit_pct = float(cfg.get("patch_white_sat_limit_pct", 0.50)) + self.patch_white_p95_limit = float(cfg.get("patch_white_p95_limit", 0.90)) + + self.patch_black_dark_limit_pct = float(cfg.get("patch_black_dark_limit_pct", 80.0)) + self.patch_black_max_p50 = float(cfg.get("patch_black_max_p50", 0.20)) + + self.patch_gray_min_p50 = float(cfg.get("patch_gray_min_p50", 0.08)) + self.patch_gray_max_p50 = float(cfg.get("patch_gray_max_p50", 0.85)) + self.control_metric = str(cfg.get("control_metric", "p50")).lower() self.target_value = float(cfg.get("target_value", cfg.get("target_mean", target_mean))) self.target_mean = self.target_value @@ -85,6 +110,52 @@ class RadiometricController: self.factor_min = float(cfg.get("factor_min", 0.72)) self.factor_max = float(cfg.get("factor_max", 1.28)) + self.saturation_hard_pct = float(cfg.get("saturation_hard_pct", 20.0)) + self.saturation_extreme_pct = float(cfg.get("saturation_extreme_pct", 60.0)) + + self.gain_return_enabled = bool(cfg.get("gain_return_enabled", True)) + self.gain_return_factor = float(cfg.get("gain_return_factor", 0.60)) + self.gain_reduce_on_saturation = bool(cfg.get("gain_reduce_on_saturation", True)) + + self.exp_high_ratio_for_gain = float(cfg.get("exp_high_ratio_for_gain", 0.85)) + self.exp_low_ratio_for_gain_return = float(cfg.get("exp_low_ratio_for_gain_return", 0.65)) + + self.gain_increase_required_cycles = int(cfg.get("gain_increase_required_cycles", 5)) + self.gain_decrease_required_cycles = int(cfg.get("gain_decrease_required_cycles", 2)) + + self.gain_step_up = float(cfg.get("gain_step_up", 0.25)) + self.gain_step_down = float(cfg.get("gain_step_down", 0.50)) + + self.gain_hard_reset_on_saturation = bool(cfg.get("gain_hard_reset_on_saturation", False)) + + self._underexposed_cycles = { + "rgb": 0, + "re": 0, + "nir": 0, + "spectral_shared": 0, + } + + self._overexposed_cycles = { + "rgb": 0, + "re": 0, + "nir": 0, + "spectral_shared": 0, + } + + self.control_strategy = str(cfg.get("control_strategy", "ratio")).lower() + + self.ratio_alpha = float(cfg.get("ratio_alpha", 0.55)) + self.ratio_min = float(cfg.get("ratio_min", 0.55)) + self.ratio_max = float(cfg.get("ratio_max", 1.85)) + + self.ready_required_cycles = int(cfg.get("ready_required_cycles", 3)) + self._ready_cycles = { + "rgb": 0, + "re": 0, + "nir": 0, + "spectral_shared": 0, + } + self.exp_min_us = int(cfg.get("exp_min_us", exp_min_us)) self.exp_max_us = int(cfg.get("exp_max_us", exp_max_us)) self.gain_min = float(cfg.get("gain_min", gain_min)) @@ -127,6 +198,60 @@ class RadiometricController: cfg = data.get("radiometric_config", {}) return cfg if isinstance(cfg, dict) else {} + ROLES = ("rgb", "re", "nir") + + @classmethod + def _normalize_role(cls, role: str) -> str: + role = str(role or "").lower() + return role if role in cls.ROLES else "rgb" + + @staticmethod + def _safe_roi_pct(roi_pct, fallback=None) -> dict: + if fallback is None: + fallback = {"x0": 0.08, "y0": 0.08, "x1": 0.92, "y1": 0.92} + + if not isinstance(roi_pct, dict): + roi_pct = fallback + + return { + "x0": float(roi_pct.get("x0", fallback.get("x0", 0.08))), + "y0": float(roi_pct.get("y0", fallback.get("y0", 0.08))), + "x1": float(roi_pct.get("x1", fallback.get("x1", 0.92))), + "y1": float(roi_pct.get("y1", fallback.get("y1", 0.92))), + } + + def _get_global_roi_pct_for_role(self, role: str) -> dict: + role = self._normalize_role(role) + + by_role = getattr(self, "global_roi_pct_by_role", {}) or {} + if isinstance(by_role, dict): + roi = by_role.get(role) + if isinstance(roi, dict) and roi: + return self._safe_roi_pct(roi, fallback=self.global_roi_pct) + + return self._safe_roi_pct(self.global_roi_pct) + + def _get_patch_roi_pct_for_role(self, patch: dict, role: str): + role = self._normalize_role(role) + + by_role = patch.get("roi_pct_by_role", {}) + if isinstance(by_role, dict): + roi = by_role.get(role) + if isinstance(roi, dict) and roi: + return self._safe_roi_pct(roi), "roi_pct_by_role" + + legacy = patch.get("roi_pct") + if isinstance(legacy, dict) and legacy: + return self._safe_roi_pct(legacy), "roi_pct" + + return None, "missing" + + def get_patch_target_for_role(self, patch, role, fallback): + by_role = patch.get("target_value_by_role", {}) + if isinstance(by_role, dict) and role in by_role: + return float(by_role[role]) + return float(patch.get("target_value", fallback)) + def sync_from_camera_controls(self, camera_controls: dict | None): if not isinstance(camera_controls, dict): return @@ -193,7 +318,7 @@ class RadiometricController: metrics = self.measure_image(img, role=role) decision = self.compute_control(role, metrics) apply_resp = self.apply_control(role, decision) - return { + result = { "mode": "single_role", "cam_id": cam_id, "role": role, @@ -202,6 +327,9 @@ class RadiometricController: "decision": decision, "apply": apply_resp, } + self._print_metrics_debug(role, result) + + return result def _update_spectral_shared(self, decoded: dict): role_items = {} @@ -230,7 +358,7 @@ class RadiometricController: else: apply_resp[state_role] = self.apply_control(state_role, decision) - return { + result = { "mode": "shared_spectral", "roles": role_items, "metering_mode": self.metering_mode, @@ -238,6 +366,70 @@ class RadiometricController: "decision": decision, "apply": apply_resp, } + self._print_metrics_debug("spectral_shared", result) + + return result + + def _update_ready_state( + self, + log_role: str, + action: str, + error: float, + p95: float, + sat_pct: float, + ) -> tuple[bool, int]: + key = str(log_role).lower() + + is_ready_now = ( + action == "hold" + and abs(float(error)) <= self.deadband + and float(p95) <= self.p95_limit + and float(sat_pct) <= self.saturation_limit_pct + ) + + if is_ready_now: + self._ready_cycles[key] = self._ready_cycles.get(key, 0) + 1 + else: + self._ready_cycles[key] = 0 + + cycles = self._ready_cycles.get(key, 0) + return cycles >= self.ready_required_cycles, cycles + + def _update_exposure_pressure_state( + self, + log_role: str, + error: float, + p95: float, + sat_pct: float, + ) -> tuple[int, int]: + key = str(log_role).lower() + + under = ( + error > self.deadband + and p95 < self.p95_limit + and sat_pct <= self.saturation_limit_pct + ) + + over = ( + error < -self.deadband + or p95 > self.p95_limit + or sat_pct > self.saturation_limit_pct + ) + + if under: + self._underexposed_cycles[key] = self._underexposed_cycles.get(key, 0) + 1 + else: + self._underexposed_cycles[key] = 0 + + if over: + self._overexposed_cycles[key] = self._overexposed_cycles.get(key, 0) + 1 + else: + self._overexposed_cycles[key] = 0 + + return ( + self._underexposed_cycles.get(key, 0), + self._overexposed_cycles.get(key, 0), + ) def _resolve_cam_id(self, decoded, role): role = str(role).lower() @@ -247,12 +439,16 @@ class RadiometricController: return None def measure_image(self, img01: np.ndarray, role: str) -> dict: + role = self._normalize_role(role) gray = self.to_luma_or_gray(img01) + if self.metering_mode == "reference_patches": return self.measure_reference_patches(gray, role=role) + if self.metering_mode == "legacy_patch": return self.measure_legacy_patch(gray) - return self.measure_global(gray) + + return self.measure_global(gray, role=role) @staticmethod def to_luma_or_gray(img01: np.ndarray) -> np.ndarray: @@ -264,19 +460,29 @@ class RadiometricController: ).astype(np.float32) return img01.astype(np.float32) - def measure_global(self, img_gray: np.ndarray) -> dict: + def measure_global(self, img_gray: np.ndarray, role: str = "rgb") -> dict: + role = self._normalize_role(role) + h, w = img_gray.shape[:2] + roi_pct = self._get_global_roi_pct_for_role(role) + roi = self._roi_pct_to_pixels( h, w, - self.global_roi_pct["x0"], - self.global_roi_pct["y0"], - self.global_roi_pct["x1"], - self.global_roi_pct["y1"], + roi_pct["x0"], + roi_pct["y0"], + roi_pct["x1"], + roi_pct["y1"], ) + arr = self._crop_array(img_gray, roi) stats = self.compute_stats(arr) + stats["roi"] = list(roi) + stats["roi_pct"] = dict(roi_pct) + stats["roi_source"] = "global_roi_pct_by_role" + stats["role"] = role stats["source"] = "global" + return stats def measure_legacy_patch(self, img_gray: np.ndarray) -> dict: @@ -295,46 +501,69 @@ class RadiometricController: return stats def measure_reference_patches(self, img_gray: np.ndarray, role: str) -> dict: + role = self._normalize_role(role) + h, w = img_gray.shape[:2] patch_results = [] + for patch in self.reference_patches: if not isinstance(patch, dict): continue + roles = patch.get("roles", ["rgb", "re", "nir", "all"]) + roles = [str(r).lower() for r in roles] + if role not in roles and "all" not in roles: continue - roi_pct = patch.get("roi_pct") + + roi_pct, roi_source = self._get_patch_roi_pct_for_role(patch, role) + if not isinstance(roi_pct, dict): continue + x0 = float(roi_pct.get("x0", 0.0)) y0 = float(roi_pct.get("y0", 0.0)) x1 = float(roi_pct.get("x1", 1.0)) y1 = float(roi_pct.get("y1", 1.0)) + roi = self._roi_pct_to_pixels(h, w, x0, y0, x1, y1) arr = self._crop_array(img_gray, roi) stats = self.compute_stats(arr) - target = patch.get("target_value", patch.get("target_mean", None)) + + target = self.get_patch_target_for_role( + patch=patch, + role=role, + fallback=self.target_value, + ) if target is not None: target = float(target) + patch_results.append({ - "name": patch.get("name", f"patch_{len(patch_results)+1}"), + "name": patch.get("name", f"patch_{len(patch_results) + 1}"), "type": patch.get("type", "reference"), + "role": role, "roi": list(roi), "roi_pct": {"x0": x0, "y0": y0, "x1": x1, "y1": y1}, + "roi_source": roi_source, "weight": float(patch.get("weight", 1.0)), "target_value": target, "stats": stats, }) if not patch_results: - stats = self.measure_global(img_gray) + stats = self.measure_global(img_gray, role=role) stats["source"] = "reference_patches_fallback_global" stats["patches"] = [] return stats - return self.aggregate_patch_metrics(patch_results) + + metrics = self.aggregate_patch_metrics(patch_results) + metrics["role"] = role + + return metrics def aggregate_patch_metrics(self, patch_results: list[dict]) -> dict: valid = [p for p in patch_results if p["stats"].get("valid")] + if not valid: return { "valid": False, @@ -347,45 +576,172 @@ class RadiometricController: "dark_pct": 0.0, "control_value": 0.0, "target_value": self.target_value, + "weighted_error": 0.0, + "patch_quality": { + "valid": False, + "warnings": ["no_valid_patches"], + }, } - weights = np.array([max(0.0, p.get("weight", 1.0)) for p in valid], dtype=np.float32) - if float(weights.sum()) <= 1e-9: - weights = np.ones(len(valid), dtype=np.float32) - weights = weights / weights.sum() + black = self._find_patch_result(valid, "black") + gray = self._find_patch_result(valid, "gray") + white = self._find_patch_result(valid, "white") + warnings = [] + + # Stats gerais de proteção. + p95s = np.array([p["stats"]["p95"] for p in valid], dtype=np.float32) + sats = np.array([p["stats"]["sat_pct"] for p in valid], dtype=np.float32) + darks = np.array([p["stats"]["dark_pct"] for p in valid], dtype=np.float32) means = np.array([p["stats"]["mean"] for p in valid], dtype=np.float32) p50s = np.array([p["stats"]["p50"] for p in valid], dtype=np.float32) - p95s = np.array([p["stats"]["p95"] for p in valid], dtype=np.float32) - sat = np.array([p["stats"]["sat_pct"] for p in valid], dtype=np.float32) - dark = np.array([p["stats"]["dark_pct"] for p in valid], dtype=np.float32) - patch_errors = [] - control_values = [] - for p in valid: - target = p.get("target_value") - if target is None: - target = self.target_value - value = p["stats"].get(self.control_metric, p["stats"].get("p50", p["stats"].get("mean", 0.0))) - control_values.append(float(value)) - patch_errors.append(float(target) - float(value)) + p95_max = float(np.max(p95s)) + sat_max = float(np.max(sats)) + dark_mean = float(np.mean(darks)) + mean_mean = float(np.mean(means)) + p50_mean = float(np.mean(p50s)) - weighted_error = float(np.sum(np.array(patch_errors, dtype=np.float32) * weights)) - control_value = float(np.sum(np.array(control_values, dtype=np.float32) * weights)) + # Valores por patch, quando existem. + black_p50 = float(black["stats"]["p50"]) if black else None + gray_p50 = float(gray["stats"]["p50"]) if gray else None + white_p50 = float(white["stats"]["p50"]) if white else None + + black_target = float(black.get("target_value", 0.06)) if black else 0.06 + gray_target = float(gray.get("target_value", self.target_value)) if gray else self.target_value + white_target = float(white.get("target_value", 0.80)) if white else 0.80 + + # ============================================================ + # Validações de coerência dos cartões + # ============================================================ + + if gray is None: + warnings.append("missing_gray_patch") + + if self.patch_require_order and black and gray and white: + if not (black_p50 < gray_p50 < white_p50): + warnings.append( + f"patch_order_invalid: black={black_p50:.3f}, gray={gray_p50:.3f}, white={white_p50:.3f}" + ) + + if (gray_p50 - black_p50) < self.patch_min_separation: + warnings.append( + f"black_gray_separation_low: diff={gray_p50 - black_p50:.3f}" + ) + + if (white_p50 - gray_p50) < self.patch_min_separation: + warnings.append( + f"gray_white_separation_low: diff={white_p50 - gray_p50:.3f}" + ) + + if white: + white_sat = float(white["stats"]["sat_pct"]) + white_p95 = float(white["stats"]["p95"]) + if white_sat > self.patch_white_sat_limit_pct: + warnings.append(f"white_patch_saturated: sat={white_sat:.2f}%") + if white_p95 > self.patch_white_p95_limit: + warnings.append(f"white_patch_p95_high: p95={white_p95:.3f}") + + if black: + black_dark = float(black["stats"]["dark_pct"]) + if black_dark > self.patch_black_dark_limit_pct: + warnings.append(f"black_patch_too_dark: dark={black_dark:.1f}%") + if black_p50 > self.patch_black_max_p50: + warnings.append(f"black_patch_too_bright: p50={black_p50:.3f}") + + if gray: + if gray_p50 < self.patch_gray_min_p50: + warnings.append(f"gray_patch_too_dark: p50={gray_p50:.3f}") + if gray_p50 > self.patch_gray_max_p50: + warnings.append(f"gray_patch_too_bright: p50={gray_p50:.3f}") + + # ============================================================ + # Modo recomendado: cinza como controle principal + # ============================================================ + if self.patch_control_mode == "gray_primary" and gray is not None: + control_value = gray_p50 + target_value = gray_target + weighted_error = target_value - control_value + + control_source = "gray_primary" + + else: + # Fallback: média ponderada original, mas preservando guardas. + weights = np.array([max(0.0, p.get("weight", 1.0)) for p in valid], dtype=np.float32) + + if float(weights.sum()) <= 1e-9: + weights = np.ones(len(valid), dtype=np.float32) + + weights = weights / weights.sum() + + patch_errors = [] + control_values = [] + + for p in valid: + target = p.get("target_value") + if target is None: + target = self.target_value + + value = p["stats"].get( + self.control_metric, + p["stats"].get("p50", p["stats"].get("mean", 0.0)) + ) + + control_values.append(float(value)) + patch_errors.append(float(target) - float(value)) + + weighted_error = float(np.sum(np.array(patch_errors, dtype=np.float32) * weights)) + control_value = float(np.sum(np.array(control_values, dtype=np.float32) * weights)) + target_value = self.target_value + control_source = "weighted_patches" + + # ============================================================ + # Guardas de saturação e faixa útil + # ============================================================ + # Se o branco saturou, queremos que o compute_control reduza exposição, + # mesmo que o cinza esteja aparentemente bom. + if white: + white_sat = float(white["stats"]["sat_pct"]) + white_p95 = float(white["stats"]["p95"]) + + sat_max = max(sat_max, white_sat) + p95_max = max(p95_max, white_p95) + + # Se o cinza está ausente, a métrica ainda pode funcionar por fallback, + # mas marcamos warning para debug. + quality_valid = gray is not None and len(warnings) == 0 return { "valid": True, "source": "reference_patches", "patches": patch_results, - "mean": float(np.sum(means * weights)), - "p50": float(np.sum(p50s * weights)), - "p95": float(np.max(p95s)), - "sat_pct": float(np.max(sat)), - "dark_pct": float(np.sum(dark * weights)), + + # Métricas agregadas informativas. + "mean": mean_mean, + "p50": p50_mean, + "p95": p95_max, + "sat_pct": sat_max, + "dark_pct": dark_mean, + + # Métricas usadas pelo controle. "control_metric": self.control_metric, - "control_value": control_value, - "target_value": self.target_value, - "weighted_error": weighted_error, + "control_value": float(control_value), + "target_value": float(target_value), + "weighted_error": float(weighted_error), + + # Debug/qualidade. + "patch_control_mode": self.patch_control_mode, + "control_source": control_source, + "patch_quality": { + "valid": bool(quality_valid), + "warnings": warnings, + "black_p50": black_p50, + "gray_p50": gray_p50, + "white_p50": white_p50, + "black_target": black_target, + "gray_target": gray_target, + "white_target": white_target, + }, } def aggregate_spectral_metrics(self, role_items: dict) -> dict: @@ -411,11 +767,23 @@ class RadiometricController: p50 = float(np.mean([float(m.get("p50", m.get("mean", 0.0))) for m in metrics_list])) dark_pct = float(np.mean([float(m.get("dark_pct", 0.0)) for m in metrics_list])) control_values = [ - float(m.get(self.control_metric, m.get("control_value", m.get("p50", m.get("mean", 0.0))))) + float(m.get("control_value", m.get(self.control_metric, m.get("p50", m.get("mean", 0.0))))) for m in metrics_list ] + + target_values = [ + float(m.get("target_value", self.target_value)) + for m in metrics_list + ] + + errors = [ + float(m.get("weighted_error", target - value)) + for m, target, value in zip(metrics_list, target_values, control_values) + ] + control_value = float(np.mean(control_values)) - weighted_error = self.target_value - control_value + target_value = float(np.mean(target_values)) + weighted_error = float(np.mean(errors)) return { "valid": True, @@ -428,8 +796,20 @@ class RadiometricController: "dark_pct": dark_pct, "control_metric": self.control_metric, "control_value": control_value, - "target_value": self.target_value, + "target_value": target_value, "weighted_error": weighted_error, + "control_values_by_role": { + role: float(item["metrics"].get("control_value", item["metrics"].get("p50", 0.0))) + for role, item in valid_items.items() + }, + "targets_by_role": { + role: float(item["metrics"].get("target_value", self.target_value)) + for role, item in valid_items.items() + }, + "patch_quality_by_role": { + role: item["metrics"].get("patch_quality", {}) + for role, item in valid_items.items() + }, } def compute_stats(self, arr: np.ndarray) -> dict: @@ -475,15 +855,31 @@ class RadiometricController: y1 = max(y0 + 1, min(h, y1)) return x0, y0, x1, y1 + @staticmethod + def _find_patch_result(patch_results: list[dict], patch_type: str): + patch_type = str(patch_type).lower() + for p in patch_results: + if str(p.get("type", "")).lower() == patch_type: + return p + return None + def compute_control(self, role: str, metrics: dict, virtual_role: str | None = None) -> dict: state_role = str(role).lower() log_role = virtual_role or state_role + st = self.state.setdefault(state_role, {"exp": 15000, "gain": 1.0}) old_exp = int(st["exp"]) old_gain = float(st["gain"]) limits = self._limits_for_role(state_role) if not metrics.get("valid"): + ready, ready_cycles = self._update_ready_state( + log_role=log_role, + action="hold", + error=999.0, + p95=1.0, + sat_pct=100.0, + ) return { "role": log_role, "state_role": state_role, @@ -493,46 +889,189 @@ class RadiometricController: "new_exp": old_exp, "old_gain": old_gain, "new_gain": old_gain, + "ready": ready, + "ready_cycles": ready_cycles, + "ready_required_cycles": self.ready_required_cycles, } - control_value = float(metrics.get("control_value", metrics.get(self.control_metric, metrics.get("p50", metrics.get("mean", 0.0))))) + control_value = float(metrics.get( + "control_value", + metrics.get(self.control_metric, metrics.get("p50", metrics.get("mean", 0.0))) + )) target = float(metrics.get("target_value", self.target_value)) error = float(metrics.get("weighted_error", target - control_value)) p95 = float(metrics.get("p95", 0.0)) sat_pct = float(metrics.get("sat_pct", 0.0)) + under_cycles, over_cycles = self._update_exposure_pressure_state( + log_role=log_role, + error=error, + p95=p95, + sat_pct=sat_pct, + ) + + exp_min = int(limits["exp_min_us"]) + exp_max = int(limits["exp_max_us"]) + gain_min = float(limits["gain_min"]) + gain_max = float(limits["gain_max"]) + new_exp = old_exp new_gain = old_gain action = "hold" reason = "dentro da faixa morta" + ratio = None + factor = 1.0 + gain_policy = "hold" + + # ============================================================ + # 1) Proteção forte contra saturação / p95 alto + # ============================================================ if sat_pct > self.saturation_limit_pct or p95 > self.p95_limit: - desired_exp = max(limits["exp_min_us"], int(old_exp * self.reduce_fast_factor)) - new_exp = self._smooth_int(old_exp, desired_exp) + if sat_pct >= self.saturation_extreme_pct: + exp_factor = 0.45 + elif sat_pct >= self.saturation_hard_pct: + exp_factor = 0.32 + elif sat_pct > self.saturation_limit_pct: + exp_factor = 0.55 + else: + exp_factor = self.reduce_fast_factor + + new_exp = int(self._clamp(old_exp * exp_factor, exp_min, exp_max)) + + if self.gain_reduce_on_saturation and old_gain > gain_min: + if self.gain_hard_reset_on_saturation and sat_pct >= self.saturation_extreme_pct: + new_gain = gain_min + gain_policy = "hard_reset_gain_on_extreme_saturation" + else: + desired_gain = old_gain - self.gain_step_down + new_gain = float(self._clamp(desired_gain, gain_min, gain_max)) + gain_policy = "decrease_gain_step_on_saturation" + else: + new_gain = old_gain + gain_policy = "hold_gain" + action = "decrease_exposure" - reason = f"saturação/p95 alto: sat={sat_pct:.2f}% p95={p95:.3f}" + reason = ( + f"saturação/p95 alto: sat={sat_pct:.2f}% p95={p95:.3f} " + f"exp_factor={exp_factor:.3f} gain_policy={gain_policy}" + ) + + # ============================================================ + # 2) Fora da faixa morta: controle por ratio/linear + # ============================================================ elif abs(error) > self.deadband: - factor = 1.0 + self.exp_step_gain * error - factor = max(self.factor_min, min(self.factor_max, factor)) + if self.control_strategy == "ratio": + safe_value = max(control_value, 1e-6) + ratio = target / safe_value + ratio = self._clamp(ratio, self.ratio_min, self.ratio_max) + factor = 1.0 + self.ratio_alpha * (ratio - 1.0) + else: + factor = 1.0 + self.exp_step_gain * error + factor = max(self.factor_min, min(self.factor_max, factor)) + if self.prefer_exposure: - desired_exp = int(old_exp * factor) - desired_exp = self._clamp(desired_exp, limits["exp_min_us"], limits["exp_max_us"]) - new_exp = self._smooth_int(old_exp, desired_exp) - if desired_exp in (limits["exp_min_us"], limits["exp_max_us"]): - desired_gain = old_gain * factor - desired_gain = self._clamp(desired_gain, limits["gain_min"], limits["gain_max"]) - new_gain = self._smooth_float(old_gain, desired_gain) - action = "increase_exposure" if error > 0 else "decrease_exposure" - reason = f"corrigindo {self.control_metric}: value={control_value:.3f} target={target:.3f} error={error:.3f}" + # ---------------------------------------------------- + # 2A) Cena escura: subir exposição primeiro. + # Só subir ganho se exposição já estiver perto do máximo. + # ---------------------------------------------------- + if error > 0: + desired_exp = int(self._clamp(old_exp * factor, exp_min, exp_max)) + new_exp = desired_exp + new_gain = old_gain + gain_policy = "hold_gain_prefer_exposure" + + exp_high_threshold = int(exp_max * self.exp_high_ratio_for_gain) + + if ( + desired_exp >= exp_high_threshold + and under_cycles >= self.gain_increase_required_cycles + ): + # Sobe ganho devagar, em degrau fixo. + desired_gain = old_gain + self.gain_step_up + new_gain = float(self._clamp(desired_gain, gain_min, gain_max)) + gain_policy = f"increase_gain_slow_under_cycles_{under_cycles}" + else: + new_gain = old_gain + gain_policy = f"hold_gain_under_cycles_{under_cycles}" + + action = "increase_exposure" + reason = ( + f"subindo exposição por {self.control_metric}: " + f"value={control_value:.3f} target={target:.3f} " + f"error={error:.3f} factor={factor:.3f} gain_policy={gain_policy}" + ) + + # ---------------------------------------------------- + # 2B) Cena clara: se ganho está acima do mínimo, + # reduzir ganho primeiro ou junto. + # ---------------------------------------------------- + else: + desired_exp = int(self._clamp(old_exp * factor, exp_min, exp_max)) + new_exp = desired_exp + + if ( + self.gain_return_enabled + and old_gain > gain_min + and over_cycles >= self.gain_decrease_required_cycles + ): + desired_gain = old_gain - self.gain_step_down + new_gain = float(self._clamp(desired_gain, gain_min, gain_max)) + gain_policy = f"return_gain_step_over_cycles_{over_cycles}" + else: + new_gain = old_gain + gain_policy = f"hold_gain_over_cycles_{over_cycles}" + + action = "decrease_exposure" + reason = ( + f"reduzindo brilho por {self.control_metric}: " + f"value={control_value:.3f} target={target:.3f} " + f"error={error:.3f} factor={factor:.3f} gain_policy={gain_policy}" + ) + else: desired_gain = old_gain * factor - desired_gain = self._clamp(desired_gain, limits["gain_min"], limits["gain_max"]) - new_gain = self._smooth_float(old_gain, desired_gain) + new_gain = float(self._clamp(desired_gain, gain_min, gain_max)) action = "increase_gain" if error > 0 else "decrease_gain" - reason = f"corrigindo ganho por {self.control_metric}: value={control_value:.3f} target={target:.3f} error={error:.3f}" + gain_policy = "direct_gain_control" + reason = ( + f"corrigindo ganho por {self.control_metric}: " + f"value={control_value:.3f} target={target:.3f} " + f"error={error:.3f} factor={factor:.3f}" + ) - new_exp = int(self._clamp(new_exp, limits["exp_min_us"], limits["exp_max_us"])) - new_gain = float(self._clamp(new_gain, limits["gain_min"], limits["gain_max"])) + # ============================================================ + # 3) Dentro da faixa morta: opcionalmente devolver ganho + # se ganho alto não é mais necessário. + # ============================================================ + else: + if self.gain_return_enabled and old_gain > gain_min: + exp_low_threshold = int(exp_max * self.exp_low_ratio_for_gain_return) + + if old_exp < exp_low_threshold: + new_gain = float(self._clamp(old_gain * self.gain_return_factor, gain_min, gain_max)) + gain_policy = "return_gain_while_ready" + action = "decrease_gain" + reason = ( + f"dentro da faixa, devolvendo ganho: " + f"value={control_value:.3f} target={target:.3f} " + f"gain={old_gain:.2f}->{new_gain:.2f}" + ) + else: + gain_policy = "hold_gain_high_exp" + else: + gain_policy = "hold_gain" + + new_exp = int(self._clamp(new_exp, exp_min, exp_max)) + new_gain = float(self._clamp(new_gain, gain_min, gain_max)) + + ready, ready_cycles = self._update_ready_state( + log_role=log_role, + action=action, + error=error, + p95=p95, + sat_pct=sat_pct, + ) return { "role": log_role, @@ -547,11 +1086,25 @@ class RadiometricController: "error": error, "p95": p95, "sat_pct": sat_pct, + #"metrics_source": metrics.get("source"), + #"control_source": metrics.get("control_source"), + #"patch_quality": metrics.get("patch_quality"), + #"patches": metrics.get("patches"), + #"control_values_by_role": metrics.get("control_values_by_role"), + #"targets_by_role": metrics.get("targets_by_role"), + #"patch_quality_by_role": metrics.get("patch_quality_by_role"), "old_exp": old_exp, "new_exp": new_exp, "old_gain": old_gain, "new_gain": new_gain, "limits": limits, + "ready": ready, + "ready_cycles": ready_cycles, + "ready_required_cycles": self.ready_required_cycles, + "control_strategy": self.control_strategy, + "ratio": ratio, + "factor": float(factor), + "gain_policy": gain_policy, } def apply_control(self, role: str, decision: dict): @@ -577,7 +1130,13 @@ class RadiometricController: except Exception as e: responses["error"] = str(e) if self.verbose: - print(f"[RAD] {role}: {json.dumps(decision, ensure_ascii=False)} | apply={responses}") + print( + f"[RAD_APPLY] role={role} " + f"action={decision.get('action')} " + f"exp={decision.get('old_exp')}->{decision.get('new_exp')} " + f"gain={decision.get('old_gain'):.2f}->{decision.get('new_gain'):.2f} " + f"ok={'error' not in responses}" + ) return responses def _limits_for_role(self, role: str) -> dict: @@ -598,3 +1157,67 @@ class RadiometricController: @staticmethod def _clamp(v, lo, hi): return max(lo, min(hi, v)) + + def _print_metrics_debug(self, role: str, result: dict): + if not self.verbose: + return + + metrics = result.get("metrics", {}) + decision = result.get("decision", {}) + + print( + f"[RAD_METRICS] role={role} " + f"mode={result.get('mode')} " + f"metering={result.get('metering_mode')} " + f"action={decision.get('action')} " + f"exp={decision.get('old_exp')}->{decision.get('new_exp')} " + f"gain={decision.get('old_gain')}->{decision.get('new_gain')} " + f"control={decision.get('control_value'):.3f} " + f"target={decision.get('target_value'):.3f} " + f"p95={decision.get('p95'):.3f} " + f"sat={decision.get('sat_pct'):.2f}%" + ) + + # Caso normal: rgb individual + patches = metrics.get("patches", []) + if patches: + for p in patches: + st = p.get("stats", {}) + print( + f" [PATCH] role={p.get('role', role)} " + f"type={p.get('type')} " + f"roi_source={p.get('roi_source')} " + f"roi_pct={p.get('roi_pct')} " + f"p50={st.get('p50', 0):.3f} " + f"p95={st.get('p95', 0):.3f} " + f"sat={st.get('sat_pct', 0):.2f}% " + f"dark={st.get('dark_pct', 0):.1f}%" + ) + + # Caso spectral_shared: RE/NIR agregados + roles = metrics.get("roles", {}) + if roles: + for r, item in roles.items(): + m = item.get("metrics", {}) + print( + f" [ROLE_METRICS] role={r} " + f"cam_id={item.get('cam_id')} " + f"control={m.get('control_value', 0):.3f} " + f"target={m.get('target_value', 0):.3f} " + f"p95={m.get('p95', 0):.3f} " + f"sat={m.get('sat_pct', 0):.2f}% " + f"warnings={m.get('patch_quality', {}).get('warnings', [])}" + ) + + for p in m.get("patches", []): + st = p.get("stats", {}) + print( + f" [PATCH] role={p.get('role', r)} " + f"type={p.get('type')} " + f"roi_source={p.get('roi_source')} " + f"roi_pct={p.get('roi_pct')} " + f"p50={st.get('p50', 0):.3f} " + f"p95={st.get('p95', 0):.3f} " + f"sat={st.get('sat_pct', 0):.2f}% " + f"dark={st.get('dark_pct', 0):.1f}%" + ) diff --git a/Python/OAK/datasets/oak-fcc-3/core/raw_processor_core.py b/Python/OAK/datasets/oak-fcc-3/core/raw_processor_core.py index 43fb85cf2..10db99e20 100644 --- a/Python/OAK/datasets/oak-fcc-3/core/raw_processor_core.py +++ b/Python/OAK/datasets/oak-fcc-3/core/raw_processor_core.py @@ -61,10 +61,31 @@ class RawProcessorCore: "reference_controls": {}, "clip_output": False, } + self.radiometric_config = {} + self.patch_normalization_config = { + "enabled": False, + "apply_when_metering_mode": "reference_patches", + "apply_stage": "after_fusion", + "method": "gray_scale_with_white_guard", + "space": "multispec_tensor", + "targets": { + "black": 0.06, + "gray": 0.40, + "white": 0.78, + }, + "white_guard_max": 0.92, + "scale_min": 0.35, + "scale_max": 2.50, + "clip_output": True, + "require_valid_gray": True, + "use_black_for_offset": False, + "save_patch_stats": True, + } + self.last_patch_normalization_result = None self.camera_settings = {} if calibration_json_path: - self.load_fusion_config_json(calibration_json_path) + self.load_config_json(calibration_json_path) def unpack_raw10_packed( self, @@ -260,107 +281,23 @@ class RawProcessorCore: raise RuntimeError("RGB obrigatório") channel_names = self._channel_names_from_decoded(decoded) - - tensor = self.fuse_multispec_cameras( - decoded, - meta=None, - channels_expected=len(channel_names) - ) - + tensor = self.fuse_multispec_cameras(decoded, meta=None, channels_expected=len(channel_names)) tensor = self.resize_tensor_chw(tensor, target_size=target_size) + tensor = self.apply_patch_normalization_to_tensor(tensor) return tensor, channel_names - def build_infer_tensor_from_stream_old(self, frame, meta, channels_expected): - """ - Converte o frame vindo do stream do Pi em tensor (C,H,W) float32 0..1 - compatível com o modelo. - Suporta: - - RGB uint8/float32 já pronto - - MULTISPEC uint8/float32 já pronto - - RAW_BRUTO multi_payload (cam2 RGB + cam0/cam1 packed) - """ + def build_infer_tensor_from_stream(self, frame, meta, channels_expected, target_size=None): frame_type = meta.get("frame_type") - dtype_str = meta.get("dtype") or meta.get("output_dtype", "uint8") - camera_frames = meta.get("camera_frames", {}) or {} - # ------------------------------------------------- - # RAW_BRUTO multi_payload - # ------------------------------------------------- if frame_type == "RAW_BRUTO": - if not isinstance(frame, dict): - raise RuntimeError("RAW_BRUTO esperado como dict de câmeras no modo multi") + decoded = self.decode_stream_cameras(frame, meta) + tensor = self.fuse_multispec_cameras(decoded, meta, channels_expected) + tensor = self.resize_tensor_chw(tensor, target_size=target_size) + tensor = self.apply_patch_normalization_to_tensor(tensor) + return tensor - arrays = [] - channel_names = [] - - # RGB USB - if "cam2" in frame: - rgb_bgr = frame["cam2"] - if rgb_bgr.ndim != 3 or rgb_bgr.shape[2] != 3: - raise RuntimeError(f"cam2 RGB inválida: shape={rgb_bgr.shape}") - - rgb = rgb_bgr[:, :, ::-1].astype(np.float32) / 255.0 - rgb_chw = np.transpose(rgb, (2, 0, 1)) - arrays.append(rgb_chw) - channel_names.extend(["R", "G", "B"]) - else: - raise RuntimeError("RAW_BRUTO para inferência precisa incluir cam2 (RGB)") - - # RE / NIR - for cam_id, spec_name in (("cam0", "RE"), ("cam1", "NIR")): - if cam_id not in frame: - continue - - packed = frame[cam_id] - if packed.ndim == 3 and packed.shape[2] == 1: - packed = packed[:, :, 0] - - cam_meta = camera_frames.get(cam_id, {}) - packed_width = int(cam_meta.get("width", packed.shape[1])) - height = int(cam_meta.get("height", packed.shape[0])) - bayer = cam_meta.get("bayer_pattern", self.bayer_pattern) - bit_depth = int(cam_meta.get("bit_depth", 10)) - - if bit_depth == 10: - real_width = int((packed_width * 8) / 10) - else: - real_width = packed_width - - rp = RawProcessorCore( - sensor_width=real_width, - sensor_height=height, - bayer_pattern=bayer, - ) - - raw16 = rp.unpack_raw10_packed(packed) - - max_val = float((1 << bit_depth) - 1) - single = np.clip(raw16.astype(np.float32) / max_val, 0.0, 1.0)[None, :, :] - - arrays.append(single) - channel_names.append(spec_name) - - if len(arrays) < 2: - raise RuntimeError("RAW_BRUTO requer RGB + pelo menos um canal espectral para inferência") - - min_h = min(a.shape[1] for a in arrays) - min_w = min(a.shape[2] for a in arrays) - arrays = [a[:, :min_h, :min_w] for a in arrays] - - raw_np = np.concatenate(arrays, axis=0) - - if raw_np.shape[0] != channels_expected: - raise RuntimeError( - f"Tensor RAW_BRUTO montado com canais inesperados: {raw_np.shape[0]} | esperado={channels_expected} | got={channel_names}" - ) - - return raw_np - - # ------------------------------------------------- - # RGB ou MULTISPEC já pronto - # ------------------------------------------------- - if frame_type == "RGB" or frame_type == "MULTISPEC": + if frame_type in ("RGB", "MULTISPEC"): if not isinstance(frame, np.ndarray): raise RuntimeError(f"Frame {frame_type} esperado como ndarray") @@ -377,26 +314,11 @@ class RawProcessorCore: raise RuntimeError(f"dtype {frame_type} não suportado: {dtype_str}") if raw_np.shape[0] != channels_expected: - raise RuntimeError( - f"Frame {frame_type} com canais inesperados: {raw_np.shape[0]} | esperado={channels_expected}" - ) + raise RuntimeError(f"Frame {frame_type} com canais inesperados: {raw_np.shape[0]} | esperado={channels_expected}") + tensor = raw_np - return raw_np - - - raise RuntimeError(f"frame_type não suportado para inferência: {frame_type}") - - def build_infer_tensor_from_stream(self, frame, meta, channels_expected, target_size=None): - frame_type = meta.get("frame_type") - - if frame_type == "RAW_BRUTO": - decoded = self.decode_stream_cameras(frame, meta) - tensor = self.fuse_multispec_cameras(decoded, meta, channels_expected) - return self.resize_tensor_chw(tensor, target_size=target_size) - - if frame_type in ("RGB", "MULTISPEC"): - tensor = self.build_infer_tensor_from_stream_old(frame, meta, channels_expected) - return self.resize_tensor_chw(tensor, target_size=target_size) + tensor = self.resize_tensor_chw(tensor, target_size=target_size) + return tensor raise RuntimeError(f"frame_type não suportado para inferência: {frame_type}") @@ -532,13 +454,8 @@ class RawProcessorCore: return np.clip(arr01, 0.0, 1.0) def fuse_multispec_cameras(self, decoded, meta, channels_expected): - # 1) Coloca todos os frames na mesma escala de exposição/ganho de referência - decoded = self.normalize_decoded_by_capture_controls(decoded, meta) - - # 2) Subtrai dark/offset no espaço individual de cada câmera decoded = self.apply_dark_to_decoded(decoded) - - # 3) Aplica o ganho espacial do flat field no espaço individual de cada câmera + decoded = self.normalize_decoded_by_capture_controls(decoded, meta) decoded = self.apply_flat_gain_to_decoded(decoded) rgb_cam_id = self._find_cam_by_role(decoded, "rgb") @@ -751,6 +668,218 @@ class RawProcessorCore: return np.stack(chans, axis=0) + def apply_patch_normalization_to_tensor(self, tensor: np.ndarray) -> np.ndarray: + self.last_patch_normalization_result = None + + cfg = self.patch_normalization_config or {} + + result = { + "enabled": bool(cfg.get("enabled", False)), + "applied": False, + "method": cfg.get("method", "gray_scale_with_white_guard"), + "space": cfg.get("space", "multispec_tensor"), + "warnings": [], + "scales": {}, + "patch_stats": {}, + } + + if not cfg.get("enabled", False): + result["warnings"].append("patch_normalization_disabled") + self.last_patch_normalization_result = result + return tensor + + rad_cfg = self.radiometric_config or {} + + if cfg.get("apply_when_metering_mode") == "reference_patches": + if rad_cfg.get("metering_mode") != "reference_patches": + result["warnings"].append( + f"metering_mode_not_reference_patches: {rad_cfg.get('metering_mode')}" + ) + self.last_patch_normalization_result = result + return tensor + + if tensor is None or tensor.ndim != 3 or tensor.shape[0] < 5: + result["warnings"].append(f"invalid_tensor_shape: {None if tensor is None else tensor.shape}") + self.last_patch_normalization_result = result + return tensor + + patches = rad_cfg.get("reference_patches", []) or [] + patch_by_type = { + str(p.get("type", "")).lower(): p + for p in patches + if isinstance(p, dict) + } + + gray = patch_by_type.get("gray") + white = patch_by_type.get("white") + black = patch_by_type.get("black") + + if gray is None: + result["warnings"].append("missing_gray_patch") + if cfg.get("require_valid_gray", True): + self.last_patch_normalization_result = result + return tensor + + targets = cfg.get("targets", {}) or {} + gray_target = float(targets.get("gray", 0.40)) + + scale_min = float(cfg.get("scale_min", 0.35)) + scale_max = float(cfg.get("scale_max", 2.50)) + white_guard_max = float(cfg.get("white_guard_max", 0.92)) + clip_output = bool(cfg.get("clip_output", True)) + + channel_names = ["R", "G", "B", "RE", "NIR"] + + out = tensor.astype(np.float32).copy() + h, w = out.shape[1], out.shape[2] + + def roi_from_patch(patch): + if not patch: + return None + return self._roi_pct_to_pixels_from_patch(patch.get("roi_pct", {}) or {}, w, h) + + gray_roi = roi_from_patch(gray) + white_roi = roi_from_patch(white) + black_roi = roi_from_patch(black) + + if gray_roi is None: + result["warnings"].append("invalid_gray_roi") + self.last_patch_normalization_result = result + return tensor + + for ci, ch_name in enumerate(channel_names): + ch = out[ci] + + # ----------------------------- + # Stats do gray + # ----------------------------- + gx0, gy0, gx1, gy1 = gray_roi + gray_vals = ch[gy0:gy1, gx0:gx1].reshape(-1) + + if gray_vals.size <= 0: + result["warnings"].append(f"{ch_name}: empty_gray_roi") + continue + + gray_p50 = float(np.percentile(gray_vals, 50)) + gray_p05 = float(np.percentile(gray_vals, 5)) + gray_p95 = float(np.percentile(gray_vals, 95)) + gray_sat = float((gray_vals >= 0.98).mean() * 100.0) + gray_dark = float((gray_vals <= 0.02).mean() * 100.0) + + result["patch_stats"].setdefault("gray", {})[ch_name] = { + "p05": gray_p05, + "p50": gray_p50, + "p95": gray_p95, + "sat_pct": gray_sat, + "dark_pct": gray_dark, + "roi_px": list(gray_roi), + } + + if gray_p50 <= 1e-6: + result["warnings"].append(f"{ch_name}: gray_p50_too_low") + continue + + scale = gray_target / gray_p50 + + # ----------------------------- + # Stats do white + guarda + # ----------------------------- + if white_roi is not None: + wx0, wy0, wx1, wy1 = white_roi + white_vals = ch[wy0:wy1, wx0:wx1].reshape(-1) + + if white_vals.size > 0: + white_p50 = float(np.percentile(white_vals, 50)) + white_p05 = float(np.percentile(white_vals, 5)) + white_p95 = float(np.percentile(white_vals, 95)) + white_sat = float((white_vals >= 0.98).mean() * 100.0) + white_dark = float((white_vals <= 0.02).mean() * 100.0) + + result["patch_stats"].setdefault("white", {})[ch_name] = { + "p05": white_p05, + "p50": white_p50, + "p95": white_p95, + "sat_pct": white_sat, + "dark_pct": white_dark, + "roi_px": list(white_roi), + } + + if white_sat > 0.5: + result["warnings"].append(f"{ch_name}: white_patch_saturated_{white_sat:.2f}%") + + if white_p50 > 1e-6: + max_scale_by_white = white_guard_max / white_p50 + if scale > max_scale_by_white: + result["warnings"].append( + f"{ch_name}: scale_limited_by_white_guard " + f"{scale:.3f}->{max_scale_by_white:.3f}" + ) + scale = min(scale, max_scale_by_white) + + # ----------------------------- + # Stats do black, só diagnóstico + # ----------------------------- + if black_roi is not None: + bx0, by0, bx1, by1 = black_roi + black_vals = ch[by0:by1, bx0:bx1].reshape(-1) + + if black_vals.size > 0: + black_p50 = float(np.percentile(black_vals, 50)) + black_p05 = float(np.percentile(black_vals, 5)) + black_p95 = float(np.percentile(black_vals, 95)) + black_sat = float((black_vals >= 0.98).mean() * 100.0) + black_dark = float((black_vals <= 0.02).mean() * 100.0) + + result["patch_stats"].setdefault("black", {})[ch_name] = { + "p05": black_p05, + "p50": black_p50, + "p95": black_p95, + "sat_pct": black_sat, + "dark_pct": black_dark, + "roi_px": list(black_roi), + } + + scale_before_clip = float(scale) + scale = float(np.clip(scale, scale_min, scale_max)) + + if abs(scale - scale_before_clip) > 1e-6: + result["warnings"].append( + f"{ch_name}: scale_clipped {scale_before_clip:.3f}->{scale:.3f}" + ) + + out[ci] = ch * scale + + result["scales"][ch_name] = { + "scale": scale, + "gray_target": gray_target, + "gray_measured_p50": gray_p50, + } + + if clip_output: + out = np.clip(out, 0.0, 1.0) + + result["applied"] = True + result["valid"] = bool(len(result["scales"]) == len(channel_names)) + result["clip_output"] = clip_output + result["shape"] = list(out.shape) + result["channel_names"] = channel_names + + self.last_patch_normalization_result = result + return out.astype(np.float32, copy=False) + + def _roi_pct_to_pixels_from_patch(self, roi_pct: dict, w: int, h: int): + x0 = int(float(roi_pct.get("x0", 0.0)) * w) + y0 = int(float(roi_pct.get("y0", 0.0)) * h) + x1 = int(float(roi_pct.get("x1", 1.0)) * w) + y1 = int(float(roi_pct.get("y1", 1.0)) * h) + + x0 = max(0, min(w - 1, x0)) + x1 = max(x0 + 1, min(w, x1)) + y0 = max(0, min(h - 1, y0)) + y1 = max(y0 + 1, min(h, y1)) + + return x0, y0, x1, y1 + def extract_camera_meta(self, meta_json: dict, cam_id: str) -> dict: cam_frames = meta_json.get("camera_frames", {}) or meta_json.get("stream_meta", {}).get("camera_frames", {}) @@ -919,7 +1048,7 @@ class RawProcessorCore: ) - def load_fusion_config_json(self, path: str): + def load_config_json(self, path: str): if not path or not os.path.isfile(path): raise FileNotFoundError(f"Arquivo de calibração não encontrado: {path}") @@ -945,10 +1074,18 @@ class RawProcessorCore: self.flatfield_maps = {} self.flatfield_loaded = False + radiometric = data.get("radiometric_config") + if isinstance(radiometric, dict): + self.radiometric_config = self._merge_config(self.radiometric_config, radiometric) + rad_norm_config = data.get("radiometric_normalization") if isinstance(rad_norm_config, dict): self.radiometric_normalization_config = self._merge_config(self.radiometric_normalization_config, rad_norm_config) + patch_norm = data.get("patch_normalization") + if isinstance(patch_norm, dict): + self.patch_normalization_config = self._merge_config(self.patch_normalization_config, patch_norm) + cam_set = data.get("camera_settings") if isinstance(cam_set, dict): self.camera_settings = self._merge_config(self.camera_settings, cam_set) @@ -1312,22 +1449,18 @@ class RawProcessorCore: if not meta: return {} - # Preferência: controles reais daquele frame. - controls = meta.get("actual_camera_controls") - if isinstance(controls, dict) and controls: - return controls + for key in ("actual_camera_controls", "camera_controls", "startup_camera_controls"): + controls = meta.get(key) + if isinstance(controls, dict) and controls: + return controls - # Possíveis nomes alternativos. - controls = meta.get("camera_controls") - if isinstance(controls, dict) and controls: - return controls + stream_meta = meta.get("stream_meta") + if isinstance(stream_meta, dict): + for key in ("actual_camera_controls", "camera_controls", "startup_camera_controls"): + controls = stream_meta.get(key) + if isinstance(controls, dict) and controls: + return controls - controls = meta.get("startup_camera_controls") - if isinstance(controls, dict) and controls: - return controls - - # Em alguns casos o JSON da captura pode ter stream_meta separado, - # mas se o meta recebido aqui for só stream_meta, talvez não tenha controles. return {} def _exposure_gain_factor(self, ctrl: dict) -> float: diff --git a/Python/OAK/datasets/oak-fcc-3/utils/build_module_params.py b/Python/OAK/datasets/oak-fcc-3/utils/build_module_params.py index 507d807ea..e3fd7c3f0 100644 --- a/Python/OAK/datasets/oak-fcc-3/utils/build_module_params.py +++ b/Python/OAK/datasets/oak-fcc-3/utils/build_module_params.py @@ -67,6 +67,7 @@ def build_flatfield_config(flatfield_json_path, flatfield_data): return { "enabled": True, + "subtract_dark": True, "schema": flatfield_data.get("schema", "multispec_flatfield_v1"), "created_at": flatfield_data.get("created_at"), "json_file": rel_or_abs(flatfield_json_path), @@ -86,6 +87,31 @@ def build_flatfield_config(flatfield_json_path, flatfield_data): } +def pick_radiometric_config(radiometric_data: dict, selected_profile: str | None = None): + if not isinstance(radiometric_data, dict): + return None + + # 1) Novo contrato: usa radiometric_config da raiz se existir. + root_cfg = radiometric_data.get("radiometric_config") + if isinstance(root_cfg, dict): + return root_cfg + + # 2) Usa active_profile se existir. + active_profile = radiometric_data.get("active_profile") + if active_profile in ("global_scene_mode", "three_reference_patches_mode"): + cfg = radiometric_data.get(active_profile, {}).get("radiometric_config") + if isinstance(cfg, dict): + return cfg + + # 3) Fallback explícito por argumento. + if selected_profile: + cfg = radiometric_data.get(selected_profile, {}).get("radiometric_config") + if isinstance(cfg, dict): + return cfg + + return None + + def main(): parser = argparse.ArgumentParser( description="Monta o module_params.json unificando calibração de câmera, fusão, radiometria e flat-field.", @@ -147,7 +173,7 @@ def main(): # ========================= # RADIOMETRIC # ========================= - radiometric_config = radiometric_data.get(args.radiometric_profile, {}).get("radiometric_config") + radiometric_config = pick_radiometric_config(radiometric_data, selected_profile=args.radiometric_profile) if not isinstance(radiometric_config, dict): radiometric_config = cam_data.get("radiometric_config") @@ -155,30 +181,104 @@ def main(): if not isinstance(radiometric_config, dict): radiometric_config = { "enabled": True, - "interval_s": 0.5, + "interval_s": 0.20, "verbose": True, + "metering_mode": "global", "spectral_control_mode": "shared", - "global_roi_pct": { - "x0": 0.08, - "y0": 0.08, - "x1": 0.92, - "y1": 0.92 - }, + "control_metric": "p50", "target_value": 0.40, "deadband": 0.04, - "p95_limit": 0.94, - "saturation_limit_pct": 1.0, - "alpha": 0.18, - "exp_step_gain": 0.55, + + "p95_limit": 0.90, + "saturation_limit_pct": 0.50, + "saturation_hard_pct": 10.0, + "saturation_extreme_pct": 50.0, + "dark_limit_pct": 35.0, + + "control_strategy": "ratio", + "ratio_alpha": 0.55, + "ratio_min": 0.55, + "ratio_max": 1.85, + + "reduce_fast_factor": 0.70, + + "gain_return_enabled": True, + "gain_return_factor": 0.50, + "gain_reduce_on_saturation": True, + "gain_hard_reset_on_saturation": False, + + "gain_increase_required_cycles": 5, + "gain_decrease_required_cycles": 2, + "gain_step_up": 0.20, + "gain_step_down": 0.50, + + "exp_high_ratio_for_gain": 0.95, + "exp_low_ratio_for_gain_return": 0.75, + "prefer_exposure": True, + "exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 4.0, + + "role_limits": { + "rgb": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 4.0}, + "re": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 3.0}, + "nir": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 3.0}, + }, + + "exp_apply_threshold_us": 40, + "gain_apply_threshold": 0.03, + + "ready_required_cycles": 3, + "apply_same_spectral_to_both": True, - "spectral_roles": ["re", "nir"] + "spectral_roles": ["re", "nir"], + } + + radiometric_normalization_config = radiometric_data.get("radiometric_normalization") + if not isinstance(radiometric_normalization_config, dict): + radiometric_normalization_config = cam_data.get("radiometric_normalization") + + if not isinstance(radiometric_normalization_config, dict): + radiometric_normalization_config = { + "enabled": True, + "method": "exposure_gain_reference", + "apply_stage": "after_dark_before_flat_gain", + "reference_controls": { + "rgb": {"exposure_time_us": 3000, "analogue_gain": 1.0}, + "re": {"exposure_time_us": 7000, "analogue_gain": 1.0}, + "nir": {"exposure_time_us": 7000, "analogue_gain": 1.0}, + }, + "clip_output": True, + } + + patch_normalization_config = radiometric_data.get("patch_normalization") + if not isinstance(patch_normalization_config, dict): + patch_normalization_config = cam_data.get("patch_normalization") + + if not isinstance(patch_normalization_config, dict): + patch_normalization_config = { + "enabled": False, + "apply_when_metering_mode": "reference_patches", + "apply_stage": "after_fusion", + "method": "gray_scale_with_white_guard", + "space": "multispec_tensor", + "targets": { + "black": 0.06, + "gray": 0.40, + "white": 0.78, + }, + "white_guard_max": 0.92, + "scale_min": 0.35, + "scale_max": 2.50, + "clip_output": True, + "require_valid_gray": True, + "use_black_for_offset": False, + "save_patch_stats": True, } # ========================= @@ -216,6 +316,8 @@ def main(): "camera_settings": camera_settings, "fusion_config": fusion_config, "radiometric_config": radiometric_config, + "radiometric_normalization": radiometric_normalization_config, + "patch_normalization": patch_normalization_config, "rgb_calibration": rgb_calibration, "flatfield_config": flatfield_config, } diff --git a/Python/OAK/datasets/oak-fcc-3/utils/check_saved_files.py b/Python/OAK/datasets/oak-fcc-3/utils/check_saved_files.py index a09f0dcc3..9a96e9a10 100644 --- a/Python/OAK/datasets/oak-fcc-3/utils/check_saved_files.py +++ b/Python/OAK/datasets/oak-fcc-3/utils/check_saved_files.py @@ -2,6 +2,7 @@ import os import json import argparse from pathlib import Path +from datetime import datetime import cv2 import numpy as np @@ -15,6 +16,100 @@ def load_json(path: Path) -> dict: return json.load(f) +def ts_name() -> str: + return datetime.now().strftime("%Y%m%d_%H%M%S_%f")[:-3] + + +def ensure_dir(path: Path | str): + Path(path).mkdir(parents=True, exist_ok=True) + + +def save_multispec_tensor_from_raw_group( + group: dict, + meta: dict, + out_dir: str = "calibration/offline_samples", +): + """ + Gera e salva um tensor MULTISPEC [5,H,W] float32 a partir de uma captura RAW_BRUTO. + + Saídas: + .raw -> tensor float32 CHW + .json -> metadados do tensor gerado offline + .png -> preview RGB do tensor + """ + if meta.get("saved_payload_type") != "raw_native_multi": + raise RuntimeError("Só é possível gerar tensor offline a partir de saved_payload_type='raw_native_multi'.") + + ensure_dir(out_dir) + out_dir = Path(out_dir) + + tensor, desc = build_multispec_from_raw_native_multi(group, meta) + + if tensor is None: + raise RuntimeError(f"Falha ao gerar tensor MULTISPEC: {desc}") + + base_name = Path(group["json"]).stem + name = f"{base_name}_offline_multispec" + + raw_path = out_dir / f"{name}.raw" + json_path = out_dir / f"{name}.json" + png_path = out_dir / f"{name}.png" + + tensor = np.ascontiguousarray(tensor.astype(np.float32, copy=False)) + tensor.tofile(str(raw_path)) + + # Preview RGB do tensor + rgb_hwc = np.transpose(tensor[:3], (1, 2, 0)) + preview_bgr = normalize_float01_to_bgr(rgb_hwc) + cv2.imwrite(str(png_path), preview_bgr) + + # JSON compatível com o validador e com análise posterior + out_meta = { + "ts": datetime.now().isoformat(timespec="milliseconds"), + "schema": "offline_multispec_from_raw_native_multi_v1", + "source_json": str(group["json"]), + "source_saved_payload_type": meta.get("saved_payload_type"), + "source_saved_payload_paths": meta.get("saved_payload_paths"), + "source_saved_payload_shapes": meta.get("saved_payload_shapes"), + "source_saved_payload_dtypes": meta.get("saved_payload_dtypes"), + "camera_params_json": meta.get("camera_params_json"), + "frame_type": "MULTISPEC", + "saved_payload_type": "multispec", + "saved_payload_path": raw_path.name, + "saved_payload_dtype": "float32", + "saved_payload_shape": list(tensor.shape), + "channels": ["R", "G", "B", "RE", "NIR"], + "saved_preview_path": png_path.name, + "generation": { + "method": "build_multispec_from_raw_native_multi", + "description": desc, + "same_frame_as_raw_bruto": True, + }, + "source_capture_meta": { + "ts": meta.get("ts"), + "sensor_width": meta.get("sensor_width"), + "sensor_height": meta.get("sensor_height"), + "bayer_pattern": meta.get("bayer_pattern"), + "fps_target": meta.get("fps_target"), + "startup_camera_controls": meta.get("startup_camera_controls"), + "actual_camera_controls": meta.get("actual_camera_controls"), + "radiometric_last_result": meta.get("radiometric_last_result"), + "stream_meta": meta.get("stream_meta"), + }, + } + + with open(json_path, "w", encoding="utf-8") as f: + json.dump(out_meta, f, ensure_ascii=False, indent=2) + + return { + "tensor": tensor, + "raw_path": raw_path, + "json_path": json_path, + "png_path": png_path, + "desc": desc, + } + + def normalize_float01_to_bgr(img_float: np.ndarray) -> np.ndarray: """ Recebe RGB float32 [0..1] em HWC e devolve BGR uint8. @@ -657,6 +752,7 @@ def render_group_to_canvas(json_path: Path, max_width: int): canvas = compose_panels(panels, max_width=max_width) info = { + "group": group, "json": group["json"], "png": group["png"], "final_raw": group["final_raw"], @@ -677,7 +773,7 @@ def main(): input_path = Path(args.input_path) entries, current_idx = resolve_navigation_inputs(input_path) - window_name = "Validacao do payload salvo | A=anterior | D=proximo | Q/Esc=sair" + window_name = "Validacao payload | A=anterior | D=proximo | T=salva tensor offline | Q/Esc=sair" cv2.namedWindow(window_name, cv2.WINDOW_NORMAL) while True: @@ -717,6 +813,25 @@ def main(): current_idx = min(current_idx + 1, len(entries) - 1) elif k in (ord("a"), ord("A")): current_idx = max(current_idx - 1, 0) + elif k in (ord("t"), ord("T")): + meta = info["meta"] + group = info["group"] + + try: + result = save_multispec_tensor_from_raw_group( + group=group, + meta=meta, + out_dir="calibration/offline_samples", + ) + + print("[OK] Tensor MULTISPEC offline salvo:") + print(" RAW :", result["raw_path"]) + print(" JSON:", result["json_path"]) + print(" PNG :", result["png_path"]) + print(" DESC:", result["desc"]) + + except Exception as e: + print("[ERRO] Falha ao salvar tensor MULTISPEC offline:", e) cv2.destroyAllWindows() diff --git a/Python/OAK/datasets/oak-fcc-3/utils/radiometric_config_tool.py b/Python/OAK/datasets/oak-fcc-3/utils/radiometric_config_tool.py index 57f2da26b..445eaba38 100644 --- a/Python/OAK/datasets/oak-fcc-3/utils/radiometric_config_tool.py +++ b/Python/OAK/datasets/oak-fcc-3/utils/radiometric_config_tool.py @@ -172,9 +172,30 @@ def get_image_by_role(decoded: dict, role: str): return cam_id, item.get("image") +def get_visual_preview_by_role(visual_previews: dict, meta: dict, role: str): + """ + Busca uma imagem visual BGR dentro do retorno de cam.build_visual_preview_from_raw(), + usando camera_info para descobrir o role rgb/re/nir. + + Retorna: cam_id, img_bgr + """ + if not visual_previews: + return None, None + + camera_info = (meta or {}).get("camera_info", {}) or {} + role = str(role).lower() + + for cam_id, img in visual_previews.items(): + cam_role = str(camera_info.get(cam_id, {}).get("role", "")).lower() + if cam_role == role: + return cam_id, img + + return None, None + + def validate_module_ready(status: dict, raw_policy: str): if not status.get("ok", True): - raise RuntimeError(f"Status inválido retornado pelo módulo: {status}") + raise RuntimeError(f"Status inválido retornado pelo modulo: {status}") active_roles = status.get("active_roles", {}) or {} active_count = int(status.get("camera_count_active", 0)) @@ -194,124 +215,174 @@ def validate_module_ready(status: dict, raw_policy: str): # Config radiométrico # ============================================================ -def default_profile_global(): +def base_ae_contract(): return { - "radiometric_config": { - "enabled": True, - "interval_s": 0.5, - "verbose": True, + "enabled": True, + "interval_s": 0.20, + "verbose": True, - "metering_mode": "global", - "spectral_control_mode": "shared", + "control_metric": "p50", + "target_value": 0.40, + "deadband": 0.04, - "global_roi_pct": { - "x0": 0.08, - "y0": 0.08, - "x1": 0.92, - "y1": 0.92, - }, + "p95_limit": 0.90, + "saturation_limit_pct": 0.50, + "dark_limit_pct": 35.0, - "control_metric": "p50", - "target_value": 0.40, - "deadband": 0.04, + # Novo controle proporcional por razão + "control_strategy": "ratio", + "ratio_alpha": 0.55, + "ratio_min": 0.55, + "ratio_max": 1.85, - "p95_limit": 0.94, - "saturation_limit_pct": 1.0, - "dark_limit_pct": 35.0, + # Redução rápida quando satura + "reduce_fast_factor": 0.75, - "alpha": 0.18, - "exp_step_gain": 0.55, - "prefer_exposure": True, + # Mantém compatibilidade com o modo antigo + "alpha": 0.18, + "exp_step_gain": 0.55, + "factor_min": 0.72, + "factor_max": 1.28, - "exp_min_us": 100, - "exp_max_us": 80000, - "gain_min": 1.0, - "gain_max": 4.0, + "prefer_exposure": True, - "role_limits": { - "rgb": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 4.0}, - "re": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 3.0}, - "nir": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 3.0}, - }, + "exp_min_us": 100, + "exp_max_us": 80000, + "gain_min": 1.0, + "gain_max": 4.0, - "exp_apply_threshold_us": 80, - "gain_apply_threshold": 0.05, + "gain_return_enabled": True, + "gain_reduce_on_saturation": True, + "gain_increase_required_cycles": 5, + "gain_decrease_required_cycles": 2, + "gain_step_up": 0.20, + "gain_step_down": 0.50, + "gain_hard_reset_on_saturation": False, + "exp_high_ratio_for_gain": 0.95, + "exp_low_ratio_for_gain_return": 0.75, - "apply_same_spectral_to_both": True, - "spectral_roles": ["re", "nir"], - } + "role_limits": { + "rgb": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 2.0}, + "re": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 2.0}, + "nir": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 2.0}, + }, + + "exp_apply_threshold_us": 40, + "gain_apply_threshold": 0.03, + + "ready_required_cycles": 3, + + "apply_same_spectral_to_both": True, + "spectral_roles": ["re", "nir"], + } + + +def default_profile_global(): + cfg = base_ae_contract() + base = { + "x0": 0.08, + "y0": 0.08, + "x1": 0.92, + "y1": 0.92, + } + + cfg.update({ + "metering_mode": "global", + "spectral_control_mode": "shared", + "global_roi_pct": base, + "global_roi_pct_by_role": { + "rgb": dict(base), + "re": dict(base), + "nir": dict(base), + }, + }) + + return { + "radiometric_config": cfg } def default_profile_patches(): - return { - "radiometric_config": { - "enabled": True, - "interval_s": 0.5, - "verbose": True, + cfg = base_ae_contract() + cfg.update({ + "metering_mode": "reference_patches", + "spectral_control_mode": "shared", + "deadband": 0.035, - "metering_mode": "reference_patches", - "spectral_control_mode": "shared", + "metering_mode": "reference_patches", + "patch_control_mode": "gray_primary", + "patch_require_order": True, + "patch_min_separation": 0.08, - "control_metric": "p50", - "target_value": 0.40, - "deadband": 0.035, + "patch_white_sat_limit_pct": 0.50, + "patch_white_p95_limit": 0.90, - "p95_limit": 0.94, - "saturation_limit_pct": 1.0, - "dark_limit_pct": 35.0, + "patch_black_dark_limit_pct": 80.0, + "patch_black_max_p50": 0.20, - "alpha": 0.18, - "exp_step_gain": 0.55, - "prefer_exposure": True, + "patch_gray_min_p50": 0.08, + "patch_gray_max_p50": 0.85, - "exp_min_us": 100, - "exp_max_us": 80000, - "gain_min": 1.0, - "gain_max": 4.0, - - "role_limits": { - "rgb": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 4.0}, - "re": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 3.0}, - "nir": {"exp_min_us": 100, "exp_max_us": 80000, "gain_min": 1.0, "gain_max": 3.0}, + "reference_patches": [ + { + "name": "black_reference", + "type": "black", + "roles": ["rgb", "re", "nir"], + "target_value": 0.06, + "weight": 0.25, + "roi_pct": {}, + "roi_pct_by_role": {"rgb": {}, "re": {}, "nir": {}} }, + { + "name": "gray_reference", + "type": "gray", + "roles": ["rgb", "re", "nir"], + "target_value": 0.40, + "weight": 1.0, + "roi_pct": {}, + "roi_pct_by_role": {"rgb": {}, "re": {}, "nir": {}} + }, + { + "name": "white_reference", + "type": "white", + "roles": ["rgb", "re", "nir"], + "target_value": 0.78, + "weight": 0.7, + "roi_pct": {}, + "roi_pct_by_role": {"rgb": {}, "re": {}, "nir": {}} + } + ], + }) - "reference_patches": [ - { - "name": "black_reference", - "type": "black", - "roles": ["rgb", "re", "nir"], - "roi_pct": {"x0": 0.05, "y0": 0.92, "x1": 0.18, "y1": 0.99}, - "target_value": 0.08, - "weight": 0.7, - }, - { - "name": "gray_reference", - "type": "gray", - "roles": ["rgb", "re", "nir"], - "roi_pct": {"x0": 0.35, "y0": 0.92, "x1": 0.55, "y1": 0.99}, - "target_value": 0.40, - "weight": 1.0, - }, - { - "name": "white_reference", - "type": "white", - "roles": ["rgb", "re", "nir"], - "roi_pct": {"x0": 0.75, "y0": 0.92, "x1": 0.95, "y1": 0.99}, - "target_value": 0.82, - "weight": 0.8, - }, - ], - - "exp_apply_threshold_us": 80, - "gain_apply_threshold": 0.05, - - "apply_same_spectral_to_both": True, - "spectral_roles": ["re", "nir"], - } + return { + "radiometric_config": cfg } +def get_active_profile_name(data: dict) -> str: + name = str(data.get("active_profile", "global_scene_mode")) + if name not in ("global_scene_mode", "three_reference_patches_mode"): + return "global_scene_mode" + return name + + +def set_active_profile_name(data: dict, profile_name: str): + if profile_name not in ("global_scene_mode", "three_reference_patches_mode"): + profile_name = "global_scene_mode" + data["active_profile"] = profile_name + + +def get_active_radiometric_config(data: dict) -> dict: + profile_name = get_active_profile_name(data) + profile = data.get(profile_name, {}) or {} + cfg = profile.get("radiometric_config", {}) or {} + return json.loads(json.dumps(cfg)) + + +def update_root_radiometric_config(data: dict): + data["radiometric_config"] = get_active_radiometric_config(data) + + def load_or_default_config(path: str): if path and os.path.isfile(path): with open(path, "r", encoding="utf-8") as f: @@ -319,36 +390,120 @@ def load_or_default_config(path: str): else: data = {} - data.setdefault("schema", "multispec_radiometric_config_profiles_v1") + data.setdefault("schema", "multispec_radiometric_config_profiles_v3") data.setdefault("saved_at", now_str()) + data.setdefault("active_profile", "global_scene_mode") data.setdefault("global_scene_mode", default_profile_global()) data.setdefault("three_reference_patches_mode", default_profile_patches()) + data.setdefault("patch_normalization", { + "enabled": True, + "apply_when_metering_mode": "reference_patches", + "apply_stage": "after_fusion", + "method": "gray_scale_with_white_guard", + "space": "multispec_tensor", + "targets": { + "black": 0.06, + "gray": 0.40, + "white": 0.78 + }, + "white_guard_max": 0.92, + "scale_min": 0.35, + "scale_max": 2.50, + "clip_output": True, + "require_valid_gray": True, + "use_black_for_offset": False, + "save_patch_stats": True + }) + # Migração: se vier arquivo antigo sem contrato novo, injeta defaults novos + for profile_name, default_fn in ( + ("global_scene_mode", default_profile_global), + ("three_reference_patches_mode", default_profile_patches), + ): + default_profile = default_fn() + data.setdefault(profile_name, default_profile) + data[profile_name].setdefault("radiometric_config", {}) + + default_cfg = default_profile["radiometric_config"] + cfg = data[profile_name]["radiometric_config"] + + for k, v in default_cfg.items(): + cfg.setdefault(k, v) + + update_root_radiometric_config(data) return data def save_config(path: str, data: dict): ensure_dir(os.path.dirname(path) or ".") data = dict(data) - data["schema"] = "multispec_radiometric_config_profiles_v1" + data["schema"] = "multispec_radiometric_config_profiles_v3" data["saved_at"] = now_str() + update_root_radiometric_config(data) + with open(path, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) -def get_global_roi(data: dict): - return ( - data.get("global_scene_mode", {}) - .get("radiometric_config", {}) - .get("global_roi_pct", {"x0": 0.08, "y0": 0.08, "x1": 0.92, "y1": 0.92}) +ROLES = ["rgb", "re", "nir"] + + +def normalize_role(role: str) -> str: + role = str(role or "rgb").lower() + return role if role in ROLES else "rgb" + + +def default_roi(): + return {"x0": 0.08, "y0": 0.08, "x1": 0.92, "y1": 0.92} + + +def clone_roi(roi: dict) -> dict: + roi = roi or {} + return { + "x0": float(roi.get("x0", 0.08)), + "y0": float(roi.get("y0", 0.08)), + "x1": float(roi.get("x1", 0.92)), + "y1": float(roi.get("y1", 0.92)), + } + + +def make_roi_by_role(base_roi=None): + base = clone_roi(base_roi or default_roi()) + return {role: dict(base) for role in ROLES} + + +def ensure_global_roi_by_role(data: dict): + data.setdefault("global_scene_mode", default_profile_global()) + cfg = data["global_scene_mode"].setdefault( + "radiometric_config", + default_profile_global()["radiometric_config"], ) + legacy = cfg.get("global_roi_pct", default_roi()) + by_role = cfg.setdefault("global_roi_pct_by_role", make_roi_by_role(legacy)) -def set_global_roi(data: dict, roi_pct: dict): - data.setdefault("global_scene_mode", default_profile_global()) - data["global_scene_mode"].setdefault("radiometric_config", default_profile_global()["radiometric_config"]) - data["global_scene_mode"]["radiometric_config"]["global_roi_pct"] = roi_pct + for role in ROLES: + if role not in by_role or not by_role[role]: + by_role[role] = clone_roi(legacy) + + return by_role + + +def get_global_roi_for_role(data: dict, role: str): + role = normalize_role(role) + by_role = ensure_global_roi_by_role(data) + return by_role.get(role, clone_roi(default_roi())) + + +def set_global_roi_for_role(data: dict, role: str, roi_pct: dict): + role = normalize_role(role) + by_role = ensure_global_roi_by_role(data) + by_role[role] = roi_pct + + # Compatibilidade: mantém uma ROI antiga preenchida. + # Uso: média/legado/visual antigo. O controller novo deverá usar by_role. + data["global_scene_mode"]["radiometric_config"]["global_roi_pct"] = by_role.get("rgb", roi_pct) def get_patches(data: dict): @@ -359,32 +514,77 @@ def get_patches(data: dict): ) -def set_patch_roi(data: dict, patch_type: str, roi_pct: dict): +def ensure_patch_roi_by_role(patch: dict): + legacy = patch.get("roi_pct", {}) + by_role = patch.setdefault("roi_pct_by_role", {}) + + for role in ROLES: + if role not in by_role or not by_role[role]: + by_role[role] = clone_roi(legacy) if legacy else {} + + return by_role + + +def get_patch_by_type(data: dict, patch_type: str): + patch_type = str(patch_type).lower() + for p in get_patches(data): + if str(p.get("type", "")).lower() == patch_type: + return p + return None + + +def get_patch_roi_for_role(data: dict, patch_type: str, role: str): + role = normalize_role(role) + patch = get_patch_by_type(data, patch_type) + if not patch: + return {} + + by_role = ensure_patch_roi_by_role(patch) + return by_role.get(role, {}) or patch.get("roi_pct", {}) or {} + + +def set_patch_roi_for_role(data: dict, patch_type: str, role: str, roi_pct: dict): data.setdefault("three_reference_patches_mode", default_profile_patches()) cfg = data["three_reference_patches_mode"].setdefault( "radiometric_config", default_profile_patches()["radiometric_config"], ) - patches = cfg.setdefault("reference_patches", default_profile_patches()["radiometric_config"]["reference_patches"]) + + patches = cfg.setdefault( + "reference_patches", + default_profile_patches()["radiometric_config"]["reference_patches"], + ) patch_type = str(patch_type).lower() + role = normalize_role(role) + + target = {"black": 0.06, "gray": 0.40, "white": 0.78}.get(patch_type, 0.40) + weight = {"black": 0.25, "gray": 1.0, "white": 0.7}.get(patch_type, 1.0) + + patch = None for p in patches: if str(p.get("type", "")).lower() == patch_type: - p["roi_pct"] = roi_pct - return + patch = p + break - # Fallback se não existir. - target = {"black": 0.08, "gray": 0.40, "white": 0.82}.get(patch_type, 0.40) - weight = {"black": 0.7, "gray": 1.0, "white": 0.8}.get(patch_type, 1.0) + if patch is None: + patch = { + "name": f"{patch_type}_reference", + "type": patch_type, + "roles": ROLES[:], + "target_value": target, + "weight": weight, + "roi_pct": {}, + "roi_pct_by_role": {}, + } + patches.append(patch) - patches.append({ - "name": f"{patch_type}_reference", - "type": patch_type, - "roles": ["rgb", "re", "nir"], - "roi_pct": roi_pct, - "target_value": target, - "weight": weight, - }) + by_role = ensure_patch_roi_by_role(patch) + by_role[role] = roi_pct + + # Compatibilidade com formato antigo. + # Mantém roi_pct como RGB, para scripts antigos não quebrarem. + patch["roi_pct"] = by_role.get("rgb", roi_pct) def set_shared_mode(data: dict, shared: bool): @@ -394,6 +594,8 @@ def set_shared_mode(data: dict, shared: bool): cfg["spectral_control_mode"] = "shared" if shared else "independent" cfg["apply_same_spectral_to_both"] = bool(shared) + update_root_radiometric_config(data) + # ============================================================ # UI @@ -422,47 +624,113 @@ def draw_roi_on_panel(panel, roi_pct, label, color, thickness=2): 0.55, color, 1, cv2.LINE_AA) -def draw_all_rois(panel, data, selected_target, mode): +def draw_all_rois(panel, data, selected_target, mode, panel_role, edit_role): + panel_role = normalize_role(panel_role) + edit_role = normalize_role(edit_role) + + is_edit_panel = panel_role == edit_role + if mode == "global": - roi = get_global_roi(data) - draw_roi_on_panel(panel, roi, "GLOBAL", PATCH_COLORS["global"], 2) + roi = get_global_roi_for_role(data, panel_role) + label = f"GLOBAL/{panel_role.upper()}" + thickness = 3 if is_edit_panel else 2 + draw_roi_on_panel(panel, roi, label, PATCH_COLORS["global"], thickness) else: for p in get_patches(data): typ = str(p.get("type", "")).lower() color = PATCH_COLORS.get(typ, (0, 255, 255)) - label = typ.upper() - thickness = 3 if typ == selected_target else 2 - draw_roi_on_panel(panel, p.get("roi_pct"), label, color, thickness) + roi = get_patch_roi_for_role(data, typ, panel_role) + + label = f"{typ.upper()}/{panel_role.upper()}" + selected = typ == selected_target and is_edit_panel + thickness = 3 if selected else 2 + + draw_roi_on_panel(panel, roi, label, color, thickness) -def build_board(decoded, data, mode, selected_target, drag_rect_local, panel_rects, preview_scale=1.0): +def build_board( + decoded, + data, + mode, + selected_target, + edit_role, + drag_rect_local, + drag_role, + panel_rects, + preview_scale=1.0, + visual_previews=None, + meta=None, + beauty_preview=True, +): rgb_id, rgb01 = get_image_by_role(decoded, "rgb") re_id, re01 = get_image_by_role(decoded, "re") nir_id, nir01 = get_image_by_role(decoded, "nir") + # ------------------------------------------------------------ + # Tamanho base SEMPRE vem do decoded, porque ROI/stats usam dado real. + # O preview visual é só para desenhar bonito. + # ------------------------------------------------------------ if rgb01 is not None: - rgb_panel = to_bgr_u8_from_rgb01(rgb01) base_h, base_w = rgb01.shape[:2] + elif re01 is not None: + base_h, base_w = re01.shape[:2] + elif nir01 is not None: + base_h, base_w = nir01.shape[:2] else: base_h, base_w = 800, 1280 - rgb_panel = np.zeros((base_h, base_w, 3), dtype=np.uint8) - overlay_hud(rgb_panel, ["RGB", "sem frame"]) - re01 = resize_if_needed(re01, (base_h, base_w)) if re01 is not None else None - nir01 = resize_if_needed(nir01, (base_h, base_w)) if nir01 is not None else None + # ------------------------------------------------------------ + # Preview bonito, igual ao capture. + # ------------------------------------------------------------ + rgb_vis_id, rgb_vis = get_visual_preview_by_role(visual_previews, meta, "rgb") + re_vis_id, re_vis = get_visual_preview_by_role(visual_previews, meta, "re") + nir_vis_id, nir_vis = get_visual_preview_by_role(visual_previews, meta, "nir") - re_panel = gray_to_bgr_u8(re01) if re01 is not None else np.zeros_like(rgb_panel) - nir_panel = gray_to_bgr_u8(nir01) if nir01 is not None else np.zeros_like(rgb_panel) + if beauty_preview and rgb_vis is not None: + rgb_panel = rgb_vis.copy() + if rgb_panel.shape[:2] != (base_h, base_w): + rgb_panel = cv2.resize(rgb_panel, (base_w, base_h), interpolation=cv2.INTER_LINEAR) + rgb_id = rgb_vis_id + else: + if rgb01 is not None: + rgb_panel = to_bgr_u8_from_rgb01(rgb01) + else: + rgb_panel = np.zeros((base_h, base_w, 3), dtype=np.uint8) + overlay_hud(rgb_panel, ["RGB", "sem frame"]) - for p in (rgb_panel, re_panel, nir_panel): - draw_all_rois(p, data, selected_target, mode) + if beauty_preview and re_vis is not None: + re_panel = re_vis.copy() + if re_panel.shape[:2] != (base_h, base_w): + re_panel = cv2.resize(re_panel, (base_w, base_h), interpolation=cv2.INTER_LINEAR) + re_id = re_vis_id + else: + re01_show = resize_if_needed(re01, (base_h, base_w)) if re01 is not None else None + re_panel = gray_to_bgr_u8(re01_show) if re01_show is not None else np.zeros_like(rgb_panel) + + if beauty_preview and nir_vis is not None: + nir_panel = nir_vis.copy() + if nir_panel.shape[:2] != (base_h, base_w): + nir_panel = cv2.resize(nir_panel, (base_w, base_h), interpolation=cv2.INTER_LINEAR) + nir_id = nir_vis_id + else: + nir01_show = resize_if_needed(nir01, (base_h, base_w)) if nir01 is not None else None + nir_panel = gray_to_bgr_u8(nir01_show) if nir01_show is not None else np.zeros_like(rgb_panel) + + draw_all_rois(rgb_panel, data, selected_target, mode, "rgb", edit_role) + draw_all_rois(re_panel, data, selected_target, mode, "re", edit_role) + draw_all_rois(nir_panel, data, selected_target, mode, "nir", edit_role) if drag_rect_local is not None: x0, y0, x1, y1 = drag_rect_local color = PATCH_COLORS["global"] if mode == "global" else PATCH_COLORS.get(selected_target, (0, 255, 255)) - for p in (rgb_panel, re_panel, nir_panel): - cv2.rectangle(p, (x0, y0), (x1, y1), color, 1) + + if drag_role == "rgb": + cv2.rectangle(rgb_panel, (x0, y0), (x1, y1), color, 1) + elif drag_role == "re": + cv2.rectangle(re_panel, (x0, y0), (x1, y1), color, 1) + elif drag_role == "nir": + cv2.rectangle(nir_panel, (x0, y0), (x1, y1), color, 1) overlay_hud(rgb_panel, [f"RGB ({rgb_id})"], y=24) overlay_hud(re_panel, [f"RE ({re_id})"], y=24) @@ -492,7 +760,7 @@ def build_board(decoded, data, mode, selected_target, drag_rect_local, panel_rec board = np.vstack([top, bottom]) x0, y0, x1, y1 = panel_rects["data"] - lines = build_data_lines(decoded, data, mode, selected_target, base_w, base_h) + lines = build_data_lines(decoded, data, mode, selected_target, edit_role, base_w, base_h) overlay_hud(board, lines, x=x0 + 16, y=y0 + 28, font_scale=0.53, line_step=21) if preview_scale != 1.0: @@ -505,51 +773,58 @@ def build_board(decoded, data, mode, selected_target, drag_rect_local, panel_rec return board -def build_data_lines(decoded, data, mode, selected_target, base_w, base_h): - shared = ( - data.get("global_scene_mode", {}) - .get("radiometric_config", {}) - .get("spectral_control_mode", "shared") - ) +def build_data_lines(decoded, data, mode, selected_target, edit_role, base_w, base_h): + edit_role = normalize_role(edit_role) + active_profile = get_active_profile_name(data) + active_cfg = get_active_radiometric_config(data) lines = [ "RADIOMETRIC CONFIG TOOL", - f"modo_edição={mode.upper()} | spectral={shared}", + f"modo_edicao={mode.upper()} | camera_editada={edit_role.upper()} | active={active_profile}", + f"spectral={active_cfg.get('spectral_control_mode')} | strategy={active_cfg.get('control_strategy')}", + f"interval={active_cfg.get('interval_s')}s | ratio_alpha={active_cfg.get('ratio_alpha')} | ready={active_cfg.get('ready_required_cycles')}", "", - "Arraste com o mouse no painel RGB para definir ROI.", - "A ROI é salva em percentuais e aplicada aos 3 sensores.", + "Arraste no painel da camera editada para definir a ROI.", + "Cada camera salva sua propria ROI: RGB / RE / NIR.", "", ] if mode == "global": - roi_pct = get_global_roi(data) - lines.append(f"GLOBAL ROI: {roi_pct}") - lines.extend(stats_lines_for_roi(decoded, roi_pct, base_w, base_h)) + lines.append("GLOBAL ROI por camera:") + for role in ROLES: + roi_pct = get_global_roi_for_role(data, role) + marker = "*" if role == edit_role else " " + lines.append(f"{marker} {role.upper()}: roi={roi_pct}") + + lines.append("") + lines.append("Stats GLOBAL:") + lines.extend(stats_lines_for_mode(data, decoded, mode="global", patch_type=None)) + else: lines.append(f"PATCH selecionado: {selected_target.upper()}") - for p in get_patches(data): - typ = str(p.get("type", "")).lower() - roi_pct = p.get("roi_pct", {}) - lines.append( - f"{typ}: target={float(p.get('target_value', 0.0)):.2f} " - f"weight={float(p.get('weight', 1.0)):.2f}" - ) - lines.append(f" roi={roi_pct}") - - sel_patch = None - for p in get_patches(data): - if str(p.get("type", "")).lower() == selected_target: - sel_patch = p - break + lines.append("ROIs do patch selecionado:") + for role in ROLES: + roi_pct = get_patch_roi_for_role(data, selected_target, role) + marker = "*" if role == edit_role else " " + lines.append(f"{marker} {role.upper()}: roi={roi_pct}") + sel_patch = get_patch_by_type(data, selected_target) if sel_patch: lines.append("") - lines.append(f"Stats do patch {selected_target.upper()}:") - lines.extend(stats_lines_for_roi(decoded, sel_patch.get("roi_pct", {}), base_w, base_h)) + lines.append( + f"target={float(sel_patch.get('target_value', 0.0)):.2f} " + f"weight={float(sel_patch.get('weight', 1.0)):.2f}" + ) + + lines.append("") + lines.append(f"Stats do patch {selected_target.upper()}:") + lines.extend(stats_lines_for_mode(data, decoded, mode="patches", patch_type=selected_target)) lines.extend([ "", "M = alterna GLOBAL / 3 PATCHES", + "C = alterna camera RGB / RE / NIR", + "V = alterna preview bonito / bruto", "1/2/3 = BLACK / GRAY / WHITE", "S = alterna spectral shared/independent", "P ou SPACE = salva JSON", @@ -559,17 +834,24 @@ def build_data_lines(decoded, data, mode, selected_target, base_w, base_h): return lines -def stats_lines_for_roi(decoded, roi_pct, base_w, base_h): - if not roi_pct: - return ["sem ROI"] - +def stats_lines_for_mode(data, decoded, mode: str, patch_type: str | None = None): lines = [] - for role in ("rgb", "re", "nir"): + + for role in ROLES: _, img = get_image_by_role(decoded, role) if img is None: lines.append(f"{role.upper()}: sem frame") continue + if mode == "global": + roi_pct = get_global_roi_for_role(data, role) + else: + roi_pct = get_patch_roi_for_role(data, patch_type, role) + + if not roi_pct: + lines.append(f"{role.upper()}: sem ROI") + continue + h, w = img.shape[:2] roi = pct_to_px(roi_pct, w, h) st = compute_stats(img, roi) @@ -622,6 +904,11 @@ def main(): mode = "global" selected_target = "gray" + edit_role = "rgb" + drag_role = None + beauty_preview = True + visual_previews_last = {} + raw_meta_last = {} panel_rects = {"rgb": None, "re": None, "nir": None, "data": None} dragging = False @@ -636,21 +923,22 @@ def main(): window_name = "Radiometric Config Tool" def on_mouse(event, x, y, flags, param): - nonlocal dragging, drag_start, drag_rect_local, last_msg, last_msg_t, data + nonlocal dragging, drag_start, drag_rect_local, last_msg, last_msg_t, data, drag_role # Coordenadas vêm depois do preview_scale. Reescala para board real. if args.preview_scale != 1.0: x = int(x / args.preview_scale) y = int(y / args.preview_scale) - rgb_rect = panel_rects.get("rgb") - if not rect_inside(rgb_rect, x, y): + edit_rect = panel_rects.get(edit_role) + if not rect_inside(edit_rect, x, y): return - lx, ly = local_from_rect(rgb_rect, x, y) + lx, ly = local_from_rect(edit_rect, x, y) if event == cv2.EVENT_LBUTTONDOWN: dragging = True + drag_role = edit_role drag_start = (lx, ly) drag_rect_local = (lx, ly, lx + 1, ly + 1) @@ -664,24 +952,28 @@ def main(): rect = (sx, sy, lx, ly) drag_rect_local = None - # Descobre tamanho local do painel RGB. - if rgb_rect is None: + # Descobre tamanho local do painel da camera editada. + edit_rect = panel_rects.get(drag_role or edit_role) + if edit_rect is None: return - _, _, x1, y1 = rgb_rect - x0r, y0r, _, _ = rgb_rect + _, _, x1, y1 = edit_rect + x0r, y0r, _, _ = edit_rect w = x1 - x0r h = y1 - y0r roi_pct = px_to_pct(rect, w, h) - if mode == "global": - set_global_roi(data, roi_pct) - last_msg = f"GLOBAL ROI atualizada: {roi_pct}" - else: - set_patch_roi(data, selected_target, roi_pct) - last_msg = f"{selected_target.upper()} ROI atualizada: {roi_pct}" + role_to_save = normalize_role(drag_role or edit_role) + if mode == "global": + set_global_roi_for_role(data, role_to_save, roi_pct) + last_msg = f"GLOBAL ROI {role_to_save.upper()} atualizada: {roi_pct}" + else: + set_patch_roi_for_role(data, selected_target, role_to_save, roi_pct) + last_msg = f"{selected_target.upper()} ROI {role_to_save.upper()} atualizada: {roi_pct}" + + drag_role = None last_msg_t = time.time() cv2.namedWindow(window_name, cv2.WINDOW_NORMAL) @@ -704,10 +996,20 @@ def main(): while True: raw_frame, raw_meta, decoded = cam.get_next_decoded(timeout=2.0) + visual_previews = {} + + try: + if isinstance(raw_frame, dict): + visual_previews = cam.build_visual_preview_from_raw(raw_frame, raw_meta) + except Exception as e: + visual_previews = {} + print(f"[WARN] Falha ao gerar beauty preview: {e}") if raw_meta is not None and raw_meta.get("frame_id") != last_frame_id: last_frame_id = raw_meta.get("frame_id") decoded_last = decoded + visual_previews_last = visual_previews + raw_meta_last = raw_meta if decoded_last: board = build_board( @@ -715,9 +1017,14 @@ def main(): data=data, mode=mode, selected_target=selected_target, + edit_role=edit_role, drag_rect_local=drag_rect_local, + drag_role=drag_role, panel_rects=panel_rects, preview_scale=args.preview_scale, + visual_previews=visual_previews_last, + meta=raw_meta_last, + beauty_preview=beauty_preview, ) if last_msg and (time.time() - last_msg_t) < 2.5: @@ -737,24 +1044,38 @@ def main(): elif k in (ord("m"), ord("M")): mode = "patches" if mode == "global" else "global" - last_msg = f"Modo -> {mode}" + + if mode == "global": + set_active_profile_name(data, "global_scene_mode") + else: + set_active_profile_name(data, "three_reference_patches_mode") + + update_root_radiometric_config(data) + + last_msg = f"Modo -> {mode} | active_profile={data['active_profile']}" last_msg_t = time.time() elif k == ord("1"): mode = "patches" selected_target = "black" + set_active_profile_name(data, "three_reference_patches_mode") + update_root_radiometric_config(data) last_msg = "Selecionado: BLACK" last_msg_t = time.time() elif k == ord("2"): mode = "patches" selected_target = "gray" + set_active_profile_name(data, "three_reference_patches_mode") + update_root_radiometric_config(data) last_msg = "Selecionado: GRAY" last_msg_t = time.time() elif k == ord("3"): mode = "patches" selected_target = "white" + set_active_profile_name(data, "three_reference_patches_mode") + update_root_radiometric_config(data) last_msg = "Selecionado: WHITE" last_msg_t = time.time() @@ -772,11 +1093,32 @@ def main(): elif k in (ord("r"), ord("R")): data = { - "schema": "multispec_radiometric_config_profiles_v1", + "schema": "multispec_radiometric_config_profiles_v3", "saved_at": now_str(), + "active_profile": "global_scene_mode", "global_scene_mode": default_profile_global(), "three_reference_patches_mode": default_profile_patches(), + "patch_normalization": { + "enabled": True, + "apply_when_metering_mode": "reference_patches", + "apply_stage": "after_fusion", + "method": "gray_scale_with_white_guard", + "space": "multispec_tensor", + "targets": { + "black": 0.06, + "gray": 0.40, + "white": 0.78 + }, + "white_guard_max": 0.92, + "scale_min": 0.35, + "scale_max": 2.50, + "clip_output": True, + "require_valid_gray": True, + "use_black_for_offset": False, + "save_patch_stats": True + } } + update_root_radiometric_config(data) last_msg = "Defaults restaurados" last_msg_t = time.time() @@ -786,9 +1128,20 @@ def main(): last_msg_t = time.time() print(f"[OK] radiometric config salvo em: {args.out_json}") + elif k in (ord("c"), ord("C")): + idx = ROLES.index(edit_role) if edit_role in ROLES else 0 + edit_role = ROLES[(idx + 1) % len(ROLES)] + last_msg = f"Camera editada -> {edit_role.upper()}" + last_msg_t = time.time() + + elif k in (ord("v"), ord("V")): + beauty_preview = not beauty_preview + last_msg = f"Beauty Preview -> {beauty_preview}" + last_msg_t = time.time() + finally: cv2.destroyAllWindows() - print("Fim da parametrização radiométrica.") + print("Fim da parametrizacao radiometrica.") if __name__ == "__main__":