diff --git a/data/robot/robot.json b/data/robot/robot.json index 4ed30f3..4fe4b44 100644 --- a/data/robot/robot.json +++ b/data/robot/robot.json @@ -1,6 +1,23 @@ { + "_label": "todo3_2026-06-11", "coordinateSystem": {"handedness": "right", "x": "right", "y": "backward", "z": "up"}, - "units": {"length": "mm", "rotation": "degree"}, + "units": {"_owner": "appRobotDriver", "length": "mm", "rotation": "degree"}, + "kinematics": { + "_owner": "appRobotDriver", + "type": "arm3segmentlinearx" + }, + "motion": { + "_owner": "appRobotDriver", + "defaultFeedrate": 2300, + "speedMode": "legacy", + "speedModeOptions": ["legacy", "correct"] + }, + "controllers": { + "_owner": "appRobotDriver", + "base": { "ip": "fluidNcBase.local", "port": 2300, "protocol": "telnet", "axes": ["x", "y", "z"] }, + "elbow": { "ip": "fluidNcEllbow.local", "port": 5000, "protocol": "telnet", "axes": ["a", null, null] }, + "hand": { "ip": "fluidNcHand.local", "port": 5000, "protocol": "telnet", "axes": ["c", "e", "b"] } + }, "vision_config": {"MarkerType": "DICT_4X4_250", "MarkerSize": 0.025}, "renderingInfo": { "width": 1280, @@ -163,6 +180,7 @@ "normal_flip_weight": 0.05 }, "links": { + "_owner": "appRobotDriver", "Board": { "parent": null, "size": [1000, 200, 25], @@ -273,7 +291,9 @@ "axis": [1, 0, 0], "origin": [0, 0, 16], "rotation": [0, 0, 0], - "variable": "x" + "variable": "x", + "feedrate": 2000, + "controller": "base" }, "skeleton": {"from": [0, 108, 45], "to": [110, 108, 45], "radius": 4, "color": [0.2, 0.8, 0.2]}, "markers": [], @@ -297,7 +317,9 @@ "axis": [-1, 0, 0], "origin": [110, 108, 45], "rotation": [0, 0, 0], - "variable": "y" + "variable": "y", + "feedrate": 2300, + "controller": "base" }, "skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.2, 0.2, 0.9]}, "markers": [ @@ -327,7 +349,9 @@ "axis": [-1, 0, 0], "origin": [0, -250, 0], "rotation": [0, 0, 0], - "variable": "z" + "variable": "z", + "feedrate": 2300, + "controller": "base" }, "skeleton": {"from": [0, 0, 0], "to": [90, 0, 0], "radius": 4, "color": [0.9, 0.2, 0.2]}, "model": [ @@ -358,7 +382,9 @@ "axis": [0, -1, 0], "origin": [90, 0, 0], "rotation": [0, 0, 0], - "variable": "a" + "variable": "a", + "feedrate": 2300, + "controller": "elbow" }, "skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.95, 0.85, 0.2]}, "model": [ @@ -390,7 +416,9 @@ "axis": [1, 0, 0], "origin": [0, -250, 0], "rotation": [0, 0, 0], - "variable": "b" + "variable": "b", + "feedrate": 2300, + "controller": "hand" }, "skeleton": {"from": [0, 0, 0], "to": [0, -35, 0], "radius": 4, "color": [0.95, 0.55, 0.15]} }, @@ -404,7 +432,9 @@ "axis": [0, -1, 0], "origin": [0, 0, 0], "rotation": [0, 0, 0], - "variable": "c" + "variable": "c", + "feedrate": 2300, + "controller": "hand" }, "skeleton": {"from": [-50, -35, 0], "to": [50, -35, 0], "radius": 7, "color": [0.95, 0.2, 0.2]} }, @@ -419,7 +449,9 @@ "axis": [1, 0, 0], "origin": [4, -35, 0], "rotation": [0, 0, 0], - "variable": "e" + "variable": "e", + "feedrate": 2000, + "controller": "hand" }, "skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]}, "markers": [ @@ -447,7 +479,9 @@ "axis": [-1, 0, 0], "origin": [-4, -35, 0], "rotation": [0, 0, 0], - "variable": "e" + "variable": "e", + "feedrate": 2000, + "controller": "hand" }, "skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]}, "markers": [ diff --git a/data/testPictures/calibration_cam0.npz b/data/testPictures/calibration_cam0.npz new file mode 100644 index 0000000..464243a Binary files /dev/null and b/data/testPictures/calibration_cam0.npz differ diff --git a/data/testPictures/calibration_cam1.npz b/data/testPictures/calibration_cam1.npz new file mode 100644 index 0000000..5740b5f Binary files /dev/null and b/data/testPictures/calibration_cam1.npz differ diff --git a/data/testPictures/calibration_cam2.npz b/data/testPictures/calibration_cam2.npz new file mode 100644 index 0000000..c5cf4ca Binary files /dev/null and b/data/testPictures/calibration_cam2.npz differ diff --git a/data/testPictures/cam0_hires_1781074183695.jpg b/data/testPictures/cam0_hires_1781074183695.jpg new file mode 100644 index 0000000..0a0db16 Binary files /dev/null and b/data/testPictures/cam0_hires_1781074183695.jpg differ diff --git a/data/testPictures/cam1_hires_1781074183695.jpg b/data/testPictures/cam1_hires_1781074183695.jpg new file mode 100644 index 0000000..5b220fd Binary files /dev/null and b/data/testPictures/cam1_hires_1781074183695.jpg differ diff --git a/data/testPictures/cam2_hires_1781074183695.jpg b/data/testPictures/cam2_hires_1781074183695.jpg new file mode 100644 index 0000000..bbec513 Binary files /dev/null and b/data/testPictures/cam2_hires_1781074183695.jpg differ diff --git a/data/testPictures/robot_1781069752019.json b/data/testPictures/robot_1781069752019.json new file mode 100644 index 0000000..987bc24 --- /dev/null +++ b/data/testPictures/robot_1781069752019.json @@ -0,0 +1,433 @@ +{ + "coordinateSystem": {"handedness": "right", "x": "right", "y": "backward", "z": "up"}, + "units": {"length": "mm", "rotation": "degree"}, + "vision_config": {"MarkerType": "DICT_4X4_250", "MarkerSize": 0.025}, + "renderingInfo": { + "width": 1280, + "height": 720, + "renderDefaults": {"width": 1280, "height": 720, "dofFStop": 11}, + "cameraPosition__1": [-10, -800, 500], + "cameraPosition__2": [-500, 300, 1200], + "cameraPosition__3": [-200, -900, 200], + "cameraPosition__4": [1200, 200, 300], + "cameraPosition_a": [-300, -800, 500], + "cameraPosition": [-200, 200, 1400], + "cameraPosition_c": [600, -500, 600], + "cameraTarget": [200, -200, 180], + "cameraUpVector": [0, 0, 1], + "lightPosition": [-500, -500, 500], + "lightTarget": [0, 0, 0], + "lightUpVector": [0, 0, 1], + "metric": "mm", + "showSkeleton": true, + "showMarkers": true, + "backgroundColor": [0.7, 0.85, 1.0], + "backgroundStrength": 0.2, + "sunEnergy": 0.35, + "areaEnergy": 120, + "exposure": -1.5, + "lensDirt": true, + "lensDirtStrength": 0.08, + "dofEnabled": true, + "dofFStop": 11.0, + "arucoDust": true, + "arucoDustStrength": 1.6, + "markerOffsetMaxMm": 4.0, + "markerOffsetSeed": 0, + "markerRotationMaxDeg": 3, + "motionBlur": true, + "motionBlurMaxPx": 5.5, + "focalErrorPct": 0.5, + "principalErrorPx": 3.0, + "residualDistortion": [0.02, -0.01], + "localizedBlur": false, + "localizedBlurStrength": 0.15, + "vignette": true, + "vignetteStrength": 0.08, + "sensorNoise": true, + "sensorNoiseStrength": 0.01, + "lensDistortion": true, + "lensDistortionStrength": 0.002, + "materials": { + "wood": {"baseColor": [0.72, 0.52, 0.33], "roughness": 0.85, "metallic": 0.0}, + "plaWhite": {"baseColor": [0.95, 0.95, 0.95], "roughness": 0.45, "metallic": 0.0}, + "steel": {"baseColor": [0.72, 0.72, 0.75], "roughness": 0.25, "metallic": 1.0}, + "powderCoatBlue": {"baseColor": [0.15, 0.25, 0.7], "roughness": 0.55, "metallic": 0.0}, + "defaultPlastic": {"baseColor": [0.95, 0.95, 0.95], "roughness": 0.4, "metallic": 0.0}, + "skeletonRed": {"baseColor": [0.85, 0.2, 0.2], "roughness": 0.35, "metallic": 0.0}, + "markerBlack": {"baseColor": [0.04, 0.04, 0.04], "roughness": 0.8, "metallic": 0.0} + }, + "skeletonDefaults": {"radius": 4, "color": [0.85, 0.2, 0.2]}, + "markerDefaults": {"size": 25, "thickness": 1, "color": [0.04, 0.04, 0.04]}, + "defaultPosition": {"x": 80, "y": 20, "z": 80, "a": -120, "b": 23, "c": 9, "e": 3} + }, + "defaultPosition__": {"x": 10, "y": 4, "z": 20, "a": 10, "b": 2, "c": 9, "e": 1}, + "defaultPosition": {"x": 50, "y": 4, "z": 176, "a": 20, "b": 60, "c": 9, "e": 5}, + "recognized": {"x": null, "y": null, "z": null, "a": null, "b": null, "c": null, "e": null}, + "constraint_rules": { + "rigid_distance": {"enabled": true, "mode": "mst", "weight": 1.0}, + "joint_axis_projection": {"enabled": true, "max_pairs": 2, "weight": 0.35}, + "chain_axis_projection": {"enabled": false, "max_depth": 3, "max_pairs": 2, "weight": 0.15}, + "axis_alignment_threshold": 0.95 + }, + "observation_weighting": {"enabled": true, "distance_weight": true, "marker_size_weight": true, "view_angle_weight": true}, + "multiview_calculation": { + "combine_mode": "mean", + "size_ref_px": 50.0, + "border_ref_px": 120.0, + "center_ref_norm": 0.01, + "sharpness_ref": 2500.0, + "homography_ref": 0.18, + "size_factor": 0.3, + "aspect_factor": 0.3, + "border_factor": 0.01, + "center_factor": 0.01, + "sharpness_factor": 0.5, + "homography_factor": 0.2, + "normal_visibility_factor": 0.01, + "spin_factor": 0.3, + "weight_floor": 0.3 + }, + "pose_estimation": { + "method": "hybrid", + "marker_observation": "corner_pose", + "use_normals": true, + "normal_weight": 100.0, + "robust_loss": "huber", + "huber_delta_mm": 8.0, + "max_iterations": 200, + "min_cameras_per_marker": 2, + "finger_block_joints": ["b", "c", "e"], + "per_link_method": {} + }, + "robot_test_poses": { + "4": {"x": 70, "y": 50, "z": -70, "a": 120, "b": 50, "c": 30, "e": 20}, + "5": {"x": 180, "y": 86, "z": -120, "a": -60, "b": 22, "c": 91, "e": 10}, + "6": {"x": 80, "y": 20, "z": 80, "a": -120, "b": 23, "c": 9, "e": 3}, + "7": {"x": 30, "y": -2, "z": 95, "a": 20, "b": 23, "c": 9, "e": 9}, + "8": {"x": 50, "y": -2, "z": 95, "a": 20, "b": 60, "c": 9, "e": 3}, + "9": {"x": 60, "y": -2, "z": 95, "a": 200, "b": 60, "c": 9, "e": 8}, + "9a": { + "x": 60, + "y": -2, + "z": 95, + "a": 200, + "b": 60, + "c": 9, + "e": 8, + "rendering": {"width": 1440, "height": 1080, "dofFStop": 11} + }, + "9b": { + "x": 60, + "y": -2, + "z": 95, + "a": 200, + "b": 60, + "c": 9, + "e": 8, + "rendering": {"width": 4896, "height": 3264, "dofFStop": 5.6} + }, + "10": {"x": 120, "y": 60, "z": -110, "a": 20, "b": 30, "c": 180, "e": 4}, + "11": {"x": 50, "y": 4, "z": 176, "a": 20, "b": 60, "c": 9, "e": 5}, + "12": {"x": 50, "y": 0, "z": 178, "a": 210, "b": 80, "c": 90, "e": 6} + }, + "test_camera_positions": { + "a": [-300, -800, 800], + "b": [300, -900, 1200], + "c": [300, -900, 400], + "d": [700, -800, 400], + "e": [1200, -900, 400], + "f": [500, -300, 1400], + "g": [-200, 200, 1400] + }, + "test_camera_targets": { + "a": [210, -100, 180], + "b": [310, -80, 180], + "c": [210, -100, 150], + "d": [210, -100, 150], + "e": [210, -100, 50], + "f": [200, -200, 180], + "g": [200, -200, 180] + }, + "movements": {"x": null, "y": null, "z": null, "a": null, "b": null, "c": null, "e": null}, + "state_pose_params": { + "numbers_of_Elements_to_consider_start": 3, + "numbers_of_Elements_to_consider_final": 5, + "solver_in_between_geometrical": false, + "solver_after_geometrical": false, + "geometric_passes_per_stage": 2, + "revolute_search_coarse_deg": 5.0, + "revolute_search_fine_deg": 1.0, + "root_pose_min_markers": 3, + "use_marker_normals_flip_tiebreak": true, + "normal_flip_weight": 0.05 + }, + "links": { + "Board": { + "parent": null, + "size": [1000, 200, 25], + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "skeleton": {"from": [0, 0, 16], "to": [1000, 0, 16], "radius": 4, "color": [0.85, 0.2, 0.2]}, + "markers": [ + { + "id": 46, + "set": "A0", + "position": [536.71, 185.44, -27.3], + "normal": [0, 0, 1], + "spin": 90, + "info": "is placed on a white paper, A0_60Arucos_25mm_Seet223.pdf, with the following marker placements:" + }, + {"id": 47, "set": "A0", "position": [344.23, -286.54, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 48, "set": "A0", "position": [688.69, -320.72, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 49, "set": "A0", "position": [1006.0, 158.33, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 50, "set": "A0", "position": [573.41, 211.86, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 51, "set": "A0", "position": [167.8, -172.08, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 52, "set": "A0", "position": [94.68, 208.66, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 53, "set": "A0", "position": [486.25, 212.24, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 54, "set": "A0", "position": [342.27, -330.59, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 55, "set": "A0", "position": [283.72, -262.58, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 56, "set": "A0", "position": [498.68, 168.67, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 57, "set": "A0", "position": [602.86, -364.05, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 58, "set": "A0", "position": [50.09, -218.11, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 59, "set": "A0", "position": [626.21, -278.75, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 60, "set": "A0", "position": [434.36, 283.81, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 61, "set": "A0", "position": [-22.42, 335.83, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 62, "set": "A0", "position": [404.7, -175.1, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 63, "set": "A0", "position": [777.4, -236.15, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 64, "set": "A0", "position": [-21.27, -188.23, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 65, "set": "A0", "position": [803.39, -297.37, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 66, "set": "A0", "position": [209.75, -363.23, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 67, "set": "A0", "position": [523.07, 267.04, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 68, "set": "A0", "position": [573.73, 170.64, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 69, "set": "A0", "position": [7.61, -281.21, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 70, "set": "A0", "position": [601.87, 300.33, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 71, "set": "A0", "position": [749.75, -284.01, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 72, "set": "A0", "position": [440.99, 194.32, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 73, "set": "A0", "position": [221.73, 333.11, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 74, "set": "A0", "position": [93.78, 144.5, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 75, "set": "A0", "position": [-25.7, 194.58, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 76, "set": "A0", "position": [685.21, 166.8, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 77, "set": "A0", "position": [18.19, 191.57, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 78, "set": "A0", "position": [823.11, -344.38, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 79, "set": "A0", "position": [312.3, -159.11, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 80, "set": "A0", "position": [863.59, -335.92, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 81, "set": "A0", "position": [132.14, 169.03, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 82, "set": "A0", "position": [219.16, 297.24, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 83, "set": "A0", "position": [44.16, 339.22, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 84, "set": "A0", "position": [407.49, 258.42, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 85, "set": "A0", "position": [504.58, -312.75, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 86, "set": "A0", "position": [362.89, 292.01, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 87, "set": "A0", "position": [943.63, -245.76, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 88, "set": "A0", "position": [765.87, 316.04, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 89, "set": "A0", "position": [988.02, -369.14, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 90, "set": "A0", "position": [643.17, 316.43, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 91, "set": "A0", "position": [723.35, 328.05, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 92, "set": "A0", "position": [645.09, -184.84, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 93, "set": "A0", "position": [934.88, 143.6, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 94, "set": "A0", "position": [875.7, 173.65, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 95, "set": "A0", "position": [186.04, -274.07, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 96, "set": "A0", "position": [369.77, -186.49, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 97, "set": "A0", "position": [304.35, -359.67, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 98, "set": "A0", "position": [575.27, 315.06, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 99, "set": "A0", "position": [959.16, -321.55, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 100, "set": "A0", "position": [803.25, 172.36, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 101, "set": "A0", "position": [117.7, 298.66, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 102, "set": "A0", "position": [649.69, -223.0, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 103, "set": "A0", "position": [105.71, -187.71, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 104, "set": "A0", "position": [826.71, 239.16, -27.3], "normal": [0, 0, 1], "spin": 90}, + {"id": 105, "set": "A0", "position": [524.84, -266.25, -27.3], "normal": [0, 0, 1], "spin": 90} + ], + "model": [ + { + "stlFile": "surfaces/Board.stl", + "originOfModel": [0, 0, 0], + "rotationOfModelDegree": [0, 0, -90], + "material": "wood" + }, + { + "stlFile": "surfaces/BoardRail.stl", + "originOfModel": [0, 0, 0], + "rotationOfModelDegree": [0, 0, -90], + "material": "steel" + } + ] + }, + "Base": { + "parent": "Board", + "size": [150, 200, 150], + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Slider", + "type": "linear", + "axis": [1, 0, 0], + "origin": [0, 0, 16], + "rotation": [0, 0, 0], + "variable": "x" + }, + "skeleton": {"from": [0, 108, 45], "to": [110, 108, 45], "radius": 4, "color": [0.2, 0.8, 0.2]}, + "markers": [], + "model": [ + { + "stlFile": "surfaces/Base.stl", + "originOfModel": [-30, 0, -35], + "rotationOfModelDegree": [0, 0, 0], + "material": "plaWhite" + } + ] + }, + "Arm1": { + "parent": "Base", + "size": [70, 250, 70], + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Joint1", + "type": "revolute", + "axis": [-1, 0, 0], + "origin": [110, 108, 45], + "rotation": [0, 0, 0], + "variable": "y" + }, + "skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.2, 0.2, 0.9]}, + "markers": [ ], + "model": [ + { + "stlFile": "surfaces/Holm.stl", + "originOfModel__": [-25, 29, -28.5], + "originOfModel": [-29, 25, 28.5], + "rotationOfModelDegree__": [0, 0, 0], + "rotationOfModelDegree": [180, 0, -90], + "material": "powderCoatBlue" + } + ] + }, + "Ellbow": { + "parent": "Arm1", + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Joint2", + "type": "revolute", + "axis": [-1, 0, 0], + "origin": [0, -250, 0], + "rotation": [0, 0, 0], + "variable": "z" + }, + "skeleton": {"from": [0, 0, 0], "to": [90, 0, 0], "radius": 4, "color": [0.9, 0.2, 0.2]}, + "model": [ + { + "stlFile": "surfaces/Ellebogen.stl", + "originOfModel": [90, 0, 0], + "rotationOfModelDegree": [0, -90, -90], + "material": "defaultPlastic" + } + ], + "markers": [ + ] + }, + "Arm2": { + "parent": "Ellbow", + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Joint3", + "type": "revolute", + "axis": [0, -1, 0], + "origin": [90, 0, 0], + "rotation": [0, 0, 0], + "variable": "a" + }, + "skeleton": {"from": [0, 0, 0], "to": [0, -250, 0], "radius": 4, "color": [0.95, 0.85, 0.2]}, + "model": [ + { + "stlFile": "surfaces/Unterarm.stl", + "originOfModel": [0, -250, 0], + "rotationOfModelDegree": [180, 0, -90], + "material": "defaultPlastic" + } + ], + "markers": [ + ] + }, + "Hand": { + "parent": "Arm2", + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Joint4", + "type": "revolute", + "axis": [1, 0, 0], + "origin": [0, -250, 0], + "rotation": [0, 0, 0], + "variable": "b" + }, + "skeleton": {"from": [0, 0, 0], "to": [0, -35, 0], "radius": 4, "color": [0.95, 0.55, 0.15]} + }, + "Palm": { + "parent": "Hand", + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Joint3", + "type": "revolute", + "axis": [0, -1, 0], + "origin": [0, 0, 0], + "rotation": [0, 0, 0], + "variable": "c" + }, + "skeleton": {"from": [-50, -35, 0], "to": [50, -35, 0], "radius": 7, "color": [0.95, 0.2, 0.2]} + }, + "FingerA": { + "parent": "Palm", + "size": [80, 60, 20], + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Slider", + "type": "linear", + "axis": [1, 0, 0], + "origin": [4, -35, 0], + "rotation": [0, 0, 0], + "variable": "e" + }, + "skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]}, + "markers": [ + ], + "model": [ + { + "stlFile": "surfaces/Finger.stl", + "originOfModel": [24, 0, -9.1], + "rotationOfModelDegree": [90, -90, 0], + "material": "defaultPlastic" + } + ] + }, + "FingerB": { + "parent": "Palm", + "size": [80, 60, 20], + "mountPosition": [0, 0, 0], + "mountRotation": [0, 0, 0], + "jointToParent": { + "name": "Slider", + "type": "linear", + "axis": [-1, 0, 0], + "origin": [-4, -35, 0], + "rotation": [0, 0, 0], + "variable": "e" + }, + "skeleton": {"from": [0, 0, 0], "to": [0, -60, 0], "radius": 4, "color": [0.2, 0.8, 0.2]}, + "markers": [ + ], + "model": [ + { + "stlFile": "surfaces/Finger.stl", + "originOfModel": [-24, 0, 9.1], + "rotationOfModelDegree": [90, 90, 0], + "material": "defaultPlastic" + } + ] + } + } +} diff --git a/pipeline/1_detect_aruco_observations.py b/pipeline/1_detect_aruco_observations.py index e9d591d..6749c83 100644 --- a/pipeline/1_detect_aruco_observations.py +++ b/pipeline/1_detect_aruco_observations.py @@ -351,6 +351,12 @@ def main(): required=True ) + parser.add_argument( + '--saveDebugImage', + action='store_true', + help='Speichert ein Debug-JPG mit eingezeichneten Marker-Rahmen' + ) + args = parser.parse_args() out_dir = resolve_path(args.outDir) @@ -404,6 +410,9 @@ def main(): detector_tuple ) + # ids_raw: original numpy array für drawDetectedMarkers + ids_raw = ids + detections = [] # -------------------------------------------------------- @@ -601,6 +610,25 @@ def main(): print(f'Saved: {out_json}') + # -------------------------------------------------------- + # Debug-Bild mit Marker-Rahmen + # -------------------------------------------------------- + + if args.saveDebugImage: + + debug_img = image.copy() + + if corners_list and ids_raw is not None: + cv2.aruco.drawDetectedMarkers(debug_img, corners_list, ids_raw) + + debug_path = os.path.join( + out_dir, + f'{input_base}_debug.jpg' + ) + + cv2.imwrite(debug_path, debug_img) + print(f'Saved debug: {debug_path}') + # ------------------------------------------------------------ diff --git a/test/jRun.py b/test/jRun.py new file mode 100644 index 0000000..e26a7db --- /dev/null +++ b/test/jRun.py @@ -0,0 +1,424 @@ +#!/usr/bin/env python3 +""" +jRun.py – Test-Pipeline: detect → camera-pose → ArUco-CSV + +Ablauf: + 1. pipeline/1_detect_aruco_observations.py pro Bild → test/temp/ + 2. pipeline/2_estimate_camera_from_observations.py pro Bild → test/temp/ + 3. Positionen + Normalen per solvePnP aus Beobachtungen ableiten, + über alle Kameras mitteln, nach ID sortieren + 4. test/temp/detections.csv schreiben: id, set, x, y, z, nx, ny, nz + +Einheiten: x/y/z in mm (Weltframe des Roboters), nx/ny/nz dimensionslos. +""" + +from __future__ import annotations + +import csv +import glob +import json +import os +import re +import subprocess +import sys +from typing import Dict, List, Optional, Tuple + +import cv2 +import numpy as np + +# --------------------------------------------------------------------------- +# Pfade +# --------------------------------------------------------------------------- +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +PROJECT_ROOT = os.path.dirname(SCRIPT_DIR) +PIPELINE_DIR = os.path.join(PROJECT_ROOT, "pipeline") +DATA_DIR = os.path.join(PROJECT_ROOT, "data", "testPictures") +TEMP_DIR = os.path.join(SCRIPT_DIR, "temp") + + +# --------------------------------------------------------------------------- +# Hilfsfunktionen – Dateien +# --------------------------------------------------------------------------- + +def find_images() -> List[str]: + return sorted(glob.glob(os.path.join(DATA_DIR, "cam*_hires_*.jpg"))) + + +def cam_id_from_path(img_path: str) -> str: + m = re.match(r"(cam\d+)_", os.path.basename(img_path)) + if not m: + raise ValueError(f"Kein Camera-ID in Dateiname: {img_path}") + return m.group(1) + + +def npz_path(cam_id: str) -> str: + p = os.path.join(DATA_DIR, f"calibration_{cam_id}.npz") + if not os.path.exists(p): + raise FileNotFoundError(f"Kalibrierung nicht gefunden: {p}") + return p + + +def find_robot_json() -> str: + candidates = glob.glob(os.path.join(DATA_DIR, "robot*.json")) + if not candidates: + raise FileNotFoundError(f"Kein robot*.json in {DATA_DIR}") + return sorted(candidates)[0] + + +def detection_json_path(img_path: str) -> str: + base = os.path.splitext(os.path.basename(img_path))[0] + return os.path.join(TEMP_DIR, f"{base}_aruco_detection.json") + + +def camera_pose_json_path(img_path: str) -> str: + base = os.path.splitext(os.path.basename(img_path))[0] + return os.path.join(TEMP_DIR, f"{base}_camera_pose.json") + + +# --------------------------------------------------------------------------- +# Subprocess-Wrapper +# --------------------------------------------------------------------------- + +def run_step(cmd: List[str]) -> None: + print(f"\n>>> {' '.join(cmd)}") + r = subprocess.run(cmd, text=True) + if r.returncode != 0: + raise RuntimeError(f"Befehl fehlgeschlagen (exit {r.returncode})") + + +# --------------------------------------------------------------------------- +# Marker-Klassifizierung aus robot.json +# --------------------------------------------------------------------------- + +def load_marker_set_map(robot_path: str) -> Dict[int, str]: + """ + Gibt marker_id -> Set-Label zurück. + 'set'-Marker → set_name (z.B. 'Brett', 'A0') + Arm/Loose → Link-Name + """ + if PIPELINE_DIR not in sys.path: + sys.path.insert(0, PIPELINE_DIR) + + # Import erst nach sys.path-Erweiterung + from marker_sets import classify_markers # noqa: PLC0415 + + with open(robot_path, "r", encoding="utf-8") as f: + robot_data = json.load(f) + + classification = classify_markers(robot_data) + result: Dict[int, str] = {} + for mid, info in classification.items(): + if info.role == "set" and info.set_name: + result[mid] = info.set_name + else: + result[mid] = info.link + return result + + +def load_a0_reference(robot_path: str) -> Dict[int, np.ndarray]: + """ + Welt-Referenz (x, y) in mm für die A0-Marker aus robot.json. + + Nur die A0-Marker definieren (momentan) die Welt-Koordinaten, daher wird + der dxy-Abgleich ausschließlich auf sie beschränkt. Position steht im + Board-Frame = Welt-Frame (Board ist Wurzel-Link bei [0,0,0]). + """ + if PIPELINE_DIR not in sys.path: + sys.path.insert(0, PIPELINE_DIR) + + from marker_sets import classify_markers # noqa: PLC0415 + + with open(robot_path, "r", encoding="utf-8") as f: + robot_data = json.load(f) + + ref: Dict[int, np.ndarray] = {} + for mid, info in classify_markers(robot_data).items(): + if info.role == "set" and info.set_name == "A0": + ref[mid] = np.array(info.position[:2], dtype=float) + return ref + + +# --------------------------------------------------------------------------- +# Positionen + Normalen per solvePnP +# --------------------------------------------------------------------------- + +def _marker_local_corners(marker_size_m: float) -> np.ndarray: + h = marker_size_m / 2.0 + return np.array([ + [-h, h, 0.0], + [ h, h, 0.0], + [ h, -h, 0.0], + [-h, -h, 0.0], + ], dtype=np.float32) + + +def estimate_marker_poses( + det_json: dict, + pose_json: dict, +) -> Dict[int, Tuple[np.ndarray, np.ndarray]]: + """ + Gibt pro erkannter Marker-ID: (pos_mm [3], normal_world [3]) zurück. + + pos_mm: Marker-Mittelpunkt im Weltframe, Einheit mm + normal_world: normierter Normalenvektor (Marker-Z-Achse im Weltframe) + """ + K = np.array(det_json["camera"]["camera_matrix"], + dtype=np.float64).reshape(3, 3) + D = np.array(det_json["camera"]["distortion_coefficients"], + dtype=np.float64).reshape(-1, 1) + marker_size_m = float( + det_json.get("vision_config", {}).get("MarkerSize", 0.025) + ) + + w2c = pose_json["camera_pose"]["world_to_camera"] + R_wc = np.array(w2c["rotation_matrix"], dtype=np.float64).reshape(3, 3) + t_wc = np.array(w2c["translation_m"], dtype=np.float64).reshape(3) + + obj_corners = _marker_local_corners(marker_size_m) + result: Dict[int, Tuple[np.ndarray, np.ndarray]] = {} + + for det in det_json.get("detections", []): + mid = int(det["marker_id"]) + corners_px = np.array( + det["image_points_px"], dtype=np.float32 + ).reshape(4, 2) + + ok, rvec, tvec = cv2.solvePnP( + obj_corners, corners_px, + K.astype(np.float32), D.astype(np.float32), + flags=cv2.SOLVEPNP_IPPE_SQUARE, + ) + if not ok: + ok, rvec, tvec = cv2.solvePnP( + obj_corners, corners_px, + K.astype(np.float32), D.astype(np.float32), + flags=cv2.SOLVEPNP_ITERATIVE, + ) + if not ok: + continue + + tvec_f = tvec.reshape(3).astype(np.float64) + R_mc, _ = cv2.Rodrigues(rvec.reshape(3, 1)) + R_mc = R_mc.astype(np.float64) + + # Weltframe-Position: x_world = R_wc.T @ (x_cam - t_wc) + pos_world_m = R_wc.T @ (tvec_f - t_wc) + + # Marker-Normale (Z-Achse) im Weltframe + normal_cam = R_mc[:, 2] + normal_world = R_wc.T @ normal_cam + nlen = np.linalg.norm(normal_world) + if nlen > 1e-9: + normal_world /= nlen + + result[mid] = (pos_world_m * 1000.0, normal_world) + + return result + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +def main() -> None: + os.makedirs(TEMP_DIR, exist_ok=True) + + images = find_images() + if not images: + print(f"[FEHLER] Keine cam*_hires_*.jpg in {DATA_DIR}") + sys.exit(1) + + robot_path = find_robot_json() + print(f"Robot: {os.path.basename(robot_path)}") + print(f"Bilder: {[os.path.basename(i) for i in images]}") + print(f"Ausgabe-Ordner: {TEMP_DIR}") + + # ------------------------------------------------------------------ + # Schritt 1: ArUco-Erkennung + # ------------------------------------------------------------------ + print("\n" + "=" * 60) + print("Schritt 1: ArUco-Erkennung") + print("=" * 60) + for img in images: + cam_id = cam_id_from_path(img) + run_step([ + sys.executable, + os.path.join(PIPELINE_DIR, "1_detect_aruco_observations.py"), + "-i", img, + "-npz", npz_path(cam_id), + "-robot", robot_path, + "-cameraId", cam_id, + "-outDir", TEMP_DIR, + "--saveDebugImage", + ]) + + # ------------------------------------------------------------------ + # Schritt 2: Kamera-Positionen + # ------------------------------------------------------------------ + print("\n" + "=" * 60) + print("Schritt 2: Kamera-Poses") + print("=" * 60) + for img in images: + run_step([ + sys.executable, + os.path.join(PIPELINE_DIR, "2_estimate_camera_from_observations.py"), + "-i", detection_json_path(img), + "-robot", robot_path, + "-outDir", TEMP_DIR, + ]) + + # ------------------------------------------------------------------ + # Schritt 3: Beobachtungen zusammenführen + # ------------------------------------------------------------------ + print("\n" + "=" * 60) + print("Schritt 3: Positionen + Normalen") + print("=" * 60) + + marker_set_map = load_marker_set_map(robot_path) + a0_ref = load_a0_reference(robot_path) + + # mid -> Liste von (pos_mm, normal) + observations: Dict[int, List[Tuple[np.ndarray, np.ndarray]]] = {} + + # cam_id -> Welt-Position (mm) / QA-Metadaten + camera_positions: Dict[str, np.ndarray] = {} + camera_meta: Dict[str, dict] = {} + + for img in images: + det_path = detection_json_path(img) + pose_path = camera_pose_json_path(img) + + if not os.path.exists(det_path): + print(f"[WARN] Fehlend: {det_path}") + continue + if not os.path.exists(pose_path): + print(f"[WARN] Fehlend: {pose_path}") + continue + + with open(det_path, "r", encoding="utf-8") as f: + det_json = json.load(f) + with open(pose_path, "r", encoding="utf-8") as f: + pose_json = json.load(f) + + cam_id = cam_id_from_path(img) + ciw = pose_json["camera_pose"]["camera_in_world"]["position_mm"] + camera_positions[cam_id] = np.array(ciw, dtype=float) + est = pose_json.get("estimation", {}) + camera_meta[cam_id] = { + "rms_px": est.get("residual_rms_px"), + "num_markers": est.get("num_used_markers"), + } + + cam_name = os.path.basename(img) + poses = estimate_marker_poses(det_json, pose_json) + print(f" {cam_name}: {len(poses)} Marker mit Pose") + + for mid, pn in poses.items(): + observations.setdefault(mid, []).append(pn) + + # ------------------------------------------------------------------ + # Mittelwert über alle Kameras + CSV schreiben + # ------------------------------------------------------------------ + rows = [] + for mid in sorted(observations.keys()): + obs_list = observations[mid] + positions = np.array([p for p, _ in obs_list]) + normals = np.array([n for _, n in obs_list]) + + pos_mean = positions.mean(axis=0) + + n_sum = normals.sum(axis=0) + n_norm = np.linalg.norm(n_sum) + normal_mean = n_sum / n_norm if n_norm > 1e-9 else np.array([0.0, 0.0, 1.0]) + + set_label = marker_set_map.get(mid, "?") + + # dxy: planarer Abgleich gegen robot.json — nur für A0 definiert + if mid in a0_ref: + d = pos_mean[:2] - a0_ref[mid] + dxy = round(float(np.hypot(d[0], d[1])), 2) + else: + dxy = "" + + rows.append({ + "id": mid, + "set": set_label, + "SeenByCount": len(obs_list), + "x": round(float(pos_mean[0]), 2), + "y": round(float(pos_mean[1]), 2), + "z": round(float(pos_mean[2]), 2), + "nx": round(float(normal_mean[0]), 4), + "ny": round(float(normal_mean[1]), 4), + "nz": round(float(normal_mean[2]), 4), + "dxy": dxy, + }) + + # Kamera-Positionen als eigene Zeilen (oben in der CSV) + camera_rows = [] + for cam_id in sorted(camera_positions.keys()): + pos = camera_positions[cam_id] + camera_rows.append({ + "id": cam_id, + "set": "CAMERA", + "SeenByCount": "", + "x": round(float(pos[0]), 2), + "y": round(float(pos[1]), 2), + "z": round(float(pos[2]), 2), + "nx": "", + "ny": "", + "nz": "", + "dxy": "", + }) + + csv_path = os.path.join(TEMP_DIR, "detections.csv") + fieldnames = ["id", "set", "SeenByCount", "x", "y", "z", "nx", "ny", "nz", "dxy"] + + with open(csv_path, "w", newline="", encoding="utf-8") as f: + writer = csv.DictWriter(f, fieldnames=fieldnames) + writer.writeheader() + writer.writerows(camera_rows + rows) + + # ------------------------------------------------------------------ + # Konsolenübersicht + # ------------------------------------------------------------------ + print(f"\nGeschrieben: {csv_path} " + f"({len(rows)} Marker + {len(camera_rows)} Kameras)\n") + + # Kamera-Positionen + Reprojektions-RMS (schlechte Kamera erkennen) + print("Kamera-Positionen (Welt, mm):") + chdr = f"{'cam':>5} {'x':>9} {'y':>9} {'z':>9} {'rms_px':>7} {'#mk':>4}" + print(chdr) + print("-" * len(chdr)) + for cam_id in sorted(camera_positions.keys()): + pos = camera_positions[cam_id] + meta = camera_meta.get(cam_id, {}) + rms = meta.get("rms_px") + nmk = meta.get("num_markers") + rms_s = f"{rms:7.2f}" if rms is not None else " n/a" + print(f"{cam_id:>5} {pos[0]:>9.1f} {pos[1]:>9.1f} {pos[2]:>9.1f} " + f"{rms_s} {str(nmk):>4}") + + # Marker-Tabelle + print() + hdr = (f"{'id':>5} {'set':<12} {'cams':>4} {'x':>8} {'y':>8} {'z':>8} " + f"{'nx':>7} {'ny':>7} {'nz':>7} {'dxy':>7}") + print(hdr) + print("-" * len(hdr)) + for row in rows: + dxy_s = f"{row['dxy']:7.2f}" if row['dxy'] != "" else " -" + print( + f"{row['id']:>5} {row['set']:<12} {row['SeenByCount']:>4} " + f"{row['x']:>8.1f} {row['y']:>8.1f} {row['z']:>8.1f} " + f"{row['nx']:>7.4f} {row['ny']:>7.4f} {row['nz']:>7.4f} {dxy_s}" + ) + + # A0-Abgleich-Statistik (planarer Fehler gegen robot.json) + dxys = np.array([row["dxy"] for row in rows if row["dxy"] != ""], dtype=float) + if dxys.size: + print(f"\nA0 dxy (Welt-Abgleich, mm): n={dxys.size} " + f"mean={dxys.mean():.2f} median={np.median(dxys):.2f} " + f"max={dxys.max():.2f}") + + +if __name__ == "__main__": + main() diff --git a/test/temp/cam0_hires_1781074183695_aruco_detection.json b/test/temp/cam0_hires_1781074183695_aruco_detection.json new file mode 100644 index 0000000..659ba47 --- /dev/null +++ b/test/temp/cam0_hires_1781074183695_aruco_detection.json @@ -0,0 +1,2956 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-10T10:41:05Z", + "vision_config": { + "MarkerType": "DICT_4X4_250", + "MarkerSize": 0.025 + }, + "camera": { + "camera_id": "cam0", + "intrinsics_file": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\calibration_cam0.npz", + "camera_matrix": [ + [ + 1429.6978759765625, + 0.0, + 633.3245239257812 + ], + [ + 0.0, + 1414.5067138671875, + 468.4399108886719 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.0862322673201561, + 0.14179007709026337, + 0.0014998731203377247, + -0.004277258180081844, + -0.7496029734611511 + ] + }, + "image": { + "image_file": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\cam0_hires_1781074183695.jpg", + "image_sha256": "1de57746b55076a7eb31d0c79499a7c4dcf56fdfaec441aca9514522022618a9", + "width_px": 1280, + "height_px": 960 + }, + "aruco": { + "dictionary": "DICT_4X4_250", + "num_detected_markers": 45, + "num_rejected_candidates": 19 + }, + "detections": [ + { + "observation_id": "79c47d22-6a4e-461c-8de2-21b076363848", + "type": "aruco", + "marker_id": 95, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 251.0, + 879.0 + ], + [ + 226.0, + 849.0 + ], + [ + 268.0, + 829.0 + ], + [ + 292.0, + 859.0 + ] + ], + "center_px": [ + 259.25, + 854.0 + ], + "quality": { + "area_px": 1735.0, + "perimeter_px": 169.60678482055664, + "sharpness": { + "laplacian_var": 2120.669361574038 + }, + "contrast": { + "p05": 9.800000000000004, + "p95": 191.0, + "dynamic_range": 181.2, + "mean_gray": 78.5233644859813, + "std_gray": 73.07912639689545 + }, + "geometry": { + "distance_to_center_norm": 0.6671377420425415, + "distance_to_border_px": 81.0 + }, + "edge_ratio": 1.210836317737908, + "edge_lengths_px": [ + 39.051246643066406, + 46.51881408691406, + 38.41874694824219, + 45.617977142333984 + ] + }, + "confidence": 0.8258754592596019 + }, + { + "observation_id": "92f4c8b0-1c5d-4776-80cf-9002d5c2e432", + "type": "aruco", + "marker_id": 97, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 535.0, + 881.0 + ], + [ + 508.0, + 853.0 + ], + [ + 541.0, + 834.0 + ], + [ + 570.0, + 863.0 + ] + ], + "center_px": [ + 538.5, + 857.75 + ], + "quality": { + "area_px": 1487.0, + "perimeter_px": 157.34569549560547, + "sharpness": { + "laplacian_var": 4144.771615451731 + }, + "contrast": { + "p05": 5.0, + "p95": 209.0, + "dynamic_range": 204.0, + "mean_gray": 100.15868263473054, + "std_gray": 82.44426998981052 + }, + "geometry": { + "distance_to_center_norm": 0.4889358878135681, + "distance_to_border_px": 79.0 + }, + "edge_ratio": 1.0770329346014373, + "edge_lengths_px": [ + 38.897300720214844, + 38.07886505126953, + 41.01219177246094, + 39.357337951660156 + ] + }, + "confidence": 0.9204299158225671 + }, + { + "observation_id": "e54355b2-0e54-4557-8c88-28b9856624ab", + "type": "aruco", + "marker_id": 51, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 118.0, + 772.0 + ], + [ + 98.0, + 746.0 + ], + [ + 141.0, + 730.0 + ], + [ + 161.0, + 755.0 + ] + ], + "center_px": [ + 129.5, + 750.75 + ], + "quality": { + "area_px": 1426.5, + "perimeter_px": 156.9368553161621, + "sharpness": { + "laplacian_var": 3119.4975099343874 + }, + "contrast": { + "p05": 8.0, + "p95": 187.0, + "dynamic_range": 179.0, + "mean_gray": 73.20146904512067, + "std_gray": 67.82202589250042 + }, + "geometry": { + "distance_to_center_norm": 0.7223181128501892, + "distance_to_border_px": 98.0 + }, + "edge_ratio": 1.4442485335177475, + "edge_lengths_px": [ + 32.80244064331055, + 45.880279541015625, + 32.015621185302734, + 46.2385139465332 + ] + }, + "confidence": 0.6584739246254625 + }, + { + "observation_id": "c1453384-403c-44eb-8168-b5b5e656a93f", + "type": "aruco", + "marker_id": 55, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 397.0, + 786.0 + ], + [ + 373.0, + 761.0 + ], + [ + 408.0, + 745.0 + ], + [ + 433.0, + 769.0 + ] + ], + "center_px": [ + 402.75, + 765.25 + ], + "quality": { + "area_px": 1274.0, + "perimeter_px": 147.6067123413086, + "sharpness": { + "laplacian_var": 4360.429203762386 + }, + "contrast": { + "p05": 5.0, + "p95": 208.0, + "dynamic_range": 203.0, + "mean_gray": 83.81678486997636, + "std_gray": 79.08732195290122 + }, + "geometry": { + "distance_to_center_norm": 0.46377381682395935, + "distance_to_border_px": 174.0 + }, + "edge_ratio": 1.148796599828041, + "edge_lengths_px": [ + 34.65544509887695, + 38.4837646484375, + 34.65544509887695, + 39.81205749511719 + ] + }, + "confidence": 0.7393243794945659 + }, + { + "observation_id": "be3ed18f-bb8e-4e5b-ab72-3eccd39d2a5b", + "type": "aruco", + "marker_id": 54, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 555.0, + 819.0 + ], + [ + 528.0, + 791.0 + ], + [ + 559.0, + 776.0 + ], + [ + 586.0, + 801.0 + ] + ], + "center_px": [ + 557.0, + 796.75 + ], + "quality": { + "area_px": 1267.0, + "perimeter_px": 145.97928619384766, + "sharpness": { + "laplacian_var": 3037.9859516642923 + }, + "contrast": { + "p05": 7.0, + "p95": 201.0, + "dynamic_range": 194.0, + "mean_gray": 52.40279394644936, + "std_gray": 61.86348176720657 + }, + "geometry": { + "distance_to_center_norm": 0.40930497646331787, + "distance_to_border_px": 141.0 + }, + "edge_ratio": 1.1294762947413475, + "edge_lengths_px": [ + 38.897300720214844, + 34.438350677490234, + 36.79673767089844, + 35.84689712524414 + ] + }, + "confidence": 0.7478392159262601 + }, + { + "observation_id": "e628c8a4-666f-4715-a9d0-d7895bc20387", + "type": "aruco", + "marker_id": 47, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 507.0, + 769.0 + ], + [ + 482.0, + 746.0 + ], + [ + 514.0, + 731.0 + ], + [ + 539.0, + 755.0 + ] + ], + "center_px": [ + 510.5, + 750.25 + ], + "quality": { + "area_px": 1114.5, + "perimeter_px": 138.89571380615234, + "sharpness": { + "laplacian_var": 3666.9188098708873 + }, + "contrast": { + "p05": 10.0, + "p95": 205.8499999999999, + "dynamic_range": 195.8499999999999, + "mean_gray": 77.65943877551021, + "std_gray": 73.41953868630283 + }, + "geometry": { + "distance_to_center_norm": 0.37459418177604675, + "distance_to_border_px": 191.0 + }, + "edge_ratio": 1.040347177593094, + "edge_lengths_px": [ + 33.970577239990234, + 35.34119415283203, + 34.65544509887695, + 34.928497314453125 + ] + }, + "confidence": 0.7141846645068768 + }, + { + "observation_id": "ba217422-5367-44f1-a8ce-207be0cdbcd1", + "type": "aruco", + "marker_id": 79, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 338.0, + 666.0 + ], + [ + 316.0, + 644.0 + ], + [ + 349.0, + 632.0 + ], + [ + 370.0, + 653.0 + ] + ], + "center_px": [ + 343.25, + 648.75 + ], + "quality": { + "area_px": 967.5, + "perimeter_px": 130.4651165008545, + "sharpness": { + "laplacian_var": 5889.262111466389 + }, + "contrast": { + "p05": 5.0, + "p95": 212.0, + "dynamic_range": 207.0, + "mean_gray": 105.5625, + "std_gray": 80.9004906439567 + }, + "geometry": { + "distance_to_center_norm": 0.42671915888786316, + "distance_to_border_px": 294.0 + }, + "edge_ratio": 1.1823533117854022, + "edge_lengths_px": [ + 31.11269760131836, + 35.11410140991211, + 29.698484420776367, + 34.539833068847656 + ] + }, + "confidence": 0.545522217065577 + }, + { + "observation_id": "799950bd-205e-4b20-ad38-6cdbc9648359", + "type": "aruco", + "marker_id": 96, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 439.0, + 658.0 + ], + [ + 417.0, + 638.0 + ], + [ + 447.0, + 626.0 + ], + [ + 471.0, + 646.0 + ] + ], + "center_px": [ + 443.5, + 642.0 + ], + "quality": { + "area_px": 896.0, + "perimeter_px": 127.46014022827148, + "sharpness": { + "laplacian_var": 4818.198172255993 + }, + "contrast": { + "p05": 10.0, + "p95": 208.0, + "dynamic_range": 198.0, + "mean_gray": 95.7206611570248, + "std_gray": 78.17189991776428 + }, + "geometry": { + "distance_to_center_norm": 0.3183361291885376, + "distance_to_border_px": 302.0 + }, + "edge_ratio": 1.1494637322852417, + "edge_lengths_px": [ + 29.73213768005371, + 32.31098937988281, + 31.240999221801758, + 34.1760139465332 + ] + }, + "confidence": 0.5196626187985754 + }, + { + "observation_id": "a81403cb-1285-4c4d-a258-dfc3ca86ca90", + "type": "aruco", + "marker_id": 215, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 304.0, + 553.0 + ], + [ + 338.0, + 543.0 + ], + [ + 358.0, + 560.0 + ], + [ + 327.0, + 571.0 + ] + ], + "center_px": [ + 331.75, + 556.75 + ], + "quality": { + "area_px": 794.5, + "perimeter_px": 123.78883171081543, + "sharpness": { + "laplacian_var": 4399.607173623619 + }, + "contrast": { + "p05": 6.0, + "p95": 198.0, + "dynamic_range": 192.0, + "mean_gray": 82.18938053097345, + "std_gray": 74.82140075620532 + }, + "geometry": { + "distance_to_center_norm": 0.39707648754119873, + "distance_to_border_px": 304.0 + }, + "edge_ratio": 1.3501598902945051, + "edge_lengths_px": [ + 35.44009017944336, + 26.248809814453125, + 32.893768310546875, + 29.20616340637207 + ] + }, + "confidence": 0.39229921616996966 + }, + { + "observation_id": "3bfe6c5b-18e8-4bcd-abae-326e2b250e4a", + "type": "aruco", + "marker_id": 85, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 726.0, + 699.0 + ], + [ + 700.0, + 677.0 + ], + [ + 726.0, + 666.0 + ], + [ + 750.0, + 687.0 + ] + ], + "center_px": [ + 725.5, + 682.25 + ], + "quality": { + "area_px": 825.0, + "perimeter_px": 121.01321411132812, + "sharpness": { + "laplacian_var": 3796.928809961839 + }, + "contrast": { + "p05": 17.0, + "p95": 209.0, + "dynamic_range": 192.0, + "mean_gray": 132.10338680926915, + "std_gray": 73.84217408108663 + }, + "geometry": { + "distance_to_center_norm": 0.2744747996330261, + "distance_to_border_px": 261.0 + }, + "edge_ratio": 1.2692955556331147, + "edge_lengths_px": [ + 34.058773040771484, + 28.23118782043457, + 31.890438079833984, + 26.832815170288086 + ] + }, + "confidence": 0.4333112154683819 + }, + { + "observation_id": "6fe1ffbd-8695-433f-b33c-46e5e09130a2", + "type": "aruco", + "marker_id": 62, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 472.0, + 630.0 + ], + [ + 451.0, + 610.0 + ], + [ + 479.0, + 600.0 + ], + [ + 502.0, + 620.0 + ] + ], + "center_px": [ + 476.0, + 615.0 + ], + "quality": { + "area_px": 800.0, + "perimeter_px": 120.83441543579102, + "sharpness": { + "laplacian_var": 2735.4917128187863 + }, + "contrast": { + "p05": 10.200000000000003, + "p95": 182.79999999999995, + "dynamic_range": 172.59999999999997, + "mean_gray": 46.18899082568807, + "std_gray": 49.52496421637216 + }, + "geometry": { + "distance_to_center_norm": 0.2655212879180908, + "distance_to_border_px": 330.0 + }, + "edge_ratio": 1.0904405528101428, + "edge_lengths_px": [ + 29.0, + 29.73213768005371, + 30.479501724243164, + 31.62277603149414 + ] + }, + "confidence": 0.48909895359164274 + }, + { + "observation_id": "e76da69c-b304-4a8b-b2ea-af6e17c71fee", + "type": "aruco", + "marker_id": 211, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 233.0, + 484.0 + ], + [ + 265.0, + 476.0 + ], + [ + 284.0, + 492.0 + ], + [ + 252.0, + 500.0 + ] + ], + "center_px": [ + 258.5, + 488.0 + ], + "quality": { + "area_px": 664.0, + "perimeter_px": 115.6486587524414, + "sharpness": { + "laplacian_var": 5477.641716682056 + }, + "contrast": { + "p05": 8.0, + "p95": 196.25, + "dynamic_range": 188.25, + "mean_gray": 86.1907894736842, + "std_gray": 72.51473536455033 + }, + "geometry": { + "distance_to_center_norm": 0.4769798219203949, + "distance_to_border_px": 233.0 + }, + "edge_ratio": 1.3279198012384816, + "edge_lengths_px": [ + 32.98484420776367, + 24.83948516845703, + 32.98484420776367, + 24.83948516845703 + ] + }, + "confidence": 0.33335346476030747 + }, + { + "observation_id": "a256f524-5eeb-4a1f-8c38-32c7826a1686", + "type": "aruco", + "marker_id": 57, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 879.0, + 690.0 + ], + [ + 853.0, + 670.0 + ], + [ + 875.0, + 660.0 + ], + [ + 901.0, + 679.0 + ] + ], + "center_px": [ + 877.0, + 674.75 + ], + "quality": { + "area_px": 702.0, + "perimeter_px": 113.76776504516602, + "sharpness": { + "laplacian_var": 4846.745821409989 + }, + "contrast": { + "p05": 5.0, + "p95": 207.25, + "dynamic_range": 202.25, + "mean_gray": 90.11290322580645, + "std_gray": 73.06282754582274 + }, + "geometry": { + "distance_to_center_norm": 0.3834395110607147, + "distance_to_border_px": 270.0 + }, + "edge_ratio": 1.3573746534330882, + "edge_lengths_px": [ + 32.80244064331055, + 24.166091918945312, + 32.202484130859375, + 24.59674835205078 + ] + }, + "confidence": 0.3447832172321244 + }, + { + "observation_id": "42d4f319-ab52-47df-8680-fefbd55b4990", + "type": "aruco", + "marker_id": 105, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 697.0, + 647.0 + ], + [ + 673.0, + 628.0 + ], + [ + 697.0, + 618.0 + ], + [ + 721.0, + 637.0 + ] + ], + "center_px": [ + 697.0, + 632.5 + ], + "quality": { + "area_px": 696.0, + "perimeter_px": 113.22091293334961, + "sharpness": { + "laplacian_var": 2446.709637919276 + }, + "contrast": { + "p05": 14.0, + "p95": 177.94999999999993, + "dynamic_range": 163.94999999999993, + "mean_gray": 48.26968503937008, + "std_gray": 49.51958280320183 + }, + "geometry": { + "distance_to_center_norm": 0.20350542664527893, + "distance_to_border_px": 313.0 + }, + "edge_ratio": 1.1773252487182617, + "edge_lengths_px": [ + 30.610456466674805, + 26.0, + 30.610456466674805, + 26.0 + ] + }, + "confidence": 0.3941136916116856 + }, + { + "observation_id": "9f57c979-7d60-46ab-9300-2a7d37ab5297", + "type": "aruco", + "marker_id": 219, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1200.0, + 426.0 + ], + [ + 1216.0, + 404.0 + ], + [ + 1242.0, + 418.0 + ], + [ + 1225.0, + 439.0 + ] + ], + "center_px": [ + 1220.75, + 421.75 + ], + "quality": { + "area_px": 771.0, + "perimeter_px": 111.92910575866699, + "sharpness": { + "laplacian_var": 2149.702067915623 + }, + "contrast": { + "p05": 15.0, + "p95": 195.0, + "dynamic_range": 180.0, + "mean_gray": 93.33396946564885, + "std_gray": 68.06623619826162 + }, + "geometry": { + "distance_to_center_norm": 0.7295799255371094, + "distance_to_border_px": 38.0 + }, + "edge_ratio": 1.0929412073659053, + "edge_lengths_px": [ + 27.20294189453125, + 29.529645919799805, + 27.018512725830078, + 28.17800521850586 + ] + }, + "confidence": 0.3574208725659457 + }, + { + "observation_id": "ebcdc16b-245a-435f-af24-842e9dd4c59e", + "type": "aruco", + "marker_id": 0, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 512.0, + 487.0 + ], + [ + 542.0, + 480.0 + ], + [ + 561.0, + 494.0 + ], + [ + 536.0, + 502.0 + ] + ], + "center_px": [ + 537.75, + 490.75 + ], + "quality": { + "area_px": 560.0, + "perimeter_px": 108.95744323730469, + "sharpness": { + "laplacian_var": 4312.64496658187 + }, + "contrast": { + "p05": 4.0, + "p95": 191.0, + "dynamic_range": 187.0, + "mean_gray": 78.85788113695091, + "std_gray": 67.94577529942634 + }, + "geometry": { + "distance_to_center_norm": 0.12851692736148834, + "distance_to_border_px": 458.0 + }, + "edge_ratio": 1.305285485492912, + "edge_lengths_px": [ + 30.805843353271484, + 23.600847244262695, + 26.248809814453125, + 28.301942825317383 + ] + }, + "confidence": 0.28601661282730984 + }, + { + "observation_id": "dc2bbd28-59df-474f-a75d-a71f6a301cc7", + "type": "aruco", + "marker_id": 218, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1093.0, + 365.0 + ], + [ + 1110.0, + 344.0 + ], + [ + 1132.0, + 357.0 + ], + [ + 1115.0, + 378.0 + ] + ], + "center_px": [ + 1112.5, + 361.0 + ], + "quality": { + "area_px": 683.0, + "perimeter_px": 105.14475631713867, + "sharpness": { + "laplacian_var": 2711.242988240561 + }, + "contrast": { + "p05": 15.0, + "p95": 200.0, + "dynamic_range": 185.0, + "mean_gray": 84.83195020746888, + "std_gray": 70.48261885101253 + }, + "geometry": { + "distance_to_center_norm": 0.6090685129165649, + "distance_to_border_px": 148.0 + }, + "edge_ratio": 1.057316075994293, + "edge_lengths_px": [ + 27.018512725830078, + 25.553865432739258, + 27.018512725830078, + 25.553865432739258 + ] + }, + "confidence": 0.4306501562507133 + }, + { + "observation_id": "91d9664a-919b-43ff-9c56-49e483f4132b", + "type": "aruco", + "marker_id": 59, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 807.0, + 611.0 + ], + [ + 784.0, + 592.0 + ], + [ + 803.0, + 583.0 + ], + [ + 828.0, + 601.0 + ] + ], + "center_px": [ + 805.5, + 596.75 + ], + "quality": { + "area_px": 598.0, + "perimeter_px": 104.92191505432129, + "sharpness": { + "laplacian_var": 3434.7421063784695 + }, + "contrast": { + "p05": 12.400000000000002, + "p95": 206.0, + "dynamic_range": 193.6, + "mean_gray": 110.71561771561771, + "std_gray": 74.92515776811197 + }, + "geometry": { + "distance_to_center_norm": 0.2531699240207672, + "distance_to_border_px": 349.0 + }, + "edge_ratio": 1.465284539185399, + "edge_lengths_px": [ + 29.832868576049805, + 21.02379608154297, + 30.805843353271484, + 23.25940704345703 + ] + }, + "confidence": 0.272074573917431 + }, + { + "observation_id": "4a2cb2d9-8764-4242-a376-7dbd61b8cf53", + "type": "aruco", + "marker_id": 48, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 904.0, + 615.0 + ], + [ + 880.0, + 597.0 + ], + [ + 901.0, + 589.0 + ], + [ + 924.0, + 605.0 + ] + ], + "center_px": [ + 902.25, + 601.5 + ], + "quality": { + "area_px": 560.0, + "perimeter_px": 102.85073471069336, + "sharpness": { + "laplacian_var": 3414.144439400253 + }, + "contrast": { + "p05": 10.0, + "p95": 195.0, + "dynamic_range": 185.0, + "mean_gray": 72.28428927680798, + "std_gray": 63.63333226476761 + }, + "geometry": { + "distance_to_center_norm": 0.3612852990627289, + "distance_to_border_px": 345.0 + }, + "edge_ratio": 1.341640795411857, + "edge_lengths_px": [ + 30.0, + 22.472204208374023, + 28.017850875854492, + 22.360679626464844 + ] + }, + "confidence": 0.27826623535156253 + }, + { + "observation_id": "b60cc888-57fe-47ce-8c90-0c61535c0611", + "type": "aruco", + "marker_id": 102, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 771.0, + 560.0 + ], + [ + 750.0, + 543.0 + ], + [ + 771.0, + 536.0 + ], + [ + 793.0, + 552.0 + ] + ], + "center_px": [ + 771.25, + 547.75 + ], + "quality": { + "area_px": 516.0, + "perimeter_px": 99.76679801940918, + "sharpness": { + "laplacian_var": 5018.991760556786 + }, + "contrast": { + "p05": 8.0, + "p95": 213.0, + "dynamic_range": 205.0, + "mean_gray": 118.50558659217877, + "std_gray": 74.5648360372318 + }, + "geometry": { + "distance_to_center_norm": 0.1846306473016739, + "distance_to_border_px": 400.0 + }, + "edge_ratio": 1.228903607824147, + "edge_lengths_px": [ + 27.018512725830078, + 22.135944366455078, + 27.20294189453125, + 23.409399032592773 + ] + }, + "confidence": 0.27992431449450633 + }, + { + "observation_id": "1ae0326c-4deb-41c9-a618-f11e1394d86c", + "type": "aruco", + "marker_id": 86, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 70.0, + 328.0 + ], + [ + 58.0, + 317.0 + ], + [ + 86.0, + 312.0 + ], + [ + 103.0, + 324.0 + ] + ], + "center_px": [ + 79.25, + 320.25 + ], + "quality": { + "area_px": 416.0, + "perimeter_px": 98.77193641662598, + "sharpness": { + "laplacian_var": 4498.019989594172 + }, + "contrast": { + "p05": 3.0, + "p95": 168.0, + "dynamic_range": 165.0, + "mean_gray": 74.43225806451613, + "std_gray": 63.06126251816574 + }, + "geometry": { + "distance_to_center_norm": 0.7288267612457275, + "distance_to_border_px": 58.0 + }, + "edge_ratio": 2.0420115784922652, + "edge_lengths_px": [ + 16.278820037841797, + 28.44292449951172, + 20.808652877807617, + 33.241539001464844 + ] + }, + "confidence": 0.1358137908003952 + }, + { + "observation_id": "d1f301d9-c32a-40f7-a034-c6a4f6c190c5", + "type": "aruco", + "marker_id": 71, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 914.0, + 564.0 + ], + [ + 891.0, + 548.0 + ], + [ + 910.0, + 540.0 + ], + [ + 933.0, + 556.0 + ] + ], + "center_px": [ + 912.0, + 552.0 + ], + "quality": { + "area_px": 488.0, + "perimeter_px": 97.26675796508789, + "sharpness": { + "laplacian_var": 4077.601687080101 + }, + "contrast": { + "p05": 17.0, + "p95": 202.2, + "dynamic_range": 185.2, + "mean_gray": 118.1454005934718, + "std_gray": 70.25278383178484 + }, + "geometry": { + "distance_to_center_norm": 0.35171008110046387, + "distance_to_border_px": 347.0 + }, + "edge_ratio": 1.359065396280733, + "edge_lengths_px": [ + 28.017850875854492, + 20.615528106689453, + 28.017850875854492, + 20.615528106689453 + ] + }, + "confidence": 0.23938019040412045 + }, + { + "observation_id": "620458b5-8298-4a7d-845e-5b916c40361c", + "type": "aruco", + "marker_id": 92, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 730.0, + 536.0 + ], + [ + 710.0, + 519.0 + ], + [ + 730.0, + 512.0 + ], + [ + 751.0, + 528.0 + ] + ], + "center_px": [ + 730.25, + 523.75 + ], + "quality": { + "area_px": 492.0, + "perimeter_px": 96.31139183044434, + "sharpness": { + "laplacian_var": 4452.816402363321 + }, + "contrast": { + "p05": 8.8, + "p95": 198.59999999999997, + "dynamic_range": 189.79999999999995, + "mean_gray": 73.34421364985164, + "std_gray": 66.42570359857417 + }, + "geometry": { + "distance_to_center_norm": 0.12536898255348206, + "distance_to_border_px": 424.0 + }, + "edge_ratio": 1.2459286964699647, + "edge_lengths_px": [ + 26.248809814453125, + 21.189620971679688, + 26.4007568359375, + 22.472204208374023 + ] + }, + "confidence": 0.2632574407582938 + }, + { + "observation_id": "799e6eb3-baeb-44b4-aadd-ec908507effe", + "type": "aruco", + "marker_id": 214, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 468.0, + 420.0 + ], + [ + 491.0, + 413.0 + ], + [ + 509.0, + 427.0 + ], + [ + 485.0, + 433.0 + ] + ], + "center_px": [ + 488.25, + 423.25 + ], + "quality": { + "area_px": 431.0, + "perimeter_px": 92.98470687866211, + "sharpness": { + "laplacian_var": 5940.502596952908 + }, + "contrast": { + "p05": 6.0, + "p95": 202.0, + "dynamic_range": 196.0, + "mean_gray": 107.66118421052632, + "std_gray": 73.26291205520138 + }, + "geometry": { + "distance_to_center_norm": 0.20251783728599548, + "distance_to_border_px": 413.0 + }, + "edge_ratio": 1.1559604761140412, + "edge_lengths_px": [ + 24.041629791259766, + 22.803508758544922, + 24.73863410949707, + 21.40093421936035 + ] + }, + "confidence": 0.24856674537805434 + }, + { + "observation_id": "2bb16258-7023-4a98-a2c7-9b3513721759", + "type": "aruco", + "marker_id": 72, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 226.0, + 364.0 + ], + [ + 210.0, + 351.0 + ], + [ + 237.0, + 346.0 + ], + [ + 252.0, + 359.0 + ] + ], + "center_px": [ + 231.25, + 355.0 + ], + "quality": { + "area_px": 422.0, + "perimeter_px": 94.40042686462402, + "sharpness": { + "laplacian_var": 4404.449417273673 + }, + "contrast": { + "p05": 2.0, + "p95": 174.65000000000003, + "dynamic_range": 172.65000000000003, + "mean_gray": 55.44193548387097, + "std_gray": 59.86755421651035 + }, + "geometry": { + "distance_to_center_norm": 0.5342950224876404, + "distance_to_border_px": 210.0 + }, + "edge_ratio": 1.3833674455789569, + "edge_lengths_px": [ + 20.615528106689453, + 27.459060668945312, + 19.84943389892578, + 26.476404190063477 + ] + }, + "confidence": 0.2033684790201144 + }, + { + "observation_id": "9e3d1e3c-fd9b-46a0-80d1-cb4fbfb5619a", + "type": "aruco", + "marker_id": 84, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 144.0, + 337.0 + ], + [ + 131.0, + 325.0 + ], + [ + 158.0, + 320.0 + ], + [ + 173.0, + 332.0 + ] + ], + "center_px": [ + 151.5, + 328.5 + ], + "quality": { + "area_px": 406.0, + "perimeter_px": 93.78811836242676, + "sharpness": { + "laplacian_var": 6408.332837440297 + }, + "contrast": { + "p05": 2.9000000000000004, + "p95": 176.0, + "dynamic_range": 173.1, + "mean_gray": 77.84949832775919, + "std_gray": 64.22307036655016 + }, + "geometry": { + "distance_to_center_norm": 0.6393166184425354, + "distance_to_border_px": 131.0 + }, + "edge_ratio": 1.6633619036263092, + "edge_lengths_px": [ + 17.69180679321289, + 27.459060668945312, + 19.209373474121094, + 29.42787742614746 + ] + }, + "confidence": 0.16272265589141124 + }, + { + "observation_id": "45115643-afcb-4e0b-b5e7-26a5e7f24bb0", + "type": "aruco", + "marker_id": 201, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 745.0, + 198.0 + ], + [ + 764.0, + 207.0 + ], + [ + 757.0, + 233.0 + ], + [ + 739.0, + 222.0 + ] + ], + "center_px": [ + 751.25, + 215.0 + ], + "quality": { + "area_px": 527.5, + "perimeter_px": 93.78327560424805, + "sharpness": { + "laplacian_var": 3013.3355953613736 + }, + "contrast": { + "p05": 6.400000000000002, + "p95": 167.59999999999997, + "dynamic_range": 161.19999999999996, + "mean_gray": 65.06233062330624, + "std_gray": 54.921909736406114 + }, + "geometry": { + "distance_to_center_norm": 0.3592560887336731, + "distance_to_border_px": 198.0 + }, + "edge_ratio": 1.2807308017655485, + "edge_lengths_px": [ + 21.02379608154297, + 26.925823211669922, + 21.095022201538086, + 24.73863410949707 + ] + }, + "confidence": 0.2745828133296064 + }, + { + "observation_id": "8c17e8ac-9dd6-4207-a6b1-a38d57f64983", + "type": "aruco", + "marker_id": 65, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 968.0, + 553.0 + ], + [ + 945.0, + 537.0 + ], + [ + 962.0, + 530.0 + ], + [ + 985.0, + 546.0 + ] + ], + "center_px": [ + 965.0, + 541.5 + ], + "quality": { + "area_px": 433.0, + "perimeter_px": 92.80525588989258, + "sharpness": { + "laplacian_var": 4519.611659915454 + }, + "contrast": { + "p05": 15.0, + "p95": 201.0, + "dynamic_range": 186.0, + "mean_gray": 101.78405315614619, + "std_gray": 67.91432367561434 + }, + "geometry": { + "distance_to_center_norm": 0.4134595990180969, + "distance_to_border_px": 295.0 + }, + "edge_ratio": 1.5239701178078287, + "edge_lengths_px": [ + 28.017850875854492, + 18.384777069091797, + 28.017850875854492, + 18.384777069091797 + ] + }, + "confidence": 0.1894175373214682 + }, + { + "observation_id": "1f7cb6a0-4e1d-45a9-98af-65b1849f1216", + "type": "aruco", + "marker_id": 80, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1051.0, + 557.0 + ], + [ + 1026.0, + 541.0 + ], + [ + 1042.0, + 534.0 + ], + [ + 1066.0, + 549.0 + ] + ], + "center_px": [ + 1046.25, + 545.25 + ], + "quality": { + "area_px": 424.0, + "perimeter_px": 92.44783592224121, + "sharpness": { + "laplacian_var": 3072.3391439241595 + }, + "contrast": { + "p05": 14.0, + "p95": 195.0, + "dynamic_range": 181.0, + "mean_gray": 82.99661016949153, + "std_gray": 66.6622398798389 + }, + "geometry": { + "distance_to_center_norm": 0.5143209099769592, + "distance_to_border_px": 214.0 + }, + "edge_ratio": 1.7459790846880745, + "edge_lengths_px": [ + 29.681644439697266, + 17.464248657226562, + 28.301942825317383, + 17.0 + ] + }, + "confidence": 0.16189579196314718 + }, + { + "observation_id": "3614208f-13e7-46dc-a1f7-9ced2761d328", + "type": "aruco", + "marker_id": 208, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 632.0, + 446.0 + ], + [ + 651.0, + 439.0 + ], + [ + 672.0, + 453.0 + ], + [ + 651.0, + 460.0 + ] + ], + "center_px": [ + 651.5, + 449.5 + ], + "quality": { + "area_px": 420.0, + "perimeter_px": 91.22410774230957, + "sharpness": { + "laplacian_var": 5697.668131368159 + }, + "contrast": { + "p05": 4.0, + "p95": 196.0, + "dynamic_range": 192.0, + "mean_gray": 83.3840830449827, + "std_gray": 70.86192936865164 + }, + "geometry": { + "distance_to_center_norm": 0.04074501618742943, + "distance_to_border_px": 439.0 + }, + "edge_ratio": 1.2464583959548694, + "edge_lengths_px": [ + 20.248456954956055, + 25.238859176635742, + 22.135944366455078, + 23.600847244262695 + ] + }, + "confidence": 0.22463645871268856 + }, + { + "observation_id": "48e4b388-f6ca-4e3f-b3a7-d0b3b7e59b3a", + "type": "aruco", + "marker_id": 89, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1163.0, + 533.0 + ], + [ + 1140.0, + 519.0 + ], + [ + 1155.0, + 510.0 + ], + [ + 1179.0, + 524.0 + ] + ], + "center_px": [ + 1159.25, + 521.5 + ], + "quality": { + "area_px": 428.5, + "perimeter_px": 90.56112480163574, + "sharpness": { + "laplacian_var": 3474.7660134325033 + }, + "contrast": { + "p05": 14.3, + "p95": 185.7, + "dynamic_range": 171.39999999999998, + "mean_gray": 88.30944625407166, + "std_gray": 63.45732882637006 + }, + "geometry": { + "distance_to_center_norm": 0.6511322259902954, + "distance_to_border_px": 101.0 + }, + "edge_ratio": 1.588356343172512, + "edge_lengths_px": [ + 26.925823211669922, + 17.492855072021484, + 27.784887313842773, + 18.357559204101562 + ] + }, + "confidence": 0.17985049003304185 + }, + { + "observation_id": "c218375f-e72f-4be0-a074-7db01ffafa5e", + "type": "aruco", + "marker_id": 60, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 161.0, + 318.0 + ], + [ + 147.0, + 306.0 + ], + [ + 175.0, + 302.0 + ], + [ + 187.0, + 314.0 + ] + ], + "center_px": [ + 167.5, + 310.0 + ], + "quality": { + "area_px": 376.0, + "perimeter_px": 89.99981498718262, + "sharpness": { + "laplacian_var": 4998.180393365964 + }, + "contrast": { + "p05": 4.0, + "p95": 183.0, + "dynamic_range": 179.0, + "mean_gray": 99.14695340501792, + "std_gray": 66.63883760314391 + }, + "geometry": { + "distance_to_center_norm": 0.6276895403862, + "distance_to_border_px": 147.0 + }, + "edge_ratio": 1.6666667415944008, + "edge_lengths_px": [ + 18.439088821411133, + 28.284271240234375, + 16.970561981201172, + 26.305892944335938 + ] + }, + "confidence": 0.15039999323852157 + }, + { + "observation_id": "6a910971-6ea4-4080-9a29-c8b3041cc109", + "type": "aruco", + "marker_id": 56, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 307.0, + 365.0 + ], + [ + 291.0, + 352.0 + ], + [ + 315.0, + 347.0 + ], + [ + 331.0, + 359.0 + ] + ], + "center_px": [ + 311.0, + 355.75 + ], + "quality": { + "area_px": 388.0, + "perimeter_px": 89.86946296691895, + "sharpness": { + "laplacian_var": 4043.59765339664 + }, + "contrast": { + "p05": 2.0, + "p95": 163.25, + "dynamic_range": 161.25, + "mean_gray": 47.361486486486484, + "std_gray": 53.31986347538412 + }, + "geometry": { + "distance_to_center_norm": 0.43960040807724, + "distance_to_border_px": 291.0 + }, + "edge_ratio": 1.2369317054748534, + "edge_lengths_px": [ + 20.615528106689453, + 24.515300750732422, + 20.0, + 24.73863410949707 + ] + }, + "confidence": 0.20911960257932388 + }, + { + "observation_id": "0bda5508-1fe4-4dbd-b406-f05f21e17130", + "type": "aruco", + "marker_id": 63, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 887.0, + 522.0 + ], + [ + 866.0, + 507.0 + ], + [ + 885.0, + 501.0 + ], + [ + 905.0, + 515.0 + ] + ], + "center_px": [ + 885.75, + 511.25 + ], + "quality": { + "area_px": 401.5, + "perimeter_px": 89.4581527709961, + "sharpness": { + "laplacian_var": 4509.277164749058 + }, + "contrast": { + "p05": 9.0, + "p95": 190.84999999999997, + "dynamic_range": 181.84999999999997, + "mean_gray": 68.97535211267606, + "std_gray": 57.764359456913965 + }, + "geometry": { + "distance_to_center_norm": 0.3096611499786377, + "distance_to_border_px": 375.0 + }, + "edge_ratio": 1.3362346026435945, + "edge_lengths_px": [ + 25.806976318359375, + 19.92485809326172, + 24.413110733032227, + 19.313207626342773 + ] + }, + "confidence": 0.2003141260801938 + }, + { + "observation_id": "bfc104bb-45e4-4711-8b7d-ed5fe037762d", + "type": "aruco", + "marker_id": 99, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1096.0, + 516.0 + ], + [ + 1073.0, + 502.0 + ], + [ + 1087.0, + 494.0 + ], + [ + 1111.0, + 508.0 + ] + ], + "center_px": [ + 1091.75, + 505.0 + ], + "quality": { + "area_px": 391.0, + "perimeter_px": 87.83522605895996, + "sharpness": { + "laplacian_var": 4200.816844593466 + }, + "contrast": { + "p05": 13.0, + "p95": 192.09999999999997, + "dynamic_range": 179.09999999999997, + "mean_gray": 91.09677419354838, + "std_gray": 62.66919427231474 + }, + "geometry": { + "distance_to_center_norm": 0.5655515193939209, + "distance_to_border_px": 169.0 + }, + "edge_ratio": 1.7231455578437855, + "edge_lengths_px": [ + 26.925823211669922, + 16.124515533447266, + 27.784887313842773, + 17.0 + ] + }, + "confidence": 0.15127373626685678 + }, + { + "observation_id": "c3e5681a-079e-4931-a42a-0244aa9e0fdf", + "type": "aruco", + "marker_id": 68, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 381.0, + 347.0 + ], + [ + 366.0, + 335.0 + ], + [ + 389.0, + 331.0 + ], + [ + 405.0, + 343.0 + ] + ], + "center_px": [ + 385.25, + 339.0 + ], + "quality": { + "area_px": 344.0, + "perimeter_px": 86.88566017150879, + "sharpness": { + "laplacian_var": 5292.443631185475 + }, + "contrast": { + "p05": 2.0, + "p95": 171.59999999999997, + "dynamic_range": 169.59999999999997, + "mean_gray": 62.758490566037736, + "std_gray": 59.50730233915728 + }, + "geometry": { + "distance_to_center_norm": 0.3639594614505768, + "distance_to_border_px": 331.0 + }, + "edge_ratio": 1.2666238649366455, + "edge_lengths_px": [ + 19.209373474121094, + 23.34523582458496, + 20.0, + 24.331050872802734 + ] + }, + "confidence": 0.181058749706097 + }, + { + "observation_id": "f710b04c-710c-49c0-9f5c-599ca8c4cb43", + "type": "aruco", + "marker_id": 46, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 333.0, + 347.0 + ], + [ + 319.0, + 336.0 + ], + [ + 343.0, + 331.0 + ], + [ + 358.0, + 343.0 + ] + ], + "center_px": [ + 338.25, + 339.25 + ], + "quality": { + "area_px": 347.0, + "perimeter_px": 86.8471450805664, + "sharpness": { + "laplacian_var": 5804.47883232467 + }, + "contrast": { + "p05": 1.0, + "p95": 186.79999999999998, + "dynamic_range": 185.79999999999998, + "mean_gray": 86.92830188679245, + "std_gray": 68.2419568205757 + }, + "geometry": { + "distance_to_center_norm": 0.4162023663520813, + "distance_to_border_px": 319.0 + }, + "edge_ratio": 1.4219993782327025, + "edge_lengths_px": [ + 17.804492950439453, + 24.515300750732422, + 19.209373474121094, + 25.317977905273438 + ] + }, + "confidence": 0.16268174014312184 + }, + { + "observation_id": "85aeb01c-75b1-445e-86ab-bacc6727d481", + "type": "aruco", + "marker_id": 87, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1012.0, + 477.0 + ], + [ + 990.0, + 463.0 + ], + [ + 1004.0, + 457.0 + ], + [ + 1027.0, + 470.0 + ] + ], + "center_px": [ + 1008.25, + 466.75 + ], + "quality": { + "area_px": 342.0, + "perimeter_px": 84.28099060058594, + "sharpness": { + "laplacian_var": 5458.723776000001 + }, + "contrast": { + "p05": 20.450000000000003, + "p95": 201.0, + "dynamic_range": 180.55, + "mean_gray": 115.536, + "std_gray": 66.51207938412391 + }, + "geometry": { + "distance_to_center_norm": 0.46061038970947266, + "distance_to_border_px": 253.0 + }, + "edge_ratio": 1.7345375499782925, + "edge_lengths_px": [ + 26.07680892944336, + 15.231546401977539, + 26.419689178466797, + 16.552946090698242 + ] + }, + "confidence": 0.13144713990357454 + }, + { + "observation_id": "7e25bf55-e03d-46cc-9890-618a70e17ab8", + "type": "aruco", + "marker_id": 67, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 268.0, + 309.0 + ], + [ + 254.0, + 298.0 + ], + [ + 276.0, + 294.0 + ], + [ + 292.0, + 305.0 + ] + ], + "center_px": [ + 272.5, + 301.5 + ], + "quality": { + "area_px": 313.0, + "perimeter_px": 83.91271209716797, + "sharpness": { + "laplacian_var": 5723.694318904032 + }, + "contrast": { + "p05": 3.0, + "p95": 165.29999999999995, + "dynamic_range": 162.29999999999995, + "mean_gray": 56.52521008403362, + "std_gray": 54.97529425020881 + }, + "geometry": { + "distance_to_center_norm": 0.51069575548172, + "distance_to_border_px": 254.0 + }, + "edge_ratio": 1.366568030919532, + "edge_lengths_px": [ + 17.804492950439453, + 22.360679626464844, + 19.416488647460938, + 24.331050872802734 + ] + }, + "confidence": 0.1526939471328476 + }, + { + "observation_id": "a9a612b7-a3d4-4504-a985-1c41cb1a10b0", + "type": "aruco", + "marker_id": 50, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 354.0, + 327.0 + ], + [ + 339.0, + 315.0 + ], + [ + 361.0, + 311.0 + ], + [ + 375.0, + 322.0 + ] + ], + "center_px": [ + 357.25, + 318.75 + ], + "quality": { + "area_px": 312.5, + "perimeter_px": 80.96157836914062, + "sharpness": { + "laplacian_var": 5484.890861275477 + }, + "contrast": { + "p05": 3.0, + "p95": 171.35, + "dynamic_range": 168.35, + "mean_gray": 58.08974358974359, + "std_gray": 56.73024771598622 + }, + "geometry": { + "distance_to_center_norm": 0.40687283873558044, + "distance_to_border_px": 311.0 + }, + "edge_ratio": 1.2559009508840258, + "edge_lengths_px": [ + 19.209373474121094, + 22.360679626464844, + 17.804492950439453, + 21.587032318115234 + ] + }, + "confidence": 0.16588357002730827 + }, + { + "observation_id": "4c6cf2c4-15cc-4d2c-a865-f1d5679e21cf", + "type": "aruco", + "marker_id": 98, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 289.0, + 277.0 + ], + [ + 277.0, + 267.0 + ], + [ + 299.0, + 264.0 + ], + [ + 311.0, + 274.0 + ] + ], + "center_px": [ + 294.0, + 270.5 + ], + "quality": { + "area_px": 256.0, + "perimeter_px": 75.64820671081543, + "sharpness": { + "laplacian_var": 5859.5906088249585 + }, + "contrast": { + "p05": 4.0, + "p95": 174.7, + "dynamic_range": 170.7, + "mean_gray": 79.78609625668449, + "std_gray": 62.13412454001723 + }, + "geometry": { + "distance_to_center_norm": 0.5056033730506897, + "distance_to_border_px": 264.0 + }, + "edge_ratio": 1.4214400497799629, + "edge_lengths_px": [ + 15.620499610900879, + 22.203603744506836, + 15.620499610900879, + 22.203603744506836 + ] + }, + "confidence": 0.12006603211516774 + }, + { + "observation_id": "23e1cb38-fd6d-4b52-9555-224bf828b8dc", + "type": "aruco", + "marker_id": 76, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 486.0, + 326.0 + ], + [ + 470.0, + 315.0 + ], + [ + 491.0, + 312.0 + ], + [ + 505.0, + 322.0 + ] + ], + "center_px": [ + 488.0, + 318.75 + ], + "quality": { + "area_px": 262.5, + "perimeter_px": 77.2508316040039, + "sharpness": { + "laplacian_var": 4995.870348454964 + }, + "contrast": { + "p05": 5.700000000000001, + "p95": 178.0, + "dynamic_range": 172.3, + "mean_gray": 87.62564102564103, + "std_gray": 61.1426944624421 + }, + "geometry": { + "distance_to_center_norm": 0.2769971787929535, + "distance_to_border_px": 312.0 + }, + "edge_ratio": 1.2329923797630915, + "edge_lengths_px": [ + 19.416488647460938, + 21.21320343017578, + 17.20465087890625, + 19.416488647460938 + ] + }, + "confidence": 0.14193112858785442 + }, + { + "observation_id": "7becd436-40cd-49f5-acab-95ae41ff3206", + "type": "aruco", + "marker_id": 70, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 323.0, + 279.0 + ], + [ + 311.0, + 269.0 + ], + [ + 332.0, + 266.0 + ], + [ + 346.0, + 275.0 + ] + ], + "center_px": [ + 328.0, + 272.25 + ], + "quality": { + "area_px": 254.5, + "perimeter_px": 76.82225513458252, + "sharpness": { + "laplacian_var": 6702.906858306926 + }, + "contrast": { + "p05": 3.0, + "p95": 177.65, + "dynamic_range": 174.65, + "mean_gray": 83.18085106382979, + "std_gray": 65.3374974229076 + }, + "geometry": { + "distance_to_center_norm": 0.46854838728904724, + "distance_to_border_px": 266.0 + }, + "edge_ratio": 1.4945255533499913, + "edge_lengths_px": [ + 15.620499610900879, + 21.21320343017578, + 16.6433162689209, + 23.34523582458496 + ] + }, + "confidence": 0.11352543707690875 + }, + { + "observation_id": "c25d9e1e-5eee-4d5a-b491-4850e983c931", + "type": "aruco", + "marker_id": 100, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 577.0, + 301.0 + ], + [ + 562.0, + 292.0 + ], + [ + 579.0, + 288.0 + ], + [ + 596.0, + 298.0 + ] + ], + "center_px": [ + 578.5, + 294.75 + ], + "quality": { + "area_px": 227.0, + "perimeter_px": 73.91557121276855, + "sharpness": { + "laplacian_var": 5070.8073461891645 + }, + "contrast": { + "p05": 14.0, + "p95": 180.19999999999993, + "dynamic_range": 166.19999999999993, + "mean_gray": 95.23636363636363, + "std_gray": 59.80654579651121 + }, + "geometry": { + "distance_to_center_norm": 0.24398966133594513, + "distance_to_border_px": 288.0 + }, + "edge_ratio": 1.129340510616957, + "edge_lengths_px": [ + 17.492855072021484, + 17.464248657226562, + 19.72308349609375, + 19.235383987426758 + ] + }, + "confidence": 0.13400150965155774 + }, + { + "observation_id": "529ec48e-006f-4f34-a591-d7b108bc7341", + "type": "aruco", + "marker_id": 91, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 414.0, + 248.0 + ], + [ + 401.0, + 239.0 + ], + [ + 419.0, + 236.0 + ], + [ + 433.0, + 246.0 + ] + ], + "center_px": [ + 416.75, + 242.25 + ], + "quality": { + "area_px": 209.5, + "perimeter_px": 70.36929893493652, + "sharpness": { + "laplacian_var": 5953.69248888889 + }, + "contrast": { + "p05": 9.0, + "p95": 173.54999999999998, + "dynamic_range": 164.54999999999998, + "mean_gray": 79.87333333333333, + "std_gray": 62.19402936688447 + }, + "geometry": { + "distance_to_center_norm": 0.4076717793941498, + "distance_to_border_px": 236.0 + }, + "edge_ratio": 1.208304597947265, + "edge_lengths_px": [ + 15.81138801574707, + 18.248287200927734, + 17.20465087890625, + 19.10497283935547 + ] + }, + "confidence": 0.11558895571856645 + } + ], + "rejected_candidates": [ + { + "image_points_px": [ + [ + 596.0, + 383.0 + ], + [ + 620.0, + 377.0 + ], + [ + 643.0, + 392.0 + ], + [ + 618.0, + 399.0 + ] + ], + "center_px": [ + 619.25, + 387.75 + ], + "area_px": 526.0 + }, + { + "image_points_px": [ + [ + 930.0, + 325.0 + ], + [ + 952.0, + 336.0 + ], + [ + 944.0, + 359.0 + ], + [ + 922.0, + 346.0 + ] + ], + "center_px": [ + 937.0, + 341.5 + ], + "area_px": 580.0 + }, + { + "image_points_px": [ + [ + 1008.0, + 561.0 + ], + [ + 1023.0, + 553.0 + ], + [ + 1049.0, + 568.0 + ], + [ + 1032.0, + 577.0 + ] + ], + "center_px": [ + 1028.0, + 564.75 + ], + "area_px": 460.5 + }, + { + "image_points_px": [ + [ + 289.0, + 339.0 + ], + [ + 264.0, + 344.0 + ], + [ + 249.0, + 332.0 + ], + [ + 272.0, + 327.0 + ] + ], + "center_px": [ + 268.5, + 335.5 + ], + "area_px": 368.0 + }, + { + "image_points_px": [ + [ + 962.0, + 295.0 + ], + [ + 978.0, + 292.0 + ], + [ + 998.0, + 303.0 + ], + [ + 982.0, + 307.0 + ] + ], + "center_px": [ + 980.0, + 299.25 + ], + "area_px": 254.0 + }, + { + "image_points_px": [ + [ + 648.0, + 367.0 + ], + [ + 666.0, + 363.0 + ], + [ + 683.0, + 374.0 + ], + [ + 663.0, + 379.0 + ] + ], + "center_px": [ + 665.0, + 370.75 + ], + "area_px": 290.5 + }, + { + "image_points_px": [ + [ + 338.0, + 256.0 + ], + [ + 360.0, + 253.0 + ], + [ + 374.0, + 263.0 + ], + [ + 351.0, + 265.0 + ] + ], + "center_px": [ + 355.75, + 259.25 + ], + "area_px": 247.5 + }, + { + "image_points_px": [ + [ + 1008.0, + 337.0 + ], + [ + 1000.0, + 359.0 + ], + [ + 986.0, + 365.0 + ], + [ + 996.0, + 342.0 + ] + ], + "center_px": [ + 997.5, + 350.75 + ], + "area_px": 243.0 + }, + { + "image_points_px": [ + [ + 440.0, + 238.0 + ], + [ + 460.0, + 235.0 + ], + [ + 475.0, + 244.0 + ], + [ + 456.0, + 247.0 + ] + ], + "center_px": [ + 457.75, + 241.0 + ], + "area_px": 222.0 + }, + { + "image_points_px": [ + [ + 709.0, + 157.0 + ], + [ + 725.0, + 154.0 + ], + [ + 743.0, + 163.0 + ], + [ + 726.0, + 165.0 + ] + ], + "center_px": [ + 725.75, + 159.75 + ], + "area_px": 184.0 + }, + { + "image_points_px": [ + [ + 537.0, + 260.0 + ], + [ + 554.0, + 257.0 + ], + [ + 569.0, + 266.0 + ], + [ + 550.0, + 269.0 + ] + ], + "center_px": [ + 552.5, + 263.0 + ], + "area_px": 204.0 + }, + { + "image_points_px": [ + [ + 616.0, + 279.0 + ], + [ + 632.0, + 276.0 + ], + [ + 647.0, + 286.0 + ], + [ + 631.0, + 289.0 + ] + ], + "center_px": [ + 631.5, + 282.5 + ], + "area_px": 205.0 + }, + { + "image_points_px": [ + [ + 483.0, + 369.0 + ], + [ + 468.0, + 375.0 + ], + [ + 450.0, + 376.0 + ], + [ + 478.0, + 368.0 + ] + ], + "center_px": [ + 469.75, + 372.0 + ], + "area_px": 80.5 + }, + { + "image_points_px": [ + [ + 321.0, + 414.0 + ], + [ + 297.0, + 420.0 + ], + [ + 289.0, + 419.0 + ], + [ + 312.0, + 413.0 + ] + ], + "center_px": [ + 304.75, + 416.5 + ], + "area_px": 74.5 + }, + { + "image_points_px": [ + [ + 123.0, + 537.0 + ], + [ + 103.0, + 546.0 + ], + [ + 92.0, + 545.0 + ], + [ + 118.0, + 536.0 + ] + ], + "center_px": [ + 109.0, + 541.0 + ], + "area_px": 95.0 + }, + { + "image_points_px": [ + [ + 1040.0, + 321.0 + ], + [ + 1048.0, + 322.0 + ], + [ + 1068.0, + 334.0 + ], + [ + 1063.0, + 335.0 + ] + ], + "center_px": [ + 1054.75, + 328.0 + ], + "area_px": 84.5 + }, + { + "image_points_px": [ + [ + 55.0, + 581.0 + ], + [ + 55.0, + 584.0 + ], + [ + 28.0, + 591.0 + ], + [ + 36.0, + 586.0 + ] + ], + "center_px": [ + 43.5, + 585.5 + ], + "area_px": 68.0 + }, + { + "image_points_px": [ + [ + 526.0, + 493.0 + ], + [ + 539.0, + 493.0 + ], + [ + 546.0, + 498.0 + ], + [ + 536.0, + 501.0 + ] + ], + "center_px": [ + 536.75, + 496.25 + ], + "area_px": 87.5 + }, + { + "image_points_px": [ + [ + 642.0, + 443.0 + ], + [ + 652.0, + 440.0 + ], + [ + 662.0, + 447.0 + ], + [ + 660.0, + 449.0 + ] + ], + "center_px": [ + 654.0, + 444.75 + ], + "area_px": 74.0 + } + ] +} \ No newline at end of file diff --git a/test/temp/cam0_hires_1781074183695_camera_pose.json b/test/temp/cam0_hires_1781074183695_camera_pose.json new file mode 100644 index 0000000..3962be3 --- /dev/null +++ b/test/temp/cam0_hires_1781074183695_camera_pose.json @@ -0,0 +1,719 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-10T10:41:07Z", + "source": { + "detection_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\test\\temp\\cam0_hires_1781074183695_aruco_detection.json", + "robot_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\robot_1781069752019.json" + }, + "camera": { + "camera_id": "cam0", + "camera_matrix": [ + [ + 1429.6978759765625, + 0.0, + 633.3245239257812 + ], + [ + 0.0, + 1414.5067138671875, + 468.4399108886719 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.0862322673201561, + 0.14179007709026337, + 0.0014998731203377247, + -0.004277258180081844, + -0.7496029734611511 + ] + }, + "estimation": { + "method": "single_camera_marker_center_lm", + "description": "Rigid init from per-marker pose estimates, followed by LM on normalized marker-center reprojection residuals.", + "marker_size_m": 0.025, + "num_used_markers": 37, + "used_marker_ids": [ + 95, + 97, + 51, + 55, + 54, + 47, + 79, + 96, + 85, + 62, + 57, + 105, + 59, + 48, + 102, + 86, + 71, + 92, + 72, + 84, + 65, + 80, + 89, + 60, + 56, + 63, + 99, + 68, + 46, + 87, + 67, + 50, + 98, + 76, + 70, + 100, + 91 + ], + "history": { + "iters": [ + 0, + 1, + 2, + 3 + ], + "rms": [ + 0.013977914197306877, + 0.0012063861436378766, + 0.00041790882674225575, + 0.000417864448222557 + ], + "lambda": [ + 0.001, + 0.0005, + 0.00025, + 0.000125 + ] + }, + "residual_rms_px": 0.8488907668283678, + "residual_median_px": 0.6015952243821542, + "residual_max_px": 3.215993321685572, + "sigma2_normalized": 1.900175232935359e-07 + }, + "camera_pose": { + "world_to_camera": { + "rotation_matrix": [ + [ + 0.7153297066688538, + -0.6744856238365173, + 0.18268170952796936 + ], + [ + -0.24956846237182617, + -0.4907773733139038, + -0.834777295589447 + ], + [ + 0.6527013182640076, + 0.5515493750572205, + -0.5193979740142822 + ] + ], + "translation_m": [ + -0.5062417984008789, + 0.09014879167079926, + 0.7660393714904785 + ], + "rvec_rad": [ + 2.0691228499009884, + -0.7015145339853286, + 0.6341981126084956 + ] + }, + "camera_in_world": { + "position_m": [ + -0.11536678671836853, + -0.719718337059021, + 0.5656145811080933 + ], + "position_mm": [ + -115.36678314208984, + -719.7183227539062, + 565.6145629882812 + ], + "orientation_deg": { + "roll": 133.28041076660156, + "pitch": -40.74557876586914, + "yaw": -19.2331600189209 + } + }, + "uncertainty": { + "pose_covariance_6x6": [ + [ + 2.384673507521362e-07, + -4.007478825357904e-08, + -8.83056895699674e-08, + -2.241640771133345e-08, + 5.7720270356521624e-08, + 1.378850799895014e-07 + ], + [ + -4.0074788253579336e-08, + 1.2484717569362809e-07, + 5.533958978882963e-08, + -4.109574324899393e-09, + -6.375572286576732e-08, + -3.447971573741165e-08 + ], + [ + -8.830568956996727e-08, + 5.533958978882929e-08, + 3.5195680429658137e-07, + 7.077668257887362e-08, + -9.83714238710889e-08, + -1.8066440288226506e-07 + ], + [ + -2.2416407711333367e-08, + -4.10957432489948e-09, + 7.07766825788736e-08, + 2.2608963627527025e-08, + -1.477120449173928e-08, + -4.530858533789268e-08 + ], + [ + 5.772027035652173e-08, + -6.375572286576727e-08, + -9.837142387108908e-08, + -1.4771204491739334e-08, + 5.6162582570999035e-08, + 7.030683489124922e-08 + ], + [ + 1.3788507998950147e-07, + -3.44797157374115e-08, + -1.8066440288226543e-07, + -4.53085853378928e-08, + 7.030683489124922e-08, + 2.3454528563310696e-07 + ] + ], + "parameter_std": { + "rvec_std_deg": [ + 0.02797931616962056, + 0.020244730206848253, + 0.03399126405526364 + ], + "tvec_std_m": [ + 0.00015036277340993356, + 0.0002369864607335175, + 0.0004842987565884378 + ] + }, + "camera_center_std_m": [ + 0.0003928571281192472, + 0.00037055936963847897, + 0.0005785760565158723 + ], + "camera_center_std_mm": [ + 0.39285712811924717, + 0.37055936963847896, + 0.5785760565158723 + ], + "orientation_std_deg": { + "roll": 0.034843440181318734, + "pitch": 0.02499050875561387, + "yaw": 0.029035517784143414 + } + } + }, + "observations": { + "markers": [ + { + "marker_id": 95, + "observed_center_px": [ + 259.25, + 854.0 + ], + "projected_center_px": [ + 258.490478515625, + 853.5327758789062 + ], + "reprojection_error_px": 0.8917237602301682, + "confidence": 0.8258754592596019 + }, + { + "marker_id": 97, + "observed_center_px": [ + 538.5, + 857.75 + ], + "projected_center_px": [ + 538.7420654296875, + 858.910888671875 + ], + "reprojection_error_px": 1.1858575718599158, + "confidence": 0.9204299158225671 + }, + { + "marker_id": 51, + "observed_center_px": [ + 129.5, + 750.75 + ], + "projected_center_px": [ + 128.6764678955078, + 750.4482421875 + ], + "reprojection_error_px": 0.8770763390572774, + "confidence": 0.6584739246254625 + }, + { + "marker_id": 55, + "observed_center_px": [ + 402.75, + 765.25 + ], + "projected_center_px": [ + 402.4529724121094, + 765.8202514648438 + ], + "reprojection_error_px": 0.6429713221634116, + "confidence": 0.7393243794945659 + }, + { + "marker_id": 54, + "observed_center_px": [ + 557.0, + 796.75 + ], + "projected_center_px": [ + 556.9273071289062, + 797.4539184570312 + ], + "reprojection_error_px": 0.7076619586053134, + "confidence": 0.7478392159262601 + }, + { + "marker_id": 47, + "observed_center_px": [ + 510.5, + 750.25 + ], + "projected_center_px": [ + 511.28216552734375, + 750.1286010742188 + ], + "reprojection_error_px": 0.7915305498499524, + "confidence": 0.7141846645068768 + }, + { + "marker_id": 79, + "observed_center_px": [ + 343.25, + 648.75 + ], + "projected_center_px": [ + 342.9404296875, + 648.327880859375 + ], + "reprojection_error_px": 0.5234676181611774, + "confidence": 0.545522217065577 + }, + { + "marker_id": 96, + "observed_center_px": [ + 443.5, + 642.0 + ], + "projected_center_px": [ + 444.098388671875, + 641.9876708984375 + ], + "reprojection_error_px": 0.5985156717861821, + "confidence": 0.5196626187985754 + }, + { + "marker_id": 85, + "observed_center_px": [ + 725.5, + 682.25 + ], + "projected_center_px": [ + 725.919189453125, + 681.0695190429688 + ], + "reprojection_error_px": 1.2526991209083898, + "confidence": 0.4333112154683819 + }, + { + "marker_id": 62, + "observed_center_px": [ + 476.0, + 615.0 + ], + "projected_center_px": [ + 476.35174560546875, + 615.0320434570312 + ], + "reprojection_error_px": 0.35320214340387446, + "confidence": 0.48909895359164274 + }, + { + "marker_id": 57, + "observed_center_px": [ + 877.0, + 674.75 + ], + "projected_center_px": [ + 877.175048828125, + 674.4921875 + ], + "reprojection_error_px": 0.3116237753833712, + "confidence": 0.3447832172321244 + }, + { + "marker_id": 105, + "observed_center_px": [ + 697.0, + 632.5 + ], + "projected_center_px": [ + 697.4603271484375, + 631.9234008789062 + ], + "reprojection_error_px": 0.7378127337168187, + "confidence": 0.3941136916116856 + }, + { + "marker_id": 59, + "observed_center_px": [ + 805.5, + 596.75 + ], + "projected_center_px": [ + 805.6655883789062, + 596.3532104492188 + ], + "reprojection_error_px": 0.42995518235972685, + "confidence": 0.272074573917431 + }, + { + "marker_id": 48, + "observed_center_px": [ + 902.25, + 601.5 + ], + "projected_center_px": [ + 902.2860107421875, + 601.1778564453125 + ], + "reprojection_error_px": 0.32415003220668187, + "confidence": 0.27826623535156253 + }, + { + "marker_id": 102, + "observed_center_px": [ + 771.25, + 547.75 + ], + "projected_center_px": [ + 770.7193603515625, + 547.3040771484375 + ], + "reprojection_error_px": 0.6931274241000027, + "confidence": 0.27992431449450633 + }, + { + "marker_id": 86, + "observed_center_px": [ + 79.25, + 320.25 + ], + "projected_center_px": [ + 78.74799346923828, + 321.10186767578125 + ], + "reprojection_error_px": 0.988781620970154, + "confidence": 0.1358137908003952 + }, + { + "marker_id": 71, + "observed_center_px": [ + 912.0, + 552.0 + ], + "projected_center_px": [ + 912.014404296875, + 551.594970703125 + ], + "reprojection_error_px": 0.40528535021083606, + "confidence": 0.23938019040412045 + }, + { + "marker_id": 92, + "observed_center_px": [ + 730.25, + 523.75 + ], + "projected_center_px": [ + 730.6965942382812, + 523.346923828125 + ], + "reprojection_error_px": 0.6015952243821542, + "confidence": 0.2632574407582938 + }, + { + "marker_id": 72, + "observed_center_px": [ + 231.25, + 355.0 + ], + "projected_center_px": [ + 231.26632690429688, + 356.1981201171875 + ], + "reprojection_error_px": 1.198231356213527, + "confidence": 0.2033684790201144 + }, + { + "marker_id": 84, + "observed_center_px": [ + 151.5, + 328.5 + ], + "projected_center_px": [ + 152.23899841308594, + 329.2857971191406 + ], + "reprojection_error_px": 1.078700962729356, + "confidence": 0.16272265589141124 + }, + { + "marker_id": 65, + "observed_center_px": [ + 965.0, + 541.5 + ], + "projected_center_px": [ + 965.0440673828125, + 541.2013549804688 + ], + "reprojection_error_px": 0.30187875367233796, + "confidence": 0.1894175373214682 + }, + { + "marker_id": 80, + "observed_center_px": [ + 1046.25, + 545.25 + ], + "projected_center_px": [ + 1046.1553955078125, + 545.08056640625 + ], + "reprojection_error_px": 0.194056055388887, + "confidence": 0.16189579196314718 + }, + { + "marker_id": 89, + "observed_center_px": [ + 1159.25, + 521.5 + ], + "projected_center_px": [ + 1157.6162109375, + 524.2700805664062 + ], + "reprojection_error_px": 3.215993321685572, + "confidence": 0.17985049003304185 + }, + { + "marker_id": 60, + "observed_center_px": [ + 167.5, + 310.0 + ], + "projected_center_px": [ + 167.38864135742188, + 310.4362487792969 + ], + "reprojection_error_px": 0.4502374314901596, + "confidence": 0.15039999323852157 + }, + { + "marker_id": 56, + "observed_center_px": [ + 311.0, + 355.75 + ], + "projected_center_px": [ + 310.8277587890625, + 356.5285339355469 + ], + "reprojection_error_px": 0.7973594694636303, + "confidence": 0.20911960257932388 + }, + { + "marker_id": 63, + "observed_center_px": [ + 885.75, + 511.25 + ], + "projected_center_px": [ + 885.6793212890625, + 511.126708984375 + ], + "reprojection_error_px": 0.14211317572143223, + "confidence": 0.2003141260801938 + }, + { + "marker_id": 99, + "observed_center_px": [ + 1091.75, + 505.0 + ], + "projected_center_px": [ + 1091.5972900390625, + 505.013671875 + ], + "reprojection_error_px": 0.15332074985320285, + "confidence": 0.15127373626685678 + }, + { + "marker_id": 68, + "observed_center_px": [ + 385.25, + 339.0 + ], + "projected_center_px": [ + 384.7447204589844, + 338.80047607421875 + ], + "reprojection_error_px": 0.5432469158017581, + "confidence": 0.181058749706097 + }, + { + "marker_id": 46, + "observed_center_px": [ + 338.25, + 339.25 + ], + "projected_center_px": [ + 338.55401611328125, + 339.2395324707031 + ], + "reprojection_error_px": 0.3041962628044907, + "confidence": 0.16268174014312184 + }, + { + "marker_id": 87, + "observed_center_px": [ + 1008.25, + 466.75 + ], + "projected_center_px": [ + 1008.1798706054688, + 466.3894348144531 + ], + "reprojection_error_px": 0.36732190923735014, + "confidence": 0.13144713990357454 + }, + { + "marker_id": 67, + "observed_center_px": [ + 272.5, + 301.5 + ], + "projected_center_px": [ + 272.3302001953125, + 301.4171142578125 + ], + "reprojection_error_px": 0.18894978150261477, + "confidence": 0.1526939471328476 + }, + { + "marker_id": 50, + "observed_center_px": [ + 357.25, + 318.75 + ], + "projected_center_px": [ + 357.13116455078125, + 318.4410400390625 + ], + "reprojection_error_px": 0.33102586221249186, + "confidence": 0.16588357002730827 + }, + { + "marker_id": 98, + "observed_center_px": [ + 294.0, + 270.5 + ], + "projected_center_px": [ + 294.2515869140625, + 269.8180236816406 + ], + "reprojection_error_px": 0.7269027955170481, + "confidence": 0.12006603211516774 + }, + { + "marker_id": 76, + "observed_center_px": [ + 488.0, + 318.75 + ], + "projected_center_px": [ + 488.0938720703125, + 318.10589599609375 + ], + "reprojection_error_px": 0.6509085445996369, + "confidence": 0.14193112858785442 + }, + { + "marker_id": 70, + "observed_center_px": [ + 328.0, + 272.25 + ], + "projected_center_px": [ + 328.2170715332031, + 272.0340270996094 + ], + "reprojection_error_px": 0.3062096409819492, + "confidence": 0.11352543707690875 + }, + { + "marker_id": 100, + "observed_center_px": [ + 578.5, + 294.75 + ], + "projected_center_px": [ + 579.1131591796875, + 294.27313232421875 + ], + "reprojection_error_px": 0.7767669919866956, + "confidence": 0.13400150965155774 + }, + { + "marker_id": 91, + "observed_center_px": [ + 416.75, + 242.25 + ], + "projected_center_px": [ + 417.3974609375, + 241.78074645996094 + ], + "reprojection_error_px": 0.7996277574143927, + "confidence": 0.11558895571856645 + } + ] + }, + "qa": { + "sanity_notes": [] + } +} \ No newline at end of file diff --git a/test/temp/cam0_hires_1781074183695_debug.jpg b/test/temp/cam0_hires_1781074183695_debug.jpg new file mode 100644 index 0000000..3f5f113 Binary files /dev/null and b/test/temp/cam0_hires_1781074183695_debug.jpg differ diff --git a/test/temp/cam1_hires_1781074183695_aruco_detection.json b/test/temp/cam1_hires_1781074183695_aruco_detection.json new file mode 100644 index 0000000..b98c1a2 --- /dev/null +++ b/test/temp/cam1_hires_1781074183695_aruco_detection.json @@ -0,0 +1,1850 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-10T10:41:05Z", + "vision_config": { + "MarkerType": "DICT_4X4_250", + "MarkerSize": 0.025 + }, + "camera": { + "camera_id": "cam1", + "intrinsics_file": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\calibration_cam1.npz", + "camera_matrix": [ + [ + 1335.5843505859375, + 0.0, + 669.8739013671875 + ], + [ + 0.0, + 1340.3487548828125, + 434.5127258300781 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.013518857769668102, + 0.6387264132499695, + -0.004291425924748182, + -0.003142312401905656, + -1.9807322025299072 + ] + }, + "image": { + "image_file": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\cam1_hires_1781074183695.jpg", + "image_sha256": "b4d94cf3d1cdb7411f4f630da8835c689e96e3c4942f828403b599bb4b3b0e64", + "width_px": 1280, + "height_px": 960 + }, + "aruco": { + "dictionary": "DICT_4X4_250", + "num_detected_markers": 31, + "num_rejected_candidates": 5 + }, + "detections": [ + { + "observation_id": "0e5e56cf-de2c-4ca0-9d50-b63be714c1d7", + "type": "aruco", + "marker_id": 57, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 66.0, + 297.0 + ], + [ + 77.0, + 335.0 + ], + [ + 38.0, + 340.0 + ], + [ + 28.0, + 304.0 + ] + ], + "center_px": [ + 52.25, + 319.0 + ], + "quality": { + "area_px": 1487.5, + "perimeter_px": 154.88172912597656, + "sharpness": { + "laplacian_var": 2475.7412918333025 + }, + "contrast": { + "p05": 2.0, + "p95": 154.0, + "dynamic_range": 152.0, + "mean_gray": 59.52889324191969, + "std_gray": 59.339082704313746 + }, + "geometry": { + "distance_to_center_norm": 0.7617527842521667, + "distance_to_border_px": 28.0 + }, + "edge_ratio": 1.0588013200867261, + "edge_lengths_px": [ + 39.560081481933594, + 39.31920623779297, + 37.36308288574219, + 38.63935852050781 + ] + }, + "confidence": 0.5244924829597363 + }, + { + "observation_id": "ac12d6a8-0bb4-4b91-bc43-faf2401d13c9", + "type": "aruco", + "marker_id": 59, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 65.0, + 431.0 + ], + [ + 76.0, + 467.0 + ], + [ + 38.0, + 473.0 + ], + [ + 28.0, + 438.0 + ] + ], + "center_px": [ + 51.75, + 452.25 + ], + "quality": { + "area_px": 1399.5, + "perimeter_px": 150.17071914672852, + "sharpness": { + "laplacian_var": 1922.0370651561116 + }, + "contrast": { + "p05": 2.0, + "p95": 152.0, + "dynamic_range": 150.0, + "mean_gray": 75.66735751295337, + "std_gray": 62.180217950858186 + }, + "geometry": { + "distance_to_center_norm": 0.7361302375793457, + "distance_to_border_px": 28.0 + }, + "edge_ratio": 1.0568732363841995, + "edge_lengths_px": [ + 37.64305877685547, + 38.470767974853516, + 36.400550842285156, + 37.656341552734375 + ] + }, + "confidence": 0.4943639237071812 + }, + { + "observation_id": "ee0b6ddd-a813-46b8-a70b-b2d004e3ffa0", + "type": "aruco", + "marker_id": 85, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 248.0, + 351.0 + ], + [ + 257.0, + 386.0 + ], + [ + 218.0, + 392.0 + ], + [ + 210.0, + 357.0 + ] + ], + "center_px": [ + 233.25, + 371.5 + ], + "quality": { + "area_px": 1398.5, + "perimeter_px": 149.97087478637695, + "sharpness": { + "laplacian_var": 3904.171299666045 + }, + "contrast": { + "p05": 2.0, + "p95": 167.0, + "dynamic_range": 165.0, + "mean_gray": 94.59501557632399, + "std_gray": 68.60578658036249 + }, + "geometry": { + "distance_to_center_norm": 0.5262156128883362, + "distance_to_border_px": 210.0 + }, + "edge_ratio": 1.0990510391202915, + "edge_lengths_px": [ + 36.13862228393555, + 39.458839416503906, + 35.902645111083984, + 38.470767974853516 + ] + }, + "confidence": 0.8483075854962995 + }, + { + "observation_id": "5ac2439f-7940-4b3a-b518-750ec7dd2654", + "type": "aruco", + "marker_id": 105, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 233.0, + 424.0 + ], + [ + 241.0, + 458.0 + ], + [ + 204.0, + 464.0 + ], + [ + 195.0, + 430.0 + ] + ], + "center_px": [ + 218.25, + 444.0 + ], + "quality": { + "area_px": 1326.0, + "perimeter_px": 146.05360412597656, + "sharpness": { + "laplacian_var": 1427.0666717212969 + }, + "contrast": { + "p05": 3.0, + "p95": 151.39999999999998, + "dynamic_range": 148.39999999999998, + "mean_gray": 28.15112540192926, + "std_gray": 44.736500072223286 + }, + "geometry": { + "distance_to_center_norm": 0.5291045904159546, + "distance_to_border_px": 195.0 + }, + "edge_ratio": 1.1014149171236929, + "edge_lengths_px": [ + 34.928497314453125, + 37.48332977294922, + 35.1710090637207, + 38.470767974853516 + ] + }, + "confidence": 0.8026039835274208 + }, + { + "observation_id": "71c09d71-a183-4cd0-abe2-bd8b7bf8f722", + "type": "aruco", + "marker_id": 54, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 493.0, + 286.0 + ], + [ + 499.0, + 322.0 + ], + [ + 463.0, + 327.0 + ], + [ + 456.0, + 292.0 + ] + ], + "center_px": [ + 477.75, + 306.75 + ], + "quality": { + "area_px": 1331.5, + "perimeter_px": 146.01860427856445, + "sharpness": { + "laplacian_var": 2484.840430744658 + }, + "contrast": { + "p05": 1.0, + "p95": 174.5, + "dynamic_range": 173.5, + "mean_gray": 38.51402918069585, + "std_gray": 57.39934902898192 + }, + "geometry": { + "distance_to_center_norm": 0.2967022657394409, + "distance_to_border_px": 286.0 + }, + "edge_ratio": 1.0501550646581899, + "edge_lengths_px": [ + 36.49657440185547, + 36.34556198120117, + 35.693138122558594, + 37.48332977294922 + ] + }, + "confidence": 0.8452719950987326 + }, + { + "observation_id": "d1ade864-30b3-4af2-a926-5a8e3dcffe0f", + "type": "aruco", + "marker_id": 97, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 543.0, + 234.0 + ], + [ + 548.0, + 270.0 + ], + [ + 512.0, + 276.0 + ], + [ + 507.0, + 240.0 + ] + ], + "center_px": [ + 527.5, + 255.0 + ], + "quality": { + "area_px": 1326.0, + "perimeter_px": 145.68427276611328, + "sharpness": { + "laplacian_var": 3808.386887259244 + }, + "contrast": { + "p05": 2.0, + "p95": 184.0, + "dynamic_range": 182.0, + "mean_gray": 85.19816723940436, + "std_gray": 76.12727268282717 + }, + "geometry": { + "distance_to_center_norm": 0.3144470453262329, + "distance_to_border_px": 234.0 + }, + "edge_ratio": 1.0041549067457645, + "edge_lengths_px": [ + 36.34556198120117, + 36.49657440185547, + 36.34556198120117, + 36.49657440185547 + ] + }, + "confidence": 0.8803422600053223 + }, + { + "observation_id": "dbcc5c0b-8f0e-4c7b-b072-a5edd3af0bea", + "type": "aruco", + "marker_id": 92, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 76.0, + 569.0 + ], + [ + 85.0, + 602.0 + ], + [ + 48.0, + 608.0 + ], + [ + 38.0, + 575.0 + ] + ], + "center_px": [ + 61.75, + 588.5 + ], + "quality": { + "area_px": 1294.5, + "perimeter_px": 144.64123916625977, + "sharpness": { + "laplacian_var": 1932.207678300027 + }, + "contrast": { + "p05": 2.0, + "p95": 149.0, + "dynamic_range": 147.0, + "mean_gray": 43.453362255965295, + "std_gray": 53.816778570659864 + }, + "geometry": { + "distance_to_center_norm": 0.7354264259338379, + "distance_to_border_px": 38.0 + }, + "edge_ratio": 1.124703235436343, + "edge_lengths_px": [ + 34.20526123046875, + 37.48332977294922, + 34.48188018798828, + 38.470767974853516 + ] + }, + "confidence": 0.5831582761878896 + }, + { + "observation_id": "156ece3d-6d5b-4a8b-952b-741b2adc9b39", + "type": "aruco", + "marker_id": 102, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 53.0, + 518.0 + ], + [ + 62.0, + 551.0 + ], + [ + 25.0, + 557.0 + ], + [ + 16.0, + 523.0 + ] + ], + "center_px": [ + 39.0, + 537.25 + ], + "quality": { + "area_px": 1289.0, + "perimeter_px": 144.19590759277344, + "sharpness": { + "laplacian_var": 2411.1714312323975 + }, + "contrast": { + "p05": 2.0, + "p95": 153.0, + "dynamic_range": 151.0, + "mean_gray": 76.1042345276873, + "std_gray": 60.304835413515434 + }, + "geometry": { + "distance_to_center_norm": 0.7546507120132446, + "distance_to_border_px": 16.0 + }, + "edge_ratio": 1.0958352143663936, + "edge_lengths_px": [ + 34.20526123046875, + 37.48332977294922, + 35.1710090637207, + 37.336307525634766 + ] + }, + "confidence": 0.250937972298748 + }, + { + "observation_id": "aef7a96b-40c6-440f-a3b5-382f3232744f", + "type": "aruco", + "marker_id": 66, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 683.0, + 207.0 + ], + [ + 687.0, + 243.0 + ], + [ + 652.0, + 248.0 + ], + [ + 647.0, + 213.0 + ] + ], + "center_px": [ + 667.25, + 227.75 + ], + "quality": { + "area_px": 1285.0, + "perimeter_px": 143.42879486083984, + "sharpness": { + "laplacian_var": 2752.4915058771953 + }, + "contrast": { + "p05": 2.0, + "p95": 177.0, + "dynamic_range": 175.0, + "mean_gray": 55.599766627771295, + "std_gray": 66.33643363202997 + }, + "geometry": { + "distance_to_center_norm": 0.31714701652526855, + "distance_to_border_px": 207.0 + }, + "edge_ratio": 1.0322790102490347, + "edge_lengths_px": [ + 36.22154235839844, + 35.35533905029297, + 35.35533905029297, + 36.49657440185547 + ] + }, + "confidence": 0.8298789941103211 + }, + { + "observation_id": "529224c4-70f2-4a42-9745-82224a8d4394", + "type": "aruco", + "marker_id": 47, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 502.0, + 351.0 + ], + [ + 507.0, + 385.0 + ], + [ + 472.0, + 390.0 + ], + [ + 466.0, + 356.0 + ] + ], + "center_px": [ + 486.75, + 370.5 + ], + "quality": { + "area_px": 1234.5, + "perimeter_px": 140.59193420410156, + "sharpness": { + "laplacian_var": 3333.6858488472303 + }, + "contrast": { + "p05": 2.0, + "p95": 178.0, + "dynamic_range": 176.0, + "mean_gray": 59.84247374562427, + "std_gray": 68.77979451096398 + }, + "geometry": { + "distance_to_center_norm": 0.2354377955198288, + "distance_to_border_px": 351.0 + }, + "edge_ratio": 1.0576121655851078, + "edge_lengths_px": [ + 34.36568069458008, + 35.35533905029297, + 34.525352478027344, + 36.34556198120117 + ] + }, + "confidence": 0.7781680532624052 + }, + { + "observation_id": "27a04b72-4f5a-4012-a3e3-d96b038fbfbb", + "type": "aruco", + "marker_id": 208, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 122.0, + 727.0 + ], + [ + 86.0, + 734.0 + ], + [ + 76.0, + 704.0 + ], + [ + 112.0, + 696.0 + ] + ], + "center_px": [ + 99.0, + 715.25 + ], + "quality": { + "area_px": 1173.0, + "perimeter_px": 137.74818801879883, + "sharpness": { + "laplacian_var": 2017.8886453559533 + }, + "contrast": { + "p05": 1.0, + "p95": 144.0, + "dynamic_range": 143.0, + "mean_gray": 50.450428396572825, + "std_gray": 55.48418503211673 + }, + "geometry": { + "distance_to_center_norm": 0.737419068813324, + "distance_to_border_px": 76.0 + }, + "edge_ratio": 1.166190394103734, + "edge_lengths_px": [ + 36.67424011230469, + 31.62277603149414, + 36.878177642822266, + 32.572994232177734 + ] + }, + "confidence": 0.6705594592047722 + }, + { + "observation_id": "7e6f0a46-e43b-4e12-b092-0e93cc0d3a06", + "type": "aruco", + "marker_id": 95, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 732.0, + 330.0 + ], + [ + 736.0, + 364.0 + ], + [ + 703.0, + 370.0 + ], + [ + 698.0, + 336.0 + ] + ], + "center_px": [ + 717.25, + 350.0 + ], + "quality": { + "area_px": 1166.0, + "perimeter_px": 136.6665382385254, + "sharpness": { + "laplacian_var": 3555.5708695068734 + }, + "contrast": { + "p05": 1.0, + "p95": 182.0, + "dynamic_range": 181.0, + "mean_gray": 64.95893719806763, + "std_gray": 72.52962582989824 + }, + "geometry": { + "distance_to_center_norm": 0.18902531266212463, + "distance_to_border_px": 330.0 + }, + "edge_ratio": 1.029347141344341, + "edge_lengths_px": [ + 34.2344856262207, + 33.541019439697266, + 34.36568069458008, + 34.525352478027344 + ] + }, + "confidence": 0.7551712168920252 + }, + { + "observation_id": "1b2c2663-e41e-4de7-ab7e-da86ea594cc7", + "type": "aruco", + "marker_id": 55, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 595.0, + 370.0 + ], + [ + 600.0, + 403.0 + ], + [ + 565.0, + 409.0 + ], + [ + 561.0, + 376.0 + ] + ], + "center_px": [ + 580.25, + 389.5 + ], + "quality": { + "area_px": 1165.5, + "perimeter_px": 136.65409469604492, + "sharpness": { + "laplacian_var": 3862.1443680080433 + }, + "contrast": { + "p05": 2.0, + "p95": 183.0, + "dynamic_range": 181.0, + "mean_gray": 67.37860576923077, + "std_gray": 73.12365826499739 + }, + "geometry": { + "distance_to_center_norm": 0.13555622100830078, + "distance_to_border_px": 370.0 + }, + "edge_ratio": 1.0682586896823183, + "edge_lengths_px": [ + 33.37664031982422, + 35.510562896728516, + 33.241539001464844, + 34.525352478027344 + ] + }, + "confidence": 0.7273519115777719 + }, + { + "observation_id": "9ed5d2be-563a-4db3-a973-f64012a52c44", + "type": "aruco", + "marker_id": 62, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 441.0, + 518.0 + ], + [ + 448.0, + 549.0 + ], + [ + 413.0, + 556.0 + ], + [ + 407.0, + 524.0 + ] + ], + "center_px": [ + 427.25, + 536.75 + ], + "quality": { + "area_px": 1129.0, + "perimeter_px": 134.55662727355957, + "sharpness": { + "laplacian_var": 1934.9368664553963 + }, + "contrast": { + "p05": 2.0, + "p95": 162.0, + "dynamic_range": 160.0, + "mean_gray": 29.798975672215107, + "std_gray": 48.04028184897263 + }, + "geometry": { + "distance_to_center_norm": 0.275236040353775, + "distance_to_border_px": 404.0 + }, + "edge_ratio": 1.1231145496197876, + "edge_lengths_px": [ + 31.78049659729004, + 35.693138122558594, + 32.557640075683594, + 34.525352478027344 + ] + }, + "confidence": 0.670160195967072 + }, + { + "observation_id": "087e0575-b9be-457a-ab33-53d0c4580f01", + "type": "aruco", + "marker_id": 0, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 302.0, + 688.0 + ], + [ + 265.0, + 695.0 + ], + [ + 259.0, + 666.0 + ], + [ + 294.0, + 658.0 + ] + ], + "center_px": [ + 280.0, + 676.75 + ], + "quality": { + "area_px": 1114.5, + "perimeter_px": 134.22152137756348, + "sharpness": { + "laplacian_var": 2369.2927245702826 + }, + "contrast": { + "p05": 1.0, + "p95": 150.0, + "dynamic_range": 149.0, + "mean_gray": 57.26912928759894, + "std_gray": 59.2080885869754 + }, + "geometry": { + "distance_to_center_norm": 0.5128208994865417, + "distance_to_border_px": 259.0 + }, + "edge_ratio": 1.2715643239543173, + "edge_lengths_px": [ + 37.656341552734375, + 29.614185333251953, + 35.902645111083984, + 31.048349380493164 + ] + }, + "confidence": 0.5843196337008062 + }, + { + "observation_id": "9a83e5e7-5250-44c7-95e5-4b22257b2be1", + "type": "aruco", + "marker_id": 69, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 981.0, + 280.0 + ], + [ + 982.0, + 313.0 + ], + [ + 949.0, + 318.0 + ], + [ + 947.0, + 285.0 + ] + ], + "center_px": [ + 964.75, + 299.0 + ], + "quality": { + "area_px": 1113.0, + "perimeter_px": 133.81801986694336, + "sharpness": { + "laplacian_var": 3354.7863332314805 + }, + "contrast": { + "p05": 1.75, + "p95": 172.0, + "dynamic_range": 170.25, + "mean_gray": 57.152061855670105, + "std_gray": 66.15023178985729 + }, + "geometry": { + "distance_to_center_norm": 0.4647303819656372, + "distance_to_border_px": 280.0 + }, + "edge_ratio": 1.0409064507321608, + "edge_lengths_px": [ + 33.0151481628418, + 33.37664031982422, + 33.060550689697266, + 34.36568069458008 + ] + }, + "confidence": 0.7128402360059218 + }, + { + "observation_id": "e3243b54-3af2-4075-a053-7d4252265d75", + "type": "aruco", + "marker_id": 96, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 488.0, + 494.0 + ], + [ + 495.0, + 526.0 + ], + [ + 460.0, + 532.0 + ], + [ + 454.0, + 502.0 + ] + ], + "center_px": [ + 474.25, + 513.5 + ], + "quality": { + "area_px": 1115.0, + "perimeter_px": 133.78985595703125, + "sharpness": { + "laplacian_var": 2757.735990892225 + }, + "contrast": { + "p05": 2.0, + "p95": 177.0, + "dynamic_range": 175.0, + "mean_gray": 73.7012987012987, + "std_gray": 72.13793874311618 + }, + "geometry": { + "distance_to_center_norm": 0.2113768607378006, + "distance_to_border_px": 428.0 + }, + "edge_ratio": 1.1606990916780715, + "edge_lengths_px": [ + 32.75667953491211, + 35.510562896728516, + 30.5941162109375, + 34.928497314453125 + ] + }, + "confidence": 0.6404186396481667 + }, + { + "observation_id": "1a9fa5ed-2e63-43ef-aa4a-f39dee1af93c", + "type": "aruco", + "marker_id": 79, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 577.0, + 516.0 + ], + [ + 581.0, + 547.0 + ], + [ + 548.0, + 553.0 + ], + [ + 543.0, + 522.0 + ] + ], + "center_px": [ + 562.25, + 534.5 + ], + "quality": { + "area_px": 1065.5, + "perimeter_px": 130.72400856018066, + "sharpness": { + "laplacian_var": 4392.559492067028 + }, + "contrast": { + "p05": 2.0, + "p95": 186.0, + "dynamic_range": 184.0, + "mean_gray": 81.91292875989446, + "std_gray": 74.71013690124194 + }, + "geometry": { + "distance_to_center_norm": 0.118686243891716, + "distance_to_border_px": 407.0 + }, + "edge_ratio": 1.1045638580713426, + "edge_lengths_px": [ + 31.256999969482422, + 33.541019439697266, + 31.400636672973633, + 34.525352478027344 + ] + }, + "confidence": 0.6430894222572451 + }, + { + "observation_id": "7e16381a-a296-49ca-8132-2293f5b8135b", + "type": "aruco", + "marker_id": 215, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 553.0, + 646.0 + ], + [ + 520.0, + 652.0 + ], + [ + 514.0, + 622.0 + ], + [ + 548.0, + 615.0 + ] + ], + "center_px": [ + 533.75, + 633.75 + ], + "quality": { + "area_px": 1057.5, + "perimeter_px": 130.24888038635254, + "sharpness": { + "laplacian_var": 2815.722436662347 + }, + "contrast": { + "p05": 1.0, + "p95": 171.0, + "dynamic_range": 170.0, + "mean_gray": 63.72703062583222, + "std_gray": 68.32117542184875 + }, + "geometry": { + "distance_to_center_norm": 0.23361334204673767, + "distance_to_border_px": 308.0 + }, + "edge_ratio": 1.1346334642716067, + "edge_lengths_px": [ + 33.541019439697266, + 30.5941162109375, + 34.71310806274414, + 31.400636672973633 + ] + }, + "confidence": 0.6213460312952996 + }, + { + "observation_id": "7706a049-9491-43ec-9815-4cbebad03761", + "type": "aruco", + "marker_id": 103, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 855.0, + 429.0 + ], + [ + 858.0, + 460.0 + ], + [ + 825.0, + 466.0 + ], + [ + 822.0, + 435.0 + ] + ], + "center_px": [ + 840.0, + 447.5 + ], + "quality": { + "area_px": 1041.0, + "perimeter_px": 129.37168502807617, + "sharpness": { + "laplacian_var": 3626.7338183794227 + }, + "contrast": { + "p05": 2.0, + "p95": 182.0, + "dynamic_range": 180.0, + "mean_gray": 92.58791208791209, + "std_gray": 74.64655153508556 + }, + "geometry": { + "distance_to_center_norm": 0.25327926874160767, + "distance_to_border_px": 422.0 + }, + "edge_ratio": 1.0769372283681582, + "edge_lengths_px": [ + 31.14482307434082, + 33.541019439697266, + 31.14482307434082, + 33.541019439697266 + ] + }, + "confidence": 0.6444201033439911 + }, + { + "observation_id": "9c849569-14d4-4d4e-b4af-db83d4b78dbe", + "type": "aruco", + "marker_id": 58, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 927.0, + 376.0 + ], + [ + 929.0, + 408.0 + ], + [ + 897.0, + 413.0 + ], + [ + 894.0, + 382.0 + ] + ], + "center_px": [ + 911.75, + 394.75 + ], + "quality": { + "area_px": 1037.5, + "perimeter_px": 129.13655281066895, + "sharpness": { + "laplacian_var": 3303.552814321906 + }, + "contrast": { + "p05": 2.0, + "p95": 174.85000000000002, + "dynamic_range": 172.85000000000002, + "mean_gray": 59.11878453038674, + "std_gray": 66.1151868668178 + }, + "geometry": { + "distance_to_center_norm": 0.3560100495815277, + "distance_to_border_px": 351.0 + }, + "edge_ratio": 1.0769372283681582, + "edge_lengths_px": [ + 32.06243896484375, + 32.38827133178711, + 31.14482307434082, + 33.541019439697266 + ] + }, + "confidence": 0.6422534651483102 + }, + { + "observation_id": "2d4ad2bd-98d4-49bd-82e0-96d7bd3ec79c", + "type": "aruco", + "marker_id": 64, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1027.0, + 400.0 + ], + [ + 1028.0, + 431.0 + ], + [ + 995.0, + 436.0 + ], + [ + 994.0, + 405.0 + ] + ], + "center_px": [ + 1011.0, + 418.0 + ], + "quality": { + "area_px": 1028.0, + "perimeter_px": 128.78553009033203, + "sharpness": { + "laplacian_var": 4047.979401568105 + }, + "contrast": { + "p05": 1.0, + "p95": 170.0, + "dynamic_range": 169.0, + "mean_gray": 55.82294617563739, + "std_gray": 66.09689929718705 + }, + "geometry": { + "distance_to_center_norm": 0.4701811671257019, + "distance_to_border_px": 252.0 + }, + "edge_ratio": 1.0761060775769242, + "edge_lengths_px": [ + 31.016124725341797, + 33.37664031982422, + 31.016124725341797, + 33.37664031982422 + ] + }, + "confidence": 0.6368641043980565 + }, + { + "observation_id": "392c551b-aa17-48e7-af5f-c2f70fc4f310", + "type": "aruco", + "marker_id": 214, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 291.0, + 811.0 + ], + [ + 257.0, + 817.0 + ], + [ + 250.0, + 789.0 + ], + [ + 285.0, + 782.0 + ] + ], + "center_px": [ + 270.75, + 799.75 + ], + "quality": { + "area_px": 1025.5, + "perimeter_px": 128.69441604614258, + "sharpness": { + "laplacian_var": 2723.1428713800465 + }, + "contrast": { + "p05": 2.0, + "p95": 154.0, + "dynamic_range": 152.0, + "mean_gray": 74.93948126801153, + "std_gray": 61.46139879708263 + }, + "geometry": { + "distance_to_center_norm": 0.6105653643608093, + "distance_to_border_px": 143.0 + }, + "edge_ratio": 1.236693906315838, + "edge_lengths_px": [ + 34.525352478027344, + 28.861740112304688, + 35.693138122558594, + 29.614185333251953 + ] + }, + "confidence": 0.5528180119390559 + }, + { + "observation_id": "ab3f0095-84e8-4f13-a773-9ac4c07d3307", + "type": "aruco", + "marker_id": 51, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 773.0, + 464.0 + ], + [ + 776.0, + 495.0 + ], + [ + 744.0, + 500.0 + ], + [ + 741.0, + 469.0 + ] + ], + "center_px": [ + 758.5, + 482.0 + ], + "quality": { + "area_px": 1007.0, + "perimeter_px": 127.06618881225586, + "sharpness": { + "laplacian_var": 4275.194334457448 + }, + "contrast": { + "p05": 1.0, + "p95": 183.0, + "dynamic_range": 182.0, + "mean_gray": 60.57605633802817, + "std_gray": 70.4295611847247 + }, + "geometry": { + "distance_to_center_norm": 0.14814609289169312, + "distance_to_border_px": 460.0 + }, + "edge_ratio": 1.0399247173271222, + "edge_lengths_px": [ + 31.14482307434082, + 32.38827133178711, + 31.14482307434082, + 32.38827133178711 + ] + }, + "confidence": 0.6455595507517459 + }, + { + "observation_id": "34fc3d81-0e09-4f32-bcac-3cb29a37fd36", + "type": "aruco", + "marker_id": 211, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 571.0, + 754.0 + ], + [ + 539.0, + 760.0 + ], + [ + 534.0, + 732.0 + ], + [ + 567.0, + 726.0 + ] + ], + "center_px": [ + 552.75, + 743.0 + ], + "quality": { + "area_px": 937.0, + "perimeter_px": 122.82585525512695, + "sharpness": { + "laplacian_var": 3165.9978669233906 + }, + "contrast": { + "p05": 2.0, + "p95": 169.5, + "dynamic_range": 167.5, + "mean_gray": 66.394777265745, + "std_gray": 67.48749149895377 + }, + "geometry": { + "distance_to_center_norm": 0.34636855125427246, + "distance_to_border_px": 200.0 + }, + "edge_ratio": 1.1858541149890107, + "edge_lengths_px": [ + 32.557640075683594, + 28.44292449951172, + 33.541019439697266, + 28.284271240234375 + ] + }, + "confidence": 0.5267651887116448 + }, + { + "observation_id": "0bb00fc6-4214-49e3-9811-dffc89d7c841", + "type": "aruco", + "marker_id": 210, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 836.0, + 701.0 + ], + [ + 805.0, + 706.0 + ], + [ + 802.0, + 679.0 + ], + [ + 833.0, + 673.0 + ] + ], + "center_px": [ + 819.0, + 689.75 + ], + "quality": { + "area_px": 869.0, + "perimeter_px": 118.30235290527344, + "sharpness": { + "laplacian_var": 3586.689442120419 + }, + "contrast": { + "p05": 1.0, + "p95": 168.35000000000002, + "dynamic_range": 167.35000000000002, + "mean_gray": 59.69191919191919, + "std_gray": 64.63599998161318 + }, + "geometry": { + "distance_to_center_norm": 0.3446829617023468, + "distance_to_border_px": 254.0 + }, + "edge_ratio": 1.1623030973561614, + "edge_lengths_px": [ + 31.400636672973633, + 27.166154861450195, + 31.575305938720703, + 28.160255432128906 + ] + }, + "confidence": 0.49843567882690565 + }, + { + "observation_id": "b7647fff-20d3-4873-8dcf-6bcb9e306a65", + "type": "aruco", + "marker_id": 74, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 904.0, + 819.0 + ], + [ + 906.0, + 845.0 + ], + [ + 877.0, + 850.0 + ], + [ + 875.0, + 825.0 + ] + ], + "center_px": [ + 890.5, + 834.75 + ], + "quality": { + "area_px": 750.5, + "perimeter_px": 110.19874382019043, + "sharpness": { + "laplacian_var": 2103.9784314557996 + }, + "contrast": { + "p05": 1.0, + "p95": 140.0, + "dynamic_range": 139.0, + "mean_gray": 62.32809430255403, + "std_gray": 56.77941684546736 + }, + "geometry": { + "distance_to_center_norm": 0.5428481101989746, + "distance_to_border_px": 110.0 + }, + "edge_ratio": 1.1807949090871481, + "edge_lengths_px": [ + 26.07680892944336, + 29.42787742614746, + 25.079872131347656, + 29.614185333251953 + ] + }, + "confidence": 0.4237258557628202 + }, + { + "observation_id": "2dbbd510-5c8b-433f-ac67-cf5eceb5848e", + "type": "aruco", + "marker_id": 52, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 909.0, + 887.0 + ], + [ + 911.0, + 912.0 + ], + [ + 883.0, + 919.0 + ], + [ + 880.0, + 893.0 + ] + ], + "center_px": [ + 895.75, + 902.75 + ], + "quality": { + "area_px": 743.0, + "perimeter_px": 109.72830200195312, + "sharpness": { + "laplacian_var": 2890.0702438357102 + }, + "contrast": { + "p05": 1.0, + "p95": 144.0, + "dynamic_range": 143.0, + "mean_gray": 44.994152046783626, + "std_gray": 53.361341009568484 + }, + "geometry": { + "distance_to_center_norm": 0.6176133751869202, + "distance_to_border_px": 41.0 + }, + "edge_ratio": 1.1807949090871481, + "edge_lengths_px": [ + 25.079872131347656, + 28.861740112304688, + 26.172504425048828, + 29.614185333251953 + ] + }, + "confidence": 0.3439829645330524 + }, + { + "observation_id": "5593ef4c-81d4-44c6-9052-aad0577d7fb5", + "type": "aruco", + "marker_id": 75, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1053.0, + 847.0 + ], + [ + 1054.0, + 873.0 + ], + [ + 1025.0, + 876.0 + ], + [ + 1024.0, + 851.0 + ] + ], + "center_px": [ + 1039.0, + 861.75 + ], + "quality": { + "area_px": 743.0, + "perimeter_px": 109.46854019165039, + "sharpness": { + "laplacian_var": 3481.300323958704 + }, + "contrast": { + "p05": 1.0, + "p95": 144.54999999999995, + "dynamic_range": 143.54999999999995, + "mean_gray": 65.98113207547169, + "std_gray": 57.08774793908182 + }, + "geometry": { + "distance_to_center_norm": 0.6902604699134827, + "distance_to_border_px": 84.0 + }, + "edge_ratio": 1.1700468116241878, + "edge_lengths_px": [ + 26.019224166870117, + 29.154760360717773, + 25.01999282836914, + 29.27456283569336 + ] + }, + "confidence": 0.4233448853603915 + }, + { + "observation_id": "cfad2fe4-67ef-48e8-bab8-5be8a8f9ab3b", + "type": "aruco", + "marker_id": 81, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 860.0, + 855.0 + ], + [ + 863.0, + 880.0 + ], + [ + 833.0, + 885.0 + ], + [ + 831.0, + 861.0 + ] + ], + "center_px": [ + 846.75, + 870.25 + ], + "quality": { + "area_px": 736.5, + "perimeter_px": 109.2905445098877, + "sharpness": { + "laplacian_var": 2706.118389808287 + }, + "contrast": { + "p05": 1.0, + "p95": 146.84999999999997, + "dynamic_range": 145.84999999999997, + "mean_gray": 47.099236641221374, + "std_gray": 56.396714343392915 + }, + "geometry": { + "distance_to_center_norm": 0.552042543888092, + "distance_to_border_px": 75.0 + }, + "edge_ratio": 1.2628648400308335, + "edge_lengths_px": [ + 25.179357528686523, + 30.4138126373291, + 24.083189010620117, + 29.614185333251953 + ] + }, + "confidence": 0.3887985352320142 + }, + { + "observation_id": "4f6f2b35-a56d-4e92-b1da-bff1816e467d", + "type": "aruco", + "marker_id": 77, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 999.0, + 852.0 + ], + [ + 1001.0, + 877.0 + ], + [ + 972.0, + 882.0 + ], + [ + 971.0, + 857.0 + ] + ], + "center_px": [ + 985.75, + 867.0 + ], + "quality": { + "area_px": 720.0, + "perimeter_px": 107.97066688537598, + "sharpness": { + "laplacian_var": 2820.478962177852 + }, + "contrast": { + "p05": 1.0, + "p95": 143.59999999999997, + "dynamic_range": 142.59999999999997, + "mean_gray": 46.153241650294696, + "std_gray": 54.15353359375667 + }, + "geometry": { + "distance_to_center_norm": 0.6486911177635193, + "distance_to_border_px": 78.0 + }, + "edge_ratio": 1.1761744948535877, + "edge_lengths_px": [ + 25.079872131347656, + 29.42787742614746, + 25.01999282836914, + 28.44292449951172 + ] + }, + "confidence": 0.4081027110350248 + } + ], + "rejected_candidates": [ + { + "image_points_px": [ + [ + 82.0, + 814.0 + ], + [ + 95.0, + 849.0 + ], + [ + 55.0, + 855.0 + ], + [ + 43.0, + 822.0 + ] + ], + "center_px": [ + 68.75, + 835.0 + ], + "area_px": 1430.5 + }, + { + "image_points_px": [ + [ + 432.0, + 16.0 + ], + [ + 448.0, + 33.0 + ], + [ + 415.0, + 72.0 + ], + [ + 399.0, + 59.0 + ] + ], + "center_px": [ + 423.5, + 45.0 + ], + "area_px": 1151.0 + }, + { + "image_points_px": [ + [ + 104.0, + 800.0 + ], + [ + 116.0, + 841.0 + ], + [ + 103.0, + 842.0 + ], + [ + 98.0, + 804.0 + ] + ], + "center_px": [ + 105.25, + 821.75 + ], + "area_px": 396.5 + }, + { + "image_points_px": [ + [ + 325.0, + 866.0 + ], + [ + 291.0, + 873.0 + ], + [ + 295.0, + 869.0 + ], + [ + 314.0, + 865.0 + ] + ], + "center_px": [ + 306.25, + 868.25 + ], + "area_px": 85.5 + }, + { + "image_points_px": [ + [ + 1022.0, + 406.0 + ], + [ + 1021.0, + 412.0 + ], + [ + 1004.0, + 413.0 + ], + [ + 1005.0, + 407.0 + ] + ], + "center_px": [ + 1013.0, + 409.5 + ], + "area_px": 101.0 + } + ] +} \ No newline at end of file diff --git a/test/temp/cam1_hires_1781074183695_camera_pose.json b/test/temp/cam1_hires_1781074183695_camera_pose.json new file mode 100644 index 0000000..9072758 --- /dev/null +++ b/test/temp/cam1_hires_1781074183695_camera_pose.json @@ -0,0 +1,551 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-10T10:41:08Z", + "source": { + "detection_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\test\\temp\\cam1_hires_1781074183695_aruco_detection.json", + "robot_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\robot_1781069752019.json" + }, + "camera": { + "camera_id": "cam1", + "camera_matrix": [ + [ + 1335.5843505859375, + 0.0, + 669.8739013671875 + ], + [ + 0.0, + 1340.3487548828125, + 434.5127258300781 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.013518857769668102, + 0.6387264132499695, + -0.004291425924748182, + -0.003142312401905656, + -1.9807322025299072 + ] + }, + "estimation": { + "method": "single_camera_marker_center_lm", + "description": "Rigid init from per-marker pose estimates, followed by LM on normalized marker-center reprojection residuals.", + "marker_size_m": 0.025, + "num_used_markers": 25, + "used_marker_ids": [ + 57, + 59, + 85, + 105, + 54, + 97, + 92, + 102, + 66, + 47, + 95, + 55, + 62, + 69, + 96, + 79, + 103, + 58, + 64, + 51, + 74, + 52, + 75, + 81, + 77 + ], + "history": { + "iters": [ + 0, + 1, + 2, + 3 + ], + "rms": [ + 0.00821410924365016, + 0.0005796130478329388, + 0.0004528899483522234, + 0.0004528893564058897 + ], + "lambda": [ + 0.001, + 0.0005, + 0.00025, + 0.000125 + ] + }, + "residual_rms_px": 0.867342582216324, + "residual_median_px": 0.608681178523418, + "residual_max_px": 2.7179420081717525, + "sigma2_normalized": 2.3307814675638535e-07 + }, + "camera_pose": { + "world_to_camera": { + "rotation_matrix": [ + [ + -0.980829656124115, + 0.1278911679983139, + 0.14702728390693665 + ], + [ + 0.16805413365364075, + 0.9370887875556946, + 0.30597788095474243 + ], + [ + -0.09864574670791626, + 0.32482072710990906, + -0.9406170845031738 + ] + ], + "translation_m": [ + 0.2543368637561798, + 0.17617078125476837, + 1.0045982599258423 + ], + "rvec_rad": [ + 0.22767542290885773, + 2.968432623677477, + 0.48528339118991104 + ] + }, + "camera_in_world": { + "position_m": [ + 0.3189542591571808, + -0.5239294767379761, + 0.8536434769630432 + ], + "position_mm": [ + 318.9542541503906, + -523.9295043945312, + 853.6434936523438 + ], + "orientation_deg": { + "roll": 160.94879150390625, + "pitch": 5.661191940307617, + "yaw": 170.2774200439453 + } + }, + "uncertainty": { + "pose_covariance_6x6": [ + [ + 3.127441931746991e-07, + 1.2611994564482237e-07, + -2.6481242745835294e-07, + 2.220874904109554e-08, + -5.424247207491378e-08, + -2.3469346032411482e-08 + ], + [ + 1.2611994564482083e-07, + 1.7736366090593526e-06, + 1.7073582936930538e-06, + -2.0513038317965798e-08, + 5.817162316400782e-08, + -4.3575632542245767e-07 + ], + [ + -2.648124274583587e-07, + 1.7073582936930396e-06, + 5.575466237723722e-06, + -2.143261716718035e-08, + 8.436780693695763e-08, + -5.750157395485433e-07 + ], + [ + 2.220874904109555e-08, + -2.051303831796606e-08, + -2.143261716718066e-08, + 1.1352143805196684e-08, + -5.900072683314034e-09, + -4.703659593185704e-09 + ], + [ + -5.4242472074913865e-08, + 5.817162316400724e-08, + 8.436780693695687e-08, + -5.9000726833139505e-09, + 2.211014317418639e-08, + -1.0277230205531951e-08 + ], + [ + -2.3469346032410817e-08, + -4.3575632542245735e-07, + -5.750157395485471e-07, + -4.703659593184902e-09, + -1.0277230205531706e-08, + 2.2015022890204316e-07 + ] + ], + "parameter_std": { + "rvec_std_deg": [ + 0.032041826154000676, + 0.07630534399918094, + 0.13528923079637759 + ], + "tvec_std_m": [ + 0.00010654643966457389, + 0.0001486947987462453, + 0.00046920169320031565 + ] + }, + "camera_center_std_m": [ + 0.0015986459647155456, + 0.0009965541542375047, + 0.000655580178244062 + ], + "camera_center_std_mm": [ + 1.5986459647155455, + 0.9965541542375047, + 0.655580178244062 + ], + "orientation_std_deg": { + "roll": 0.06336728811161631, + "pitch": 0.09289304619911497, + "yaw": 0.025599763400525364 + } + } + }, + "observations": { + "markers": [ + { + "marker_id": 57, + "observed_center_px": [ + 52.25, + 319.0 + ], + "projected_center_px": [ + 51.970375061035156, + 318.21563720703125 + ], + "reprojection_error_px": 0.8327154961238747, + "confidence": 0.5244924829597363 + }, + { + "marker_id": 59, + "observed_center_px": [ + 51.75, + 452.25 + ], + "projected_center_px": [ + 51.892948150634766, + 451.67559814453125 + ], + "reprojection_error_px": 0.5919220095044975, + "confidence": 0.4943639237071812 + }, + { + "marker_id": 85, + "observed_center_px": [ + 233.25, + 371.5 + ], + "projected_center_px": [ + 233.19097900390625, + 371.65509033203125 + ], + "reprojection_error_px": 0.16594122173065323, + "confidence": 0.8483075854962995 + }, + { + "marker_id": 105, + "observed_center_px": [ + 218.25, + 444.0 + ], + "projected_center_px": [ + 218.5349578857422, + 443.7501525878906 + ], + "reprojection_error_px": 0.3789785297142959, + "confidence": 0.8026039835274208 + }, + { + "marker_id": 54, + "observed_center_px": [ + 477.75, + 306.75 + ], + "projected_center_px": [ + 477.47686767578125, + 306.69378662109375 + ], + "reprojection_error_px": 0.27885697140504484, + "confidence": 0.8452719950987326 + }, + { + "marker_id": 97, + "observed_center_px": [ + 527.5, + 255.0 + ], + "projected_center_px": [ + 526.965087890625, + 254.7095489501953 + ], + "reprojection_error_px": 0.608681178523418, + "confidence": 0.8803422600053223 + }, + { + "marker_id": 92, + "observed_center_px": [ + 61.75, + 588.5 + ], + "projected_center_px": [ + 62.09781265258789, + 587.8051147460938 + ], + "reprojection_error_px": 0.7770708831223688, + "confidence": 0.5831582761878896 + }, + { + "marker_id": 102, + "observed_center_px": [ + 39.0, + 537.25 + ], + "projected_center_px": [ + 38.78061294555664, + 536.7982177734375 + ], + "reprojection_error_px": 0.5022328741680533, + "confidence": 0.250937972298748 + }, + { + "marker_id": 66, + "observed_center_px": [ + 667.25, + 227.75 + ], + "projected_center_px": [ + 666.9827270507812, + 227.5442657470703 + ], + "reprojection_error_px": 0.3372853572460938, + "confidence": 0.8298789941103211 + }, + { + "marker_id": 47, + "observed_center_px": [ + 486.75, + 370.5 + ], + "projected_center_px": [ + 486.16741943359375, + 370.6946716308594 + ], + "reprojection_error_px": 0.614245195516966, + "confidence": 0.7781680532624052 + }, + { + "marker_id": 95, + "observed_center_px": [ + 717.25, + 350.0 + ], + "projected_center_px": [ + 717.3355712890625, + 350.58428955078125 + ], + "reprojection_error_px": 0.5905224167328221, + "confidence": 0.7551712168920252 + }, + { + "marker_id": 55, + "observed_center_px": [ + 580.25, + 389.5 + ], + "projected_center_px": [ + 580.1473388671875, + 389.7716979980469 + ], + "reprojection_error_px": 0.29044639838191394, + "confidence": 0.7273519115777719 + }, + { + "marker_id": 62, + "observed_center_px": [ + 427.25, + 536.75 + ], + "projected_center_px": [ + 427.4496154785156, + 537.495849609375 + ], + "reprojection_error_px": 0.7720997209349723, + "confidence": 0.670160195967072 + }, + { + "marker_id": 69, + "observed_center_px": [ + 964.75, + 299.0 + ], + "projected_center_px": [ + 964.7708129882812, + 298.9970703125 + ], + "reprojection_error_px": 0.021018171900598445, + "confidence": 0.7128402360059218 + }, + { + "marker_id": 96, + "observed_center_px": [ + 474.25, + 513.5 + ], + "projected_center_px": [ + 474.6187744140625, + 513.740966796875 + ], + "reprojection_error_px": 0.4405219241573996, + "confidence": 0.6404186396481667 + }, + { + "marker_id": 79, + "observed_center_px": [ + 562.25, + 534.5 + ], + "projected_center_px": [ + 562.2368774414062, + 535.1456909179688 + ], + "reprojection_error_px": 0.6458242509316087, + "confidence": 0.6430894222572451 + }, + { + "marker_id": 103, + "observed_center_px": [ + 840.0, + 447.5 + ], + "projected_center_px": [ + 840.52978515625, + 447.9445495605469 + ], + "reprojection_error_px": 0.6915899244243344, + "confidence": 0.6444201033439911 + }, + { + "marker_id": 58, + "observed_center_px": [ + 911.75, + 394.75 + ], + "projected_center_px": [ + 912.2774658203125, + 394.775146484375 + ], + "reprojection_error_px": 0.5280648987334423, + "confidence": 0.6422534651483102 + }, + { + "marker_id": 64, + "observed_center_px": [ + 1011.0, + 418.0 + ], + "projected_center_px": [ + 1009.9371337890625, + 417.3528747558594 + ], + "reprojection_error_px": 1.2443695849532412, + "confidence": 0.6368641043980565 + }, + { + "marker_id": 51, + "observed_center_px": [ + 758.5, + 482.0 + ], + "projected_center_px": [ + 758.6611328125, + 483.0947265625 + ], + "reprojection_error_px": 1.1065215903484336, + "confidence": 0.6455595507517459 + }, + { + "marker_id": 74, + "observed_center_px": [ + 890.5, + 834.75 + ], + "projected_center_px": [ + 891.2932739257812, + 835.595703125 + ], + "reprojection_error_px": 1.1595245995489538, + "confidence": 0.4237258557628202 + }, + { + "marker_id": 52, + "observed_center_px": [ + 895.75, + 902.75 + ], + "projected_center_px": [ + 896.4219360351562, + 903.2128295898438 + ], + "reprojection_error_px": 0.8159100836344867, + "confidence": 0.3439829645330524 + }, + { + "marker_id": 75, + "observed_center_px": [ + 1039.0, + 861.75 + ], + "projected_center_px": [ + 1037.73388671875, + 859.344970703125 + ], + "reprojection_error_px": 2.7179420081717525, + "confidence": 0.4233448853603915 + }, + { + "marker_id": 81, + "observed_center_px": [ + 846.75, + 870.25 + ], + "projected_center_px": [ + 847.3787231445312, + 871.1409301757812 + ], + "reprojection_error_px": 1.0904354041330793, + "confidence": 0.3887985352320142 + }, + { + "marker_id": 77, + "observed_center_px": [ + 985.75, + 867.0 + ], + "projected_center_px": [ + 985.7974853515625, + 866.8070678710938 + ], + "reprojection_error_px": 0.1986898713505852, + "confidence": 0.4081027110350248 + } + ] + }, + "qa": { + "sanity_notes": [] + } +} \ No newline at end of file diff --git a/test/temp/cam1_hires_1781074183695_debug.jpg b/test/temp/cam1_hires_1781074183695_debug.jpg new file mode 100644 index 0000000..7eb47f4 Binary files /dev/null and b/test/temp/cam1_hires_1781074183695_debug.jpg differ diff --git a/test/temp/cam2_hires_1781074183695_aruco_detection.json b/test/temp/cam2_hires_1781074183695_aruco_detection.json new file mode 100644 index 0000000..bac4698 --- /dev/null +++ b/test/temp/cam2_hires_1781074183695_aruco_detection.json @@ -0,0 +1,3433 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-10T10:41:07Z", + "vision_config": { + "MarkerType": "DICT_4X4_250", + "MarkerSize": 0.025 + }, + "camera": { + "camera_id": "cam2", + "intrinsics_file": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\calibration_cam2.npz", + "camera_matrix": [ + [ + 1365.456298828125, + 0.0, + 916.1585083007812 + ], + [ + 0.0, + 1364.6678466796875, + 557.509033203125 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.042227353900671005, + -0.2937094569206238, + -0.000249923556111753, + -0.0038161256816238165, + 0.5750380158424377 + ] + }, + "image": { + "image_file": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\cam2_hires_1781074183695.jpg", + "image_sha256": "c6e8d3933c326a700363ab6a9eb4098a68ae96da09a734259cf21ef7f4c90816", + "width_px": 1920, + "height_px": 1080 + }, + "aruco": { + "dictionary": "DICT_4X4_250", + "num_detected_markers": 58, + "num_rejected_candidates": 10 + }, + "detections": [ + { + "observation_id": "70ace542-282b-472f-bcde-5913e422c932", + "type": "aruco", + "marker_id": 61, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 702.0, + 1061.0 + ], + [ + 663.0, + 1073.0 + ], + [ + 656.0, + 1035.0 + ], + [ + 694.0, + 1024.0 + ] + ], + "center_px": [ + 678.75, + 1048.25 + ], + "quality": { + "area_px": 1530.0, + "perimeter_px": 156.8588409423828, + "sharpness": { + "laplacian_var": 1072.3626918612674 + }, + "contrast": { + "p05": 12.0, + "p95": 153.0, + "dynamic_range": 141.0, + "mean_gray": 78.84140550807217, + "std_gray": 57.7973217661743 + }, + "geometry": { + "distance_to_center_norm": 0.527374267578125, + "distance_to_border_px": 7.0 + }, + "edge_ratio": 1.077913767559655, + "edge_lengths_px": [ + 40.804412841796875, + 38.63935852050781, + 39.560081481933594, + 37.85498809814453 + ] + }, + "confidence": 0.1298805194008731 + }, + { + "observation_id": "0632bb79-7ba6-4b60-94aa-aef0a29314b3", + "type": "aruco", + "marker_id": 75, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 925.0, + 1000.0 + ], + [ + 888.0, + 1011.0 + ], + [ + 877.0, + 976.0 + ], + [ + 914.0, + 964.0 + ] + ], + "center_px": [ + 901.0, + 987.75 + ], + "quality": { + "area_px": 1440.0, + "perimeter_px": 151.82875061035156, + "sharpness": { + "laplacian_var": 1292.1083870183784 + }, + "contrast": { + "p05": 15.0, + "p95": 161.0, + "dynamic_range": 146.0, + "mean_gray": 89.67365269461078, + "std_gray": 58.889035036550446 + }, + "geometry": { + "distance_to_center_norm": 0.4100222587585449, + "distance_to_border_px": 69.0 + }, + "edge_ratio": 1.0602222655228912, + "edge_lengths_px": [ + 38.60051727294922, + 36.68787384033203, + 38.897300720214844, + 37.64305877685547 + ] + }, + "confidence": 0.9054705142666829 + }, + { + "observation_id": "597eff94-3440-48bf-aadb-d46b0523244b", + "type": "aruco", + "marker_id": 83, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 677.0, + 962.0 + ], + [ + 640.0, + 973.0 + ], + [ + 633.0, + 938.0 + ], + [ + 669.0, + 927.0 + ] + ], + "center_px": [ + 654.75, + 950.0 + ], + "quality": { + "area_px": 1360.0, + "perimeter_px": 147.83935928344727, + "sharpness": { + "laplacian_var": 1172.6980079498985 + }, + "contrast": { + "p05": 11.0, + "p95": 158.0, + "dynamic_range": 147.0, + "mean_gray": 82.6470588235294, + "std_gray": 58.66077162561977 + }, + "geometry": { + "distance_to_center_norm": 0.46407145261764526, + "distance_to_border_px": 107.0 + }, + "edge_ratio": 1.0814548482794546, + "edge_lengths_px": [ + 38.60051727294922, + 35.693138122558594, + 37.64305877685547, + 35.902645111083984 + ] + }, + "confidence": 0.8383768107463128 + }, + { + "observation_id": "48d45d99-069b-4f24-8c05-b27dce5480fa", + "type": "aruco", + "marker_id": 77, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 910.0, + 935.0 + ], + [ + 874.0, + 945.0 + ], + [ + 864.0, + 911.0 + ], + [ + 900.0, + 901.0 + ] + ], + "center_px": [ + 887.0, + 923.0 + ], + "quality": { + "area_px": 1324.0, + "perimeter_px": 145.6063461303711, + "sharpness": { + "laplacian_var": 1241.9674210979717 + }, + "contrast": { + "p05": 14.0, + "p95": 161.0, + "dynamic_range": 147.0, + "mean_gray": 65.78429203539822, + "std_gray": 57.81754312561938 + }, + "geometry": { + "distance_to_center_norm": 0.3539820909500122, + "distance_to_border_px": 135.0 + }, + "edge_ratio": 1.0542603784742692, + "edge_lengths_px": [ + 37.36308288574219, + 35.44009017944336, + 37.36308288574219, + 35.44009017944336 + ] + }, + "confidence": 0.8372378253881325 + }, + { + "observation_id": "e511e977-a4ba-4673-a970-0d4875bede00", + "type": "aruco", + "marker_id": 52, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 854.0, + 836.0 + ], + [ + 819.0, + 846.0 + ], + [ + 810.0, + 813.0 + ], + [ + 844.0, + 804.0 + ] + ], + "center_px": [ + 831.75, + 824.75 + ], + "quality": { + "area_px": 1211.5, + "perimeter_px": 139.30292892456055, + "sharpness": { + "laplacian_var": 1604.8211737727197 + }, + "contrast": { + "p05": 11.550000000000004, + "p95": 163.0, + "dynamic_range": 151.45, + "mean_gray": 64.91871921182266, + "std_gray": 59.7129693921724 + }, + "geometry": { + "distance_to_center_norm": 0.2835334539413452, + "distance_to_border_px": 234.0 + }, + "edge_ratio": 1.0857374519096636, + "edge_lengths_px": [ + 36.400550842285156, + 34.20526123046875, + 35.1710090637207, + 33.52610778808594 + ] + }, + "confidence": 0.7438876362292666 + }, + { + "observation_id": "c3d13ec0-ef96-4df1-be24-31362de7ae3f", + "type": "aruco", + "marker_id": 101, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 716.0, + 841.0 + ], + [ + 680.0, + 851.0 + ], + [ + 674.0, + 819.0 + ], + [ + 708.0, + 809.0 + ] + ], + "center_px": [ + 694.5, + 830.0 + ], + "quality": { + "area_px": 1190.0, + "perimeter_px": 138.3456573486328, + "sharpness": { + "laplacian_var": 1598.178715999721 + }, + "contrast": { + "p05": 11.0, + "p95": 162.3499999999999, + "dynamic_range": 151.3499999999999, + "mean_gray": 78.71536523929471, + "std_gray": 61.59855890460042 + }, + "geometry": { + "distance_to_center_norm": 0.3569643497467041, + "distance_to_border_px": 229.0 + }, + "edge_ratio": 1.1475980076838446, + "edge_lengths_px": [ + 37.36308288574219, + 32.557640075683594, + 35.44009017944336, + 32.98484420776367 + ] + }, + "confidence": 0.6912989810207925 + }, + { + "observation_id": "2b952ef2-5cc3-41db-98ed-6ed275358390", + "type": "aruco", + "marker_id": 74, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 945.0, + 812.0 + ], + [ + 911.0, + 821.0 + ], + [ + 901.0, + 790.0 + ], + [ + 935.0, + 781.0 + ] + ], + "center_px": [ + 923.0, + 801.0 + ], + "quality": { + "area_px": 1144.0, + "perimeter_px": 135.48800659179688, + "sharpness": { + "laplacian_var": 1345.3205870373708 + }, + "contrast": { + "p05": 11.0, + "p95": 154.0, + "dynamic_range": 143.0, + "mean_gray": 77.64599483204134, + "std_gray": 60.7203421569649 + }, + "geometry": { + "distance_to_center_norm": 0.2393287867307663, + "distance_to_border_px": 259.0 + }, + "edge_ratio": 1.0797597793136402, + "edge_lengths_px": [ + 35.1710090637207, + 32.572994232177734, + 35.1710090637207, + 32.572994232177734 + ] + }, + "confidence": 0.7063299460473174 + }, + { + "observation_id": "8eccfe7e-a55c-47cd-948f-20b088954237", + "type": "aruco", + "marker_id": 64, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1464.0, + 831.0 + ], + [ + 1432.0, + 840.0 + ], + [ + 1414.0, + 811.0 + ], + [ + 1445.0, + 801.0 + ] + ], + "center_px": [ + 1438.75, + 820.75 + ], + "quality": { + "area_px": 1105.0, + "perimeter_px": 135.45719146728516, + "sharpness": { + "laplacian_var": 1307.6459184407786 + }, + "contrast": { + "p05": 28.6, + "p95": 180.0, + "dynamic_range": 151.4, + "mean_gray": 83.29883570504528, + "std_gray": 58.81468219850745 + }, + "geometry": { + "distance_to_center_norm": 0.5038772821426392, + "distance_to_border_px": 240.0 + }, + "edge_ratio": 1.0901841766099862, + "edge_lengths_px": [ + 33.241539001464844, + 34.13209533691406, + 32.572994232177734, + 35.510562896728516 + ] + }, + "confidence": 0.6757268014633911 + }, + { + "observation_id": "74e6878c-7630-4cd1-b3e8-77d7a9ce8b01", + "type": "aruco", + "marker_id": 81, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 895.0, + 772.0 + ], + [ + 861.0, + 781.0 + ], + [ + 852.0, + 751.0 + ], + [ + 885.0, + 742.0 + ] + ], + "center_px": [ + 873.25, + 761.5 + ], + "quality": { + "area_px": 1090.5, + "perimeter_px": 132.31996536254883, + "sharpness": { + "laplacian_var": 1765.1441133575452 + }, + "contrast": { + "p05": 11.0, + "p95": 163.0, + "dynamic_range": 152.0, + "mean_gray": 64.15106951871658, + "std_gray": 61.147471527915194 + }, + "geometry": { + "distance_to_center_norm": 0.21597090363502502, + "distance_to_border_px": 299.0 + }, + "edge_ratio": 1.1229239161955578, + "edge_lengths_px": [ + 35.1710090637207, + 31.320919036865234, + 34.20526123046875, + 31.62277603149414 + ] + }, + "confidence": 0.6474169705665015 + }, + { + "observation_id": "c21a7a8f-cd26-4eb1-ac8e-630c590e892b", + "type": "aruco", + "marker_id": 69, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1560.0, + 760.0 + ], + [ + 1530.0, + 769.0 + ], + [ + 1512.0, + 740.0 + ], + [ + 1542.0, + 732.0 + ] + ], + "center_px": [ + 1536.0, + 750.25 + ], + "quality": { + "area_px": 1008.0, + "perimeter_px": 129.78799629211426, + "sharpness": { + "laplacian_var": 1611.3484351893771 + }, + "contrast": { + "p05": 28.200000000000003, + "p95": 184.0, + "dynamic_range": 155.8, + "mean_gray": 85.63829787234043, + "std_gray": 59.29116478208399 + }, + "geometry": { + "distance_to_center_norm": 0.5566943287849426, + "distance_to_border_px": 311.0 + }, + "edge_ratio": 1.0993207696367373, + "edge_lengths_px": [ + 31.320919036865234, + 34.13209533691406, + 31.048349380493164, + 33.2866325378418 + ] + }, + "confidence": 0.6112865494409404 + }, + { + "observation_id": "28979d27-948e-44b7-8376-9f76b671c46c", + "type": "aruco", + "marker_id": 73, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 638.0, + 721.0 + ], + [ + 603.0, + 730.0 + ], + [ + 598.0, + 702.0 + ], + [ + 632.0, + 693.0 + ] + ], + "center_px": [ + 617.75, + 711.5 + ], + "quality": { + "area_px": 1015.5, + "perimeter_px": 128.38819885253906, + "sharpness": { + "laplacian_var": 2365.914570678551 + }, + "contrast": { + "p05": 10.0, + "p95": 167.0, + "dynamic_range": 157.0, + "mean_gray": 83.06491712707182, + "std_gray": 63.23886957833464 + }, + "geometry": { + "distance_to_center_norm": 0.3475543260574341, + "distance_to_border_px": 350.0 + }, + "edge_ratio": 1.27056633309827, + "edge_lengths_px": [ + 36.13862228393555, + 28.44292449951172, + 35.1710090637207, + 28.635643005371094 + ] + }, + "confidence": 0.532833258968179 + }, + { + "observation_id": "0ae849df-383a-4fb6-8ebd-1e12e6aeb2da", + "type": "aruco", + "marker_id": 82, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 688.0, + 712.0 + ], + [ + 654.0, + 720.0 + ], + [ + 648.0, + 692.0 + ], + [ + 681.0, + 683.0 + ] + ], + "center_px": [ + 667.75, + 701.75 + ], + "quality": { + "area_px": 1010.0, + "perimeter_px": 127.60227012634277, + "sharpness": { + "laplacian_var": 2018.7907067934516 + }, + "contrast": { + "p05": 9.0, + "p95": 169.0, + "dynamic_range": 160.0, + "mean_gray": 76.53889674681754, + "std_gray": 66.27598292583566 + }, + "geometry": { + "distance_to_center_norm": 0.3032589256763458, + "distance_to_border_px": 360.0 + }, + "edge_ratio": 1.2197559980721124, + "edge_lengths_px": [ + 34.928497314453125, + 28.635643005371094, + 34.20526123046875, + 29.832868576049805 + ] + }, + "confidence": 0.552022973773092 + }, + { + "observation_id": "14ac139d-e0a4-4682-b6d8-0f2679e05df5", + "type": "aruco", + "marker_id": 58, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1450.0, + 732.0 + ], + [ + 1420.0, + 740.0 + ], + [ + 1404.0, + 711.0 + ], + [ + 1434.0, + 704.0 + ] + ], + "center_px": [ + 1427.0, + 721.75 + ], + "quality": { + "area_px": 975.0, + "perimeter_px": 127.22421455383301, + "sharpness": { + "laplacian_var": 1732.9655268433949 + }, + "contrast": { + "p05": 29.0, + "p95": 185.0, + "dynamic_range": 156.0, + "mean_gray": 87.99402985074627, + "std_gray": 61.08687203079375 + }, + "geometry": { + "distance_to_center_norm": 0.45496314764022827, + "distance_to_border_px": 340.0 + }, + "edge_ratio": 1.0751528654272822, + "edge_lengths_px": [ + 31.048349380493164, + 33.12099075317383, + 30.805843353271484, + 32.24903106689453 + ] + }, + "confidence": 0.6045651933799014 + }, + { + "observation_id": "ebdd73fd-8b4b-4707-b923-b1e0860f305e", + "type": "aruco", + "marker_id": 210, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1098.0, + 689.0 + ], + [ + 1087.0, + 661.0 + ], + [ + 1118.0, + 653.0 + ], + [ + 1129.0, + 681.0 + ] + ], + "center_px": [ + 1108.0, + 671.0 + ], + "quality": { + "area_px": 956.0, + "perimeter_px": 124.19767761230469, + "sharpness": { + "laplacian_var": 2650.939479956763 + }, + "contrast": { + "p05": 16.85, + "p95": 185.0, + "dynamic_range": 168.15, + "mean_gray": 79.80091185410335, + "std_gray": 65.91810014116149 + }, + "geometry": { + "distance_to_center_norm": 0.17944349348545074, + "distance_to_border_px": 391.0 + }, + "edge_ratio": 1.0642352686074992, + "edge_lengths_px": [ + 30.08321762084961, + 32.015621185302734, + 30.08321762084961, + 32.015621185302734 + ] + }, + "confidence": 0.5988650744184164 + }, + { + "observation_id": "6ae4cfc0-3e4a-4ebe-a67f-91301f5eb0f5", + "type": "aruco", + "marker_id": 103, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1375.0, + 677.0 + ], + [ + 1345.0, + 685.0 + ], + [ + 1331.0, + 657.0 + ], + [ + 1361.0, + 650.0 + ] + ], + "center_px": [ + 1353.0, + 667.25 + ], + "quality": { + "area_px": 930.0, + "perimeter_px": 123.57295799255371, + "sharpness": { + "laplacian_var": 1825.283457695058 + }, + "contrast": { + "p05": 29.0, + "p95": 190.0, + "dynamic_range": 161.0, + "mean_gray": 118.47085889570552, + "std_gray": 66.08187019125559 + }, + "geometry": { + "distance_to_center_norm": 0.3750388026237488, + "distance_to_border_px": 395.0 + }, + "edge_ratio": 1.0293005022013286, + "edge_lengths_px": [ + 31.048349380493164, + 31.30495262145996, + 30.805843353271484, + 30.4138126373291 + ] + }, + "confidence": 0.602350818516097 + }, + { + "observation_id": "be12fc64-02ff-43cc-812a-9a0625c7aeb9", + "type": "aruco", + "marker_id": 51, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1318.0, + 613.0 + ], + [ + 1289.0, + 620.0 + ], + [ + 1276.0, + 594.0 + ], + [ + 1305.0, + 586.0 + ] + ], + "center_px": [ + 1297.0, + 603.25 + ], + "quality": { + "area_px": 866.0, + "perimeter_px": 118.95161819458008, + "sharpness": { + "laplacian_var": 2630.765414871831 + }, + "contrast": { + "p05": 25.0, + "p95": 192.29999999999995, + "dynamic_range": 167.29999999999995, + "mean_gray": 86.05714285714286, + "std_gray": 64.47153051773255 + }, + "geometry": { + "distance_to_center_norm": 0.3113015294075012, + "distance_to_border_px": 460.0 + }, + "edge_ratio": 1.0348941407110426, + "edge_lengths_px": [ + 29.832868576049805, + 29.068883895874023, + 30.08321762084961, + 29.96664810180664 + ] + }, + "confidence": 0.5578670422625701 + }, + { + "observation_id": "1fa54ac0-453e-4d34-b844-2e6cfc11fb88", + "type": "aruco", + "marker_id": 95, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1429.0, + 561.0 + ], + [ + 1400.0, + 568.0 + ], + [ + 1387.0, + 543.0 + ], + [ + 1414.0, + 537.0 + ] + ], + "center_px": [ + 1407.5, + 552.25 + ], + "quality": { + "area_px": 777.0, + "perimeter_px": 113.97145080566406, + "sharpness": { + "laplacian_var": 2384.9314468909483 + }, + "contrast": { + "p05": 25.0, + "p95": 193.75, + "dynamic_range": 168.75, + "mean_gray": 97.63117870722434, + "std_gray": 66.11992861042086 + }, + "geometry": { + "distance_to_center_norm": 0.40643349289894104, + "distance_to_border_px": 491.0 + }, + "edge_ratio": 1.078609607967401, + "edge_lengths_px": [ + 29.832868576049805, + 28.17800521850586, + 27.658634185791016, + 28.301942825317383 + ] + }, + "confidence": 0.4802479007916047 + }, + { + "observation_id": "2c3661bb-0b4a-4532-afc2-52b0882b60f7", + "type": "aruco", + "marker_id": 86, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 659.0, + 550.0 + ], + [ + 627.0, + 557.0 + ], + [ + 622.0, + 533.0 + ], + [ + 653.0, + 526.0 + ] + ], + "center_px": [ + 640.25, + 541.5 + ], + "quality": { + "area_px": 794.5, + "perimeter_px": 113.79111099243164, + "sharpness": { + "laplacian_var": 2168.540069128116 + }, + "contrast": { + "p05": 6.0, + "p95": 172.0, + "dynamic_range": 166.0, + "mean_gray": 78.10488245931283, + "std_gray": 67.72337518007977 + }, + "geometry": { + "distance_to_center_norm": 0.2903013825416565, + "distance_to_border_px": 523.0 + }, + "edge_ratio": 1.3361728606953136, + "edge_lengths_px": [ + 32.75667953491211, + 24.515300750732422, + 31.78049659729004, + 24.73863410949707 + ] + }, + "confidence": 0.3964057961714926 + }, + { + "observation_id": "c4274b36-45db-48a8-a217-b1c4f3977d52", + "type": "aruco", + "marker_id": 66, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1515.0, + 511.0 + ], + [ + 1488.0, + 517.0 + ], + [ + 1474.0, + 494.0 + ], + [ + 1500.0, + 487.0 + ] + ], + "center_px": [ + 1494.25, + 502.25 + ], + "quality": { + "area_px": 717.0, + "perimeter_px": 109.81222343444824, + "sharpness": { + "laplacian_var": 1995.4523796365183 + }, + "contrast": { + "p05": 32.2, + "p95": 191.0, + "dynamic_range": 158.8, + "mean_gray": 87.28247422680413, + "std_gray": 59.476033482627734 + }, + "geometry": { + "distance_to_center_norm": 0.4862501919269562, + "distance_to_border_px": 405.0 + }, + "edge_ratio": 1.051107800969704, + "edge_lengths_px": [ + 27.658634185791016, + 26.925823211669922, + 26.925823211669922, + 28.301942825317383 + ] + }, + "confidence": 0.45475830315312954 + }, + { + "observation_id": "b6947ba8-c845-4bda-ad02-2a769e869047", + "type": "aruco", + "marker_id": 84, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 690.0, + 495.0 + ], + [ + 660.0, + 502.0 + ], + [ + 655.0, + 479.0 + ], + [ + 685.0, + 472.0 + ] + ], + "center_px": [ + 672.5, + 487.0 + ], + "quality": { + "area_px": 725.0, + "perimeter_px": 108.68609619140625, + "sharpness": { + "laplacian_var": 3218.9496459960938 + }, + "contrast": { + "p05": 7.0, + "p95": 174.0, + "dynamic_range": 167.0, + "mean_gray": 81.1171875, + "std_gray": 66.23285404230927 + }, + "geometry": { + "distance_to_center_norm": 0.2654168903827667, + "distance_to_border_px": 472.0 + }, + "edge_ratio": 1.3088148609990344, + "edge_lengths_px": [ + 30.805843353271484, + 23.53720474243164, + 30.805843353271484, + 23.53720474243164 + ] + }, + "confidence": 0.36929083534733026 + }, + { + "observation_id": "d165fa0d-8bba-40ef-88d7-19ac27b2ae6e", + "type": "aruco", + "marker_id": 79, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1226.0, + 469.0 + ], + [ + 1198.0, + 476.0 + ], + [ + 1186.0, + 453.0 + ], + [ + 1214.0, + 447.0 + ] + ], + "center_px": [ + 1206.0, + 461.25 + ], + "quality": { + "area_px": 708.0, + "perimeter_px": 108.49955558776855, + "sharpness": { + "laplacian_var": 4917.7606459054205 + }, + "contrast": { + "p05": 16.450000000000003, + "p95": 199.0, + "dynamic_range": 182.55, + "mean_gray": 102.62745098039215, + "std_gray": 72.60337073801813 + }, + "geometry": { + "distance_to_center_norm": 0.23450595140457153, + "distance_to_border_px": 447.0 + }, + "edge_ratio": 1.1517087791564107, + "edge_lengths_px": [ + 28.861740112304688, + 25.942243576049805, + 28.635643005371094, + 25.05992889404297 + ] + }, + "confidence": 0.4098258244985548 + }, + { + "observation_id": "6f703e9c-4000-4657-baa2-0489decad1de", + "type": "aruco", + "marker_id": 60, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 652.0, + 477.0 + ], + [ + 622.0, + 483.0 + ], + [ + 618.0, + 460.0 + ], + [ + 648.0, + 454.0 + ] + ], + "center_px": [ + 635.0, + 468.5 + ], + "quality": { + "area_px": 714.0, + "perimeter_px": 107.87870407104492, + "sharpness": { + "laplacian_var": 2294.8533358469226 + }, + "contrast": { + "p05": 7.0, + "p95": 174.0, + "dynamic_range": 167.0, + "mean_gray": 96.673786407767, + "std_gray": 67.53696141749181 + }, + "geometry": { + "distance_to_center_norm": 0.30212080478668213, + "distance_to_border_px": 454.0 + }, + "edge_ratio": 1.3105079100858221, + "edge_lengths_px": [ + 30.5941162109375, + 23.34523582458496, + 30.5941162109375, + 23.34523582458496 + ] + }, + "confidence": 0.36321795262481693 + }, + { + "observation_id": "f054e2f0-37c1-4d53-9d18-3e0e3137de49", + "type": "aruco", + "marker_id": 55, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1358.0, + 468.0 + ], + [ + 1331.0, + 474.0 + ], + [ + 1318.0, + 452.0 + ], + [ + 1345.0, + 445.0 + ] + ], + "center_px": [ + 1338.0, + 459.75 + ], + "quality": { + "area_px": 692.0, + "perimeter_px": 107.52483940124512, + "sharpness": { + "laplacian_var": 3124.162941431284 + }, + "contrast": { + "p05": 21.0, + "p95": 196.2, + "dynamic_range": 175.2, + "mean_gray": 93.30784708249497, + "std_gray": 67.54105837333242 + }, + "geometry": { + "distance_to_center_norm": 0.3508315682411194, + "distance_to_border_px": 445.0 + }, + "edge_ratio": 1.0915237335684005, + "edge_lengths_px": [ + 27.658634185791016, + 25.553865432739258, + 27.892650604248047, + 26.419689178466797 + ] + }, + "confidence": 0.4226507579685383 + }, + { + "observation_id": "4411bf18-fe85-418d-84fe-ca173f26178b", + "type": "aruco", + "marker_id": 215, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1113.0, + 448.0 + ], + [ + 1103.0, + 426.0 + ], + [ + 1131.0, + 419.0 + ], + [ + 1142.0, + 441.0 + ] + ], + "center_px": [ + 1122.25, + 433.5 + ], + "quality": { + "area_px": 700.5, + "perimeter_px": 107.45744895935059, + "sharpness": { + "laplacian_var": 3300.1220791329174 + }, + "contrast": { + "p05": 16.0, + "p95": 194.0, + "dynamic_range": 178.0, + "mean_gray": 84.63931297709924, + "std_gray": 69.7856154132925 + }, + "geometry": { + "distance_to_center_norm": 0.1762041449546814, + "distance_to_border_px": 419.0 + }, + "edge_ratio": 1.2344928868147667, + "edge_lengths_px": [ + 24.166091918945312, + 28.861740112304688, + 24.59674835205078, + 29.832868576049805 + ] + }, + "confidence": 0.3782929857173592 + }, + { + "observation_id": "8a585810-5ec0-4840-88ae-b7d3b64e45ec", + "type": "aruco", + "marker_id": 211, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1006.0, + 472.0 + ], + [ + 997.0, + 451.0 + ], + [ + 1025.0, + 444.0 + ], + [ + 1035.0, + 465.0 + ] + ], + "center_px": [ + 1015.75, + 458.0 + ], + "quality": { + "area_px": 665.0, + "perimeter_px": 104.80133438110352, + "sharpness": { + "laplacian_var": 3442.1105632713143 + }, + "contrast": { + "p05": 11.0, + "p95": 190.0, + "dynamic_range": 179.0, + "mean_gray": 86.69734151329243, + "std_gray": 71.97356942940186 + }, + "geometry": { + "distance_to_center_norm": 0.09002353996038437, + "distance_to_border_px": 444.0 + }, + "edge_ratio": 1.3057492230920622, + "edge_lengths_px": [ + 22.847318649291992, + 28.861740112304688, + 23.25940704345703, + 29.832868576049805 + ] + }, + "confidence": 0.3395241027090208 + }, + { + "observation_id": "63588819-7bb4-4e00-9707-53866ccd924a", + "type": "aruco", + "marker_id": 72, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 760.0, + 445.0 + ], + [ + 731.0, + 451.0 + ], + [ + 725.0, + 430.0 + ], + [ + 754.0, + 423.0 + ] + ], + "center_px": [ + 742.5, + 437.25 + ], + "quality": { + "area_px": 662.5, + "perimeter_px": 104.09089279174805, + "sharpness": { + "laplacian_var": 2383.671314139406 + }, + "contrast": { + "p05": 6.0, + "p95": 175.0, + "dynamic_range": 169.0, + "mean_gray": 60.62208067940552, + "std_gray": 62.12791971738332 + }, + "geometry": { + "distance_to_center_norm": 0.2183922976255417, + "distance_to_border_px": 423.0 + }, + "edge_ratio": 1.3659531887478962, + "edge_lengths_px": [ + 29.614185333251953, + 21.840330123901367, + 29.832868576049805, + 22.803508758544922 + ] + }, + "confidence": 0.32333953337853494 + }, + { + "observation_id": "00ddd5fe-2e54-4a33-8bb6-1dc68b7fd994", + "type": "aruco", + "marker_id": 97, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1454.0, + 422.0 + ], + [ + 1427.0, + 428.0 + ], + [ + 1414.0, + 407.0 + ], + [ + 1439.0, + 401.0 + ] + ], + "center_px": [ + 1433.5, + 414.5 + ], + "quality": { + "area_px": 630.0, + "perimeter_px": 103.87370872497559, + "sharpness": { + "laplacian_var": 2620.843538215843 + }, + "contrast": { + "p05": 26.05, + "p95": 199.0, + "dynamic_range": 172.95, + "mean_gray": 113.02036199095022, + "std_gray": 68.11041768447784 + }, + "geometry": { + "distance_to_center_norm": 0.4447299838066101, + "distance_to_border_px": 401.0 + }, + "edge_ratio": 1.1198653976636577, + "edge_lengths_px": [ + 27.658634185791016, + 24.698177337646484, + 25.70992088317871, + 25.806976318359375 + ] + }, + "confidence": 0.3750450731634656 + }, + { + "observation_id": "ff7fa3a5-1e1c-47c8-b41e-a468f01481c8", + "type": "aruco", + "marker_id": 54, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1400.0, + 396.0 + ], + [ + 1375.0, + 402.0 + ], + [ + 1361.0, + 381.0 + ], + [ + 1387.0, + 375.0 + ] + ], + "center_px": [ + 1380.75, + 388.5 + ], + "quality": { + "area_px": 616.5, + "perimeter_px": 102.33028602600098, + "sharpness": { + "laplacian_var": 2346.7203579418347 + }, + "contrast": { + "p05": 25.0, + "p95": 192.7, + "dynamic_range": 167.7, + "mean_gray": 66.85011185682326, + "std_gray": 53.82100081402088 + }, + "geometry": { + "distance_to_center_norm": 0.40600380301475525, + "distance_to_border_px": 375.0 + }, + "edge_ratio": 1.0803764287443052, + "edge_lengths_px": [ + 25.70992088317871, + 25.238859176635742, + 26.68332862854004, + 24.698177337646484 + ] + }, + "confidence": 0.3804229609837889 + }, + { + "observation_id": "21878b2f-8bc9-4bb8-9d32-a5e54220c7b4", + "type": "aruco", + "marker_id": 47, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1351.0, + 406.0 + ], + [ + 1325.0, + 412.0 + ], + [ + 1313.0, + 391.0 + ], + [ + 1339.0, + 385.0 + ] + ], + "center_px": [ + 1332.0, + 398.5 + ], + "quality": { + "area_px": 618.0, + "perimeter_px": 101.74020385742188, + "sharpness": { + "laplacian_var": 3410.693941161093 + }, + "contrast": { + "p05": 22.25, + "p95": 193.75, + "dynamic_range": 171.5, + "mean_gray": 86.33856502242152, + "std_gray": 63.34781694614412 + }, + "geometry": { + "distance_to_center_norm": 0.36134326457977295, + "distance_to_border_px": 385.0 + }, + "edge_ratio": 1.10321985894462, + "edge_lengths_px": [ + 26.68332862854004, + 24.1867733001709, + 26.68332862854004, + 24.1867733001709 + ] + }, + "confidence": 0.3734523056846838 + }, + { + "observation_id": "5b7bcb20-b38d-4b25-a6ff-274eca6f551e", + "type": "aruco", + "marker_id": 53, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 727.0, + 409.0 + ], + [ + 698.0, + 415.0 + ], + [ + 693.0, + 394.0 + ], + [ + 721.0, + 388.0 + ] + ], + "center_px": [ + 709.75, + 401.5 + ], + "quality": { + "area_px": 631.5, + "perimeter_px": 101.67719078063965, + "sharpness": { + "laplacian_var": 3033.371321802803 + }, + "contrast": { + "p05": 7.200000000000003, + "p95": 178.79999999999995, + "dynamic_range": 171.59999999999997, + "mean_gray": 95.20224719101124, + "std_gray": 67.44009072982303 + }, + "geometry": { + "distance_to_center_norm": 0.2596748173236847, + "distance_to_border_px": 388.0 + }, + "edge_ratio": 1.371850697068747, + "edge_lengths_px": [ + 29.614185333251953, + 21.587032318115234, + 28.635643005371094, + 21.840330123901367 + ] + }, + "confidence": 0.30688470757026015 + }, + { + "observation_id": "02916efe-d8cc-47f5-9c71-04e1f763baad", + "type": "aruco", + "marker_id": 96, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1228.0, + 409.0 + ], + [ + 1201.0, + 415.0 + ], + [ + 1191.0, + 394.0 + ], + [ + 1217.0, + 388.0 + ] + ], + "center_px": [ + 1209.25, + 401.5 + ], + "quality": { + "area_px": 619.5, + "perimeter_px": 101.30790901184082, + "sharpness": { + "laplacian_var": 3447.711649992028 + }, + "contrast": { + "p05": 15.0, + "p95": 196.0, + "dynamic_range": 181.0, + "mean_gray": 96.39285714285714, + "std_gray": 70.91595971173722 + }, + "geometry": { + "distance_to_center_norm": 0.2588808238506317, + "distance_to_border_px": 388.0 + }, + "edge_ratio": 1.1891375448271158, + "edge_lengths_px": [ + 27.658634185791016, + 23.25940704345703, + 26.68332862854004, + 23.706539154052734 + ] + }, + "confidence": 0.3473105376216546 + }, + { + "observation_id": "6dd91172-c960-421e-b6c2-6f36ed957820", + "type": "aruco", + "marker_id": 56, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 775.0, + 387.0 + ], + [ + 747.0, + 393.0 + ], + [ + 741.0, + 372.0 + ], + [ + 769.0, + 366.0 + ] + ], + "center_px": [ + 758.0, + 379.5 + ], + "quality": { + "area_px": 624.0, + "perimeter_px": 100.95194625854492, + "sharpness": { + "laplacian_var": 2593.1064803524264 + }, + "contrast": { + "p05": 7.0, + "p95": 170.09999999999997, + "dynamic_range": 163.09999999999997, + "mean_gray": 51.62870159453303, + "std_gray": 56.65096103143944 + }, + "geometry": { + "distance_to_center_norm": 0.23423635959625244, + "distance_to_border_px": 366.0 + }, + "edge_ratio": 1.3111359967051575, + "edge_lengths_px": [ + 28.635643005371094, + 21.840330123901367, + 28.635643005371094, + 21.840330123901367 + ] + }, + "confidence": 0.3172821134080634 + }, + { + "observation_id": "e9388de8-2e84-4716-a371-1c8d17b365ee", + "type": "aruco", + "marker_id": 67, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 653.0, + 391.0 + ], + [ + 625.0, + 397.0 + ], + [ + 620.0, + 377.0 + ], + [ + 648.0, + 370.0 + ] + ], + "center_px": [ + 636.5, + 383.75 + ], + "quality": { + "area_px": 606.5, + "perimeter_px": 99.69994354248047, + "sharpness": { + "laplacian_var": 2516.810951631392 + }, + "contrast": { + "p05": 7.300000000000001, + "p95": 171.0, + "dynamic_range": 163.7, + "mean_gray": 61.51756440281031, + "std_gray": 58.670009938630606 + }, + "geometry": { + "distance_to_center_norm": 0.32616716623306274, + "distance_to_border_px": 370.0 + }, + "edge_ratio": 1.4000000370079995, + "edge_lengths_px": [ + 28.635643005371094, + 20.615528106689453, + 28.861740112304688, + 21.587032318115234 + ] + }, + "confidence": 0.28880951617505063 + }, + { + "observation_id": "44ac64af-1eab-4615-833c-410e9377798a", + "type": "aruco", + "marker_id": 62, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1199.0, + 381.0 + ], + [ + 1173.0, + 387.0 + ], + [ + 1162.0, + 367.0 + ], + [ + 1188.0, + 361.0 + ] + ], + "center_px": [ + 1180.5, + 374.0 + ], + "quality": { + "area_px": 586.0, + "perimeter_px": 99.01750564575195, + "sharpness": { + "laplacian_var": 2834.011088435374 + }, + "contrast": { + "p05": 17.950000000000003, + "p95": 180.0, + "dynamic_range": 162.05, + "mean_gray": 52.75476190476191, + "std_gray": 49.64113454816504 + }, + "geometry": { + "distance_to_center_norm": 0.250578373670578, + "distance_to_border_px": 361.0 + }, + "edge_ratio": 1.1690178636487916, + "edge_lengths_px": [ + 26.68332862854004, + 22.825424194335938, + 26.68332862854004, + 22.825424194335938 + ] + }, + "confidence": 0.3341836586203227 + }, + { + "observation_id": "cdf87545-0f39-4980-8b69-d752f2e294cc", + "type": "aruco", + "marker_id": 46, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 746.0, + 358.0 + ], + [ + 718.0, + 364.0 + ], + [ + 712.0, + 345.0 + ], + [ + 740.0, + 339.0 + ] + ], + "center_px": [ + 729.0, + 351.5 + ], + "quality": { + "area_px": 568.0, + "perimeter_px": 97.12100219726562, + "sharpness": { + "laplacian_var": 3447.705585662581 + }, + "contrast": { + "p05": 7.0, + "p95": 177.0, + "dynamic_range": 170.0, + "mean_gray": 91.20865139949109, + "std_gray": 65.88831035694213 + }, + "geometry": { + "distance_to_center_norm": 0.2706874907016754, + "distance_to_border_px": 339.0 + }, + "edge_ratio": 1.437181779229596, + "edge_lengths_px": [ + 28.635643005371094, + 19.92485809326172, + 28.635643005371094, + 19.92485809326172 + ] + }, + "confidence": 0.26347861637214165 + }, + { + "observation_id": "ad444918-e7c6-45a5-abf7-02f1e876c7e3", + "type": "aruco", + "marker_id": 70, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 599.0, + 332.0 + ], + [ + 571.0, + 338.0 + ], + [ + 566.0, + 319.0 + ], + [ + 594.0, + 313.0 + ] + ], + "center_px": [ + 582.5, + 325.5 + ], + "quality": { + "area_px": 562.0, + "perimeter_px": 96.5650520324707, + "sharpness": { + "laplacian_var": 2093.354235306622 + }, + "contrast": { + "p05": 10.0, + "p95": 166.0, + "dynamic_range": 156.0, + "mean_gray": 80.80927835051547, + "std_gray": 61.11721640189723 + }, + "geometry": { + "distance_to_center_norm": 0.3941926062107086, + "distance_to_border_px": 313.0 + }, + "edge_ratio": 1.4575158303501001, + "edge_lengths_px": [ + 28.635643005371094, + 19.646883010864258, + 28.635643005371094, + 19.646883010864258 + ] + }, + "confidence": 0.2570583858267052 + }, + { + "observation_id": "bc722dfc-bd6b-48bd-a54e-027709c3cdd4", + "type": "aruco", + "marker_id": 98, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 585.0, + 359.0 + ], + [ + 557.0, + 364.0 + ], + [ + 555.0, + 344.0 + ], + [ + 582.0, + 339.0 + ] + ], + "center_px": [ + 569.75, + 351.5 + ], + "quality": { + "area_px": 562.5, + "perimeter_px": 96.22548484802246, + "sharpness": { + "laplacian_var": 2200.7509032904027 + }, + "contrast": { + "p05": 8.0, + "p95": 169.0, + "dynamic_range": 161.0, + "mean_gray": 76.16458852867831, + "std_gray": 61.71176539301854 + }, + "geometry": { + "distance_to_center_norm": 0.3934713900089264, + "distance_to_border_px": 339.0 + }, + "edge_ratio": 1.4150884347002075, + "edge_lengths_px": [ + 28.44292449951172, + 20.099750518798828, + 27.459060668945312, + 20.2237491607666 + ] + }, + "confidence": 0.26500110579975544 + }, + { + "observation_id": "ae047f57-9e37-4b92-816e-6ccb4eeecd3c", + "type": "aruco", + "marker_id": 50, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 706.0, + 335.0 + ], + [ + 678.0, + 340.0 + ], + [ + 674.0, + 321.0 + ], + [ + 701.0, + 315.0 + ] + ], + "center_px": [ + 689.75, + 327.75 + ], + "quality": { + "area_px": 561.0, + "perimeter_px": 96.13357543945312, + "sharpness": { + "laplacian_var": 2450.089888382974 + }, + "contrast": { + "p05": 7.0, + "p95": 169.59999999999997, + "dynamic_range": 162.59999999999997, + "mean_gray": 60.97172236503856, + "std_gray": 58.77670456789171 + }, + "geometry": { + "distance_to_center_norm": 0.3119833171367645, + "distance_to_border_px": 315.0 + }, + "edge_ratio": 1.4648850786535574, + "edge_lengths_px": [ + 28.44292449951172, + 19.416488647460938, + 27.658634185791016, + 20.615528106689453 + ] + }, + "confidence": 0.2553101300914065 + }, + { + "observation_id": "49a41183-63c5-434e-a6a3-e9999e7e476b", + "type": "aruco", + "marker_id": 68, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 753.0, + 324.0 + ], + [ + 726.0, + 330.0 + ], + [ + 721.0, + 310.0 + ], + [ + 747.0, + 305.0 + ] + ], + "center_px": [ + 736.75, + 317.25 + ], + "quality": { + "area_px": 547.0, + "perimeter_px": 94.67542457580566, + "sharpness": { + "laplacian_var": 2970.3302914957544 + }, + "contrast": { + "p05": 6.0, + "p95": 170.2, + "dynamic_range": 164.2, + "mean_gray": 67.44562334217507, + "std_gray": 60.80479562090509 + }, + "geometry": { + "distance_to_center_norm": 0.2863214612007141, + "distance_to_border_px": 305.0 + }, + "edge_ratio": 1.3881471103247025, + "edge_lengths_px": [ + 27.658634185791016, + 20.615528106689453, + 26.476404190063477, + 19.92485809326172 + ] + }, + "confidence": 0.2627003031266385 + }, + { + "observation_id": "746b2408-2206-4202-8e9c-8b6822e73b0a", + "type": "aruco", + "marker_id": 90, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 571.0, + 304.0 + ], + [ + 545.0, + 309.0 + ], + [ + 542.0, + 289.0 + ], + [ + 569.0, + 285.0 + ] + ], + "center_px": [ + 556.75, + 296.75 + ], + "quality": { + "area_px": 528.0, + "perimeter_px": 93.09981346130371, + "sharpness": { + "laplacian_var": 2091.556675900277 + }, + "contrast": { + "p05": 10.0, + "p95": 170.0, + "dynamic_range": 160.0, + "mean_gray": 80.36842105263158, + "std_gray": 62.505166545457236 + }, + "geometry": { + "distance_to_center_norm": 0.4275590181350708, + "distance_to_border_px": 285.0 + }, + "edge_ratio": 1.428669252797482, + "edge_lengths_px": [ + 26.476404190063477, + 20.2237491607666, + 27.294687271118164, + 19.10497283935547 + ] + }, + "confidence": 0.2463831284328039 + }, + { + "observation_id": "ad0e4884-8c5a-4a0e-a472-e501dce51699", + "type": "aruco", + "marker_id": 85, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1297.0, + 268.0 + ], + [ + 1273.0, + 273.0 + ], + [ + 1262.0, + 255.0 + ], + [ + 1287.0, + 250.0 + ] + ], + "center_px": [ + 1279.75, + 261.5 + ], + "quality": { + "area_px": 493.5, + "perimeter_px": 91.69668197631836, + "sharpness": { + "laplacian_var": 2858.200129954516 + }, + "contrast": { + "p05": 20.0, + "p95": 196.95, + "dynamic_range": 176.95, + "mean_gray": 130.57894736842104, + "std_gray": 65.3595402241109 + }, + "geometry": { + "distance_to_center_norm": 0.38497403264045715, + "distance_to_border_px": 250.0 + }, + "edge_ratio": 1.2381513801124164, + "edge_lengths_px": [ + 24.515300750732422, + 21.095022201538086, + 25.495098114013672, + 20.59126091003418 + ] + }, + "confidence": 0.2657187200890806 + }, + { + "observation_id": "1614550e-9760-4c80-a6b4-f5772f8be967", + "type": "aruco", + "marker_id": 214, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 934.0, + 295.0 + ], + [ + 926.0, + 277.0 + ], + [ + 951.0, + 271.0 + ], + [ + 959.0, + 290.0 + ] + ], + "center_px": [ + 942.5, + 283.25 + ], + "quality": { + "area_px": 506.5, + "perimeter_px": 91.51826286315918, + "sharpness": { + "laplacian_var": 4665.71347755102 + }, + "contrast": { + "p05": 12.0, + "p95": 194.0, + "dynamic_range": 182.0, + "mean_gray": 107.30857142857143, + "std_gray": 71.64959723315596 + }, + "geometry": { + "distance_to_center_norm": 0.23364189267158508, + "distance_to_border_px": 271.0 + }, + "edge_ratio": 1.305223468415098, + "edge_lengths_px": [ + 19.697715759277344, + 25.70992088317871, + 20.615528106689453, + 25.495098114013672 + ] + }, + "confidence": 0.25870410304274355 + }, + { + "observation_id": "ee19d6c4-cdce-48d3-9b12-9039dc1e6d79", + "type": "aruco", + "marker_id": 76, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 731.0, + 237.0 + ], + [ + 704.0, + 242.0 + ], + [ + 699.0, + 225.0 + ], + [ + 725.0, + 219.0 + ] + ], + "center_px": [ + 714.75, + 230.75 + ], + "quality": { + "area_px": 494.0, + "perimeter_px": 90.83609962463379, + "sharpness": { + "laplacian_var": 2863.228980716254 + }, + "contrast": { + "p05": 8.0, + "p95": 166.55, + "dynamic_range": 158.55, + "mean_gray": 80.94848484848485, + "std_gray": 59.64414991360375 + }, + "geometry": { + "distance_to_center_norm": 0.35833895206451416, + "distance_to_border_px": 219.0 + }, + "edge_ratio": 1.5496044468234815, + "edge_lengths_px": [ + 27.459060668945312, + 17.72004508972168, + 26.68332862854004, + 18.973665237426758 + ] + }, + "confidence": 0.21252735432479583 + }, + { + "observation_id": "3a859491-82d4-4018-803b-7f151f3a22f6", + "type": "aruco", + "marker_id": 105, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1241.0, + 262.0 + ], + [ + 1217.0, + 268.0 + ], + [ + 1206.0, + 250.0 + ], + [ + 1230.0, + 245.0 + ] + ], + "center_px": [ + 1223.5, + 256.25 + ], + "quality": { + "area_px": 480.5, + "perimeter_px": 90.59741401672363, + "sharpness": { + "laplacian_var": 2226.045162055841 + }, + "contrast": { + "p05": 21.0, + "p95": 176.0, + "dynamic_range": 155.0, + "mean_gray": 54.546827794561935, + "std_gray": 48.03674399795461 + }, + "geometry": { + "distance_to_center_norm": 0.3515617847442627, + "distance_to_border_px": 245.0 + }, + "edge_ratio": 1.2217540410377785, + "edge_lengths_px": [ + 24.73863410949707, + 21.095022201538086, + 24.515300750732422, + 20.248456954956055 + ] + }, + "confidence": 0.2621913434075788 + }, + { + "observation_id": "94a2f18d-6fa3-476f-9f5f-f03ab8ae2d20", + "type": "aruco", + "marker_id": 91, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 546.0, + 244.0 + ], + [ + 520.0, + 249.0 + ], + [ + 517.0, + 231.0 + ], + [ + 543.0, + 226.0 + ] + ], + "center_px": [ + 531.5, + 237.5 + ], + "quality": { + "area_px": 483.0, + "perimeter_px": 89.44938278198242, + "sharpness": { + "laplacian_var": 1535.2604647583876 + }, + "contrast": { + "p05": 12.0, + "p95": 163.0, + "dynamic_range": 151.0, + "mean_gray": 73.54385964912281, + "std_gray": 58.901365717177754 + }, + "geometry": { + "distance_to_center_norm": 0.47620469331741333, + "distance_to_border_px": 226.0 + }, + "edge_ratio": 1.4508980431170235, + "edge_lengths_px": [ + 26.476404190063477, + 18.248287200927734, + 26.476404190063477, + 18.248287200927734 + ] + }, + "confidence": 0.22193151443517992 + }, + { + "observation_id": "b16e466a-8d82-4c2d-91ed-4b3dc76b3f75", + "type": "aruco", + "marker_id": 208, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 998.0, + 202.0 + ], + [ + 990.0, + 186.0 + ], + [ + 1014.0, + 181.0 + ], + [ + 1023.0, + 198.0 + ] + ], + "center_px": [ + 1006.25, + 191.75 + ], + "quality": { + "area_px": 442.5, + "perimeter_px": 86.95720672607422, + "sharpness": { + "laplacian_var": 3844.194577873629 + }, + "contrast": { + "p05": 14.0, + "p95": 189.0, + "dynamic_range": 175.0, + "mean_gray": 82.18811881188118, + "std_gray": 66.75768400483089 + }, + "geometry": { + "distance_to_center_norm": 0.3189491927623749, + "distance_to_border_px": 181.0 + }, + "edge_ratio": 1.4153179704457386, + "edge_lengths_px": [ + 17.8885440826416, + 24.515300750732422, + 19.235383987426758, + 25.317977905273438 + ] + }, + "confidence": 0.20843372737441682 + }, + { + "observation_id": "ed984186-0674-4dcc-8dfc-eb3c87b91cbd", + "type": "aruco", + "marker_id": 59, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1209.0, + 186.0 + ], + [ + 1186.0, + 191.0 + ], + [ + 1176.0, + 175.0 + ], + [ + 1199.0, + 170.0 + ] + ], + "center_px": [ + 1192.5, + 180.5 + ], + "quality": { + "area_px": 418.0, + "perimeter_px": 84.81033325195312, + "sharpness": { + "laplacian_var": 2881.182564458319 + }, + "contrast": { + "p05": 23.8, + "p95": 191.0, + "dynamic_range": 167.2, + "mean_gray": 118.27956989247312, + "std_gray": 63.92424373779807 + }, + "geometry": { + "distance_to_center_norm": 0.38869673013687134, + "distance_to_border_px": 170.0 + }, + "edge_ratio": 1.2474693815742148, + "edge_lengths_px": [ + 23.53720474243164, + 18.867961883544922, + 23.53720474243164, + 18.867961883544922 + ] + }, + "confidence": 0.22338557625759903 + }, + { + "observation_id": "5795194c-e60c-427c-916b-19acf5a3c9db", + "type": "aruco", + "marker_id": 57, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1303.0, + 185.0 + ], + [ + 1279.0, + 190.0 + ], + [ + 1269.0, + 174.0 + ], + [ + 1292.0, + 169.0 + ] + ], + "center_px": [ + 1285.75, + 179.5 + ], + "quality": { + "area_px": 428.5, + "perimeter_px": 86.33695602416992, + "sharpness": { + "laplacian_var": 4777.307958477509 + }, + "contrast": { + "p05": 18.0, + "p95": 197.0, + "dynamic_range": 179.0, + "mean_gray": 97.32525951557093, + "std_gray": 64.06315616541093 + }, + "geometry": { + "distance_to_center_norm": 0.4411204755306244, + "distance_to_border_px": 169.0 + }, + "edge_ratio": 1.2993083673818868, + "edge_lengths_px": [ + 24.515300750732422, + 18.867961883544922, + 23.53720474243164, + 19.416488647460938 + ] + }, + "confidence": 0.2198605610785733 + }, + { + "observation_id": "580dfc41-809d-4e89-b376-7e2f999c51f7", + "type": "aruco", + "marker_id": 102, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1145.0, + 181.0 + ], + [ + 1121.0, + 186.0 + ], + [ + 1112.0, + 169.0 + ], + [ + 1135.0, + 165.0 + ] + ], + "center_px": [ + 1128.25, + 175.25 + ], + "quality": { + "area_px": 430.5, + "perimeter_px": 85.96388244628906, + "sharpness": { + "laplacian_var": 4360.601803626543 + }, + "contrast": { + "p05": 14.700000000000003, + "p95": 195.64999999999998, + "dynamic_range": 180.95, + "mean_gray": 116.69791666666667, + "std_gray": 65.70902606773923 + }, + "geometry": { + "distance_to_center_norm": 0.3646860122680664, + "distance_to_border_px": 165.0 + }, + "edge_ratio": 1.2993083673818868, + "edge_lengths_px": [ + 24.515300750732422, + 19.235383987426758, + 23.34523582458496, + 18.867961883544922 + ] + }, + "confidence": 0.22088674806143707 + }, + { + "observation_id": "04e859ea-7aa4-4920-8029-d65811a34e23", + "type": "aruco", + "marker_id": 92, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1108.0, + 192.0 + ], + [ + 1085.0, + 197.0 + ], + [ + 1076.0, + 180.0 + ], + [ + 1100.0, + 176.0 + ] + ], + "center_px": [ + 1092.25, + 186.25 + ], + "quality": { + "area_px": 426.0, + "perimeter_px": 84.99218368530273, + "sharpness": { + "laplacian_var": 3499.2978292884422 + }, + "contrast": { + "p05": 15.0, + "p95": 192.59999999999997, + "dynamic_range": 177.59999999999997, + "mean_gray": 78.03806228373702, + "std_gray": 63.508509124316184 + }, + "geometry": { + "distance_to_center_norm": 0.3428766429424286, + "distance_to_border_px": 176.0 + }, + "edge_ratio": 1.3601470729198533, + "edge_lengths_px": [ + 23.53720474243164, + 19.235383987426758, + 24.331050872802734, + 17.8885440826416 + ] + }, + "confidence": 0.20880094929023507 + }, + { + "observation_id": "e8813d9a-aaf4-47d0-9241-f345e732f003", + "type": "aruco", + "marker_id": 100, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 699.0, + 154.0 + ], + [ + 674.0, + 160.0 + ], + [ + 670.0, + 144.0 + ], + [ + 694.0, + 139.0 + ] + ], + "center_px": [ + 684.25, + 149.25 + ], + "quality": { + "area_px": 404.5, + "perimeter_px": 82.52903175354004, + "sharpness": { + "laplacian_var": 2379.944277487099 + }, + "contrast": { + "p05": 13.0, + "p95": 163.59999999999997, + "dynamic_range": 150.59999999999997, + "mean_gray": 86.69204152249135, + "std_gray": 58.19902589273576 + }, + "geometry": { + "distance_to_center_norm": 0.4341994822025299, + "distance_to_border_px": 139.0 + }, + "edge_ratio": 1.6260381983905128, + "edge_lengths_px": [ + 25.70992088317871, + 16.492422103881836, + 24.515300750732422, + 15.81138801574707 + ] + }, + "confidence": 0.1658427624477632 + }, + { + "observation_id": "1984f27d-3ac0-44dc-92f4-d49e3ce4f386", + "type": "aruco", + "marker_id": 217, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 868.0, + 147.0 + ], + [ + 864.0, + 133.0 + ], + [ + 889.0, + 129.0 + ], + [ + 894.0, + 144.0 + ] + ], + "center_px": [ + 878.75, + 138.25 + ], + "quality": { + "area_px": 385.5, + "perimeter_px": 81.86209011077881, + "sharpness": { + "laplacian_var": 4656.3828800062565 + }, + "contrast": { + "p05": 14.0, + "p95": 185.2, + "dynamic_range": 171.2, + "mean_gray": 81.46209386281589, + "std_gray": 60.808299475864516 + }, + "geometry": { + "distance_to_center_norm": 0.37212976813316345, + "distance_to_border_px": 129.0 + }, + "edge_ratio": 1.7975349855971807, + "edge_lengths_px": [ + 14.560219764709473, + 25.317977905273438, + 15.81138801574707, + 26.172504425048828 + ] + }, + "confidence": 0.14297357328743115 + }, + { + "observation_id": "e4067180-5a39-4c31-8063-50a2696f952b", + "type": "aruco", + "marker_id": 48, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1223.0, + 136.0 + ], + [ + 1201.0, + 140.0 + ], + [ + 1192.0, + 125.0 + ], + [ + 1214.0, + 120.0 + ] + ], + "center_px": [ + 1207.5, + 130.25 + ], + "quality": { + "area_px": 381.5, + "perimeter_px": 80.77212142944336, + "sharpness": { + "laplacian_var": 3484.134374453703 + }, + "contrast": { + "p05": 15.0, + "p95": 190.95, + "dynamic_range": 175.95, + "mean_gray": 79.82824427480917, + "std_gray": 61.426343622346266 + }, + "geometry": { + "distance_to_center_norm": 0.4346052408218384, + "distance_to_border_px": 120.0 + }, + "edge_ratio": 1.2897281452322868, + "edge_lengths_px": [ + 22.360679626464844, + 17.492855072021484, + 22.56102752685547, + 18.357559204101562 + ] + }, + "confidence": 0.19719918051995877 + }, + { + "observation_id": "2eb4fe8f-474b-4617-bd9f-b52e9938ae85", + "type": "aruco", + "marker_id": 71, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1165.0, + 104.0 + ], + [ + 1142.0, + 108.0 + ], + [ + 1134.0, + 93.0 + ], + [ + 1156.0, + 89.0 + ] + ], + "center_px": [ + 1149.25, + 98.5 + ], + "quality": { + "area_px": 371.5, + "perimeter_px": 80.19877052307129, + "sharpness": { + "laplacian_var": 2727.6768977764264 + }, + "contrast": { + "p05": 19.8, + "p95": 188.0, + "dynamic_range": 168.2, + "mean_gray": 110.6728624535316, + "std_gray": 63.35869480814366 + }, + "geometry": { + "distance_to_center_norm": 0.4361070990562439, + "distance_to_border_px": 89.0 + }, + "edge_ratio": 1.3732491661520565, + "edge_lengths_px": [ + 23.34523582458496, + 17.0, + 22.360679626464844, + 17.492855072021484 + ] + }, + "confidence": 0.18035085894910577 + }, + { + "observation_id": "8ef76700-620c-4887-aa38-8c3768178335", + "type": "aruco", + "marker_id": 94, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 683.0, + 108.0 + ], + [ + 658.0, + 111.0 + ], + [ + 655.0, + 97.0 + ], + [ + 679.0, + 93.0 + ] + ], + "center_px": [ + 668.75, + 102.25 + ], + "quality": { + "area_px": 367.5, + "perimeter_px": 79.35240459442139, + "sharpness": { + "laplacian_var": 1760.1924517350508 + }, + "contrast": { + "p05": 6.4, + "p95": 143.0, + "dynamic_range": 136.6, + "mean_gray": 57.12267657992565, + "std_gray": 47.316656595208954 + }, + "geometry": { + "distance_to_center_norm": 0.47735708951950073, + "distance_to_border_px": 93.0 + }, + "edge_ratio": 1.7586025586339173, + "edge_lengths_px": [ + 25.179357528686523, + 14.317821502685547, + 24.331050872802734, + 15.524174690246582 + ] + }, + "confidence": 0.13931516180114967 + }, + { + "observation_id": "530ba613-75ab-4d85-8a21-dabc80b757cb", + "type": "aruco", + "marker_id": 63, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1109.0, + 95.0 + ], + [ + 1087.0, + 99.0 + ], + [ + 1079.0, + 84.0 + ], + [ + 1101.0, + 80.0 + ] + ], + "center_px": [ + 1094.0, + 89.5 + ], + "quality": { + "area_px": 362.0, + "perimeter_px": 78.72135925292969, + "sharpness": { + "laplacian_var": 3106.7753071405864 + }, + "contrast": { + "p05": 13.4, + "p95": 185.0, + "dynamic_range": 171.6, + "mean_gray": 66.42379182156134, + "std_gray": 57.253161394907345 + }, + "geometry": { + "distance_to_center_norm": 0.4267148971557617, + "distance_to_border_px": 80.0 + }, + "edge_ratio": 1.3153340956744026, + "edge_lengths_px": [ + 22.360679626464844, + 17.0, + 22.360679626464844, + 17.0 + ] + }, + "confidence": 0.18347683233254594 + }, + { + "observation_id": "2ac9f0d7-0db1-45b7-99f8-a3fcd1ab9e23", + "type": "aruco", + "marker_id": 65, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 1157.0, + 68.0 + ], + [ + 1136.0, + 72.0 + ], + [ + 1127.0, + 58.0 + ], + [ + 1148.0, + 54.0 + ] + ], + "center_px": [ + 1142.0, + 63.0 + ], + "quality": { + "area_px": 330.0, + "perimeter_px": 76.041748046875, + "sharpness": { + "laplacian_var": 2945.7437721214587 + }, + "contrast": { + "p05": 22.0, + "p95": 186.89999999999998, + "dynamic_range": 164.89999999999998, + "mean_gray": 98.04938271604938, + "std_gray": 62.17886741584236 + }, + "geometry": { + "distance_to_center_norm": 0.4635164439678192, + "distance_to_border_px": 54.0 + }, + "edge_ratio": 1.2844530145975923, + "edge_lengths_px": [ + 21.3775577545166, + 16.6433162689209, + 21.3775577545166, + 16.6433162689209 + ] + }, + "confidence": 0.1712791339969131 + }, + { + "observation_id": "60794eb9-b7fa-4f57-b2d5-6b0fe21d384e", + "type": "aruco", + "marker_id": 49, + "marker_size_m": 0.025, + "image_points_px": [ + [ + 673.0, + 25.0 + ], + [ + 650.0, + 29.0 + ], + [ + 647.0, + 14.0 + ], + [ + 669.0, + 12.0 + ] + ], + "center_px": [ + 659.75, + 20.0 + ], + "quality": { + "area_px": 325.5, + "perimeter_px": 74.33448600769043, + "sharpness": { + "laplacian_var": 730.8473198838113 + }, + "contrast": { + "p05": 8.0, + "p95": 106.5, + "dynamic_range": 98.5, + "mean_gray": 33.91235059760956, + "std_gray": 31.75730124119638 + }, + "geometry": { + "distance_to_center_norm": 0.5451506972312927, + "distance_to_border_px": 12.0 + }, + "edge_ratio": 1.7163758181079802, + "edge_lengths_px": [ + 23.34523582458496, + 15.29705810546875, + 22.090721130371094, + 13.601470947265625 + ] + }, + "confidence": 0.03034300498209627 + } + ], + "rejected_candidates": [ + { + "image_points_px": [ + [ + 1707.0, + 230.0 + ], + [ + 1823.0, + 419.0 + ], + [ + 1780.0, + 406.0 + ], + [ + 1688.0, + 261.0 + ] + ], + "center_px": [ + 1749.5, + 329.0 + ], + "area_px": 6113.0 + }, + { + "image_points_px": [ + [ + 1118.0, + 492.0 + ], + [ + 1146.0, + 513.0 + ], + [ + 1215.0, + 659.0 + ], + [ + 1210.0, + 682.0 + ] + ], + "center_px": [ + 1172.25, + 586.5 + ], + "area_px": 2852.5 + }, + { + "image_points_px": [ + [ + 911.0, + 166.0 + ], + [ + 921.0, + 185.0 + ], + [ + 891.0, + 191.0 + ], + [ + 882.0, + 171.0 + ] + ], + "center_px": [ + 901.25, + 178.25 + ], + "area_px": 627.5 + }, + { + "image_points_px": [ + [ + 1023.0, + 575.0 + ], + [ + 1038.0, + 608.0 + ], + [ + 1039.0, + 620.0 + ], + [ + 1022.0, + 581.0 + ] + ], + "center_px": [ + 1030.5, + 596.0 + ], + "area_px": 144.0 + }, + { + "image_points_px": [ + [ + 1146.0, + 875.0 + ], + [ + 1102.0, + 887.0 + ], + [ + 1106.0, + 881.0 + ], + [ + 1140.0, + 873.0 + ] + ], + "center_px": [ + 1123.5, + 879.0 + ], + "area_px": 166.0 + }, + { + "image_points_px": [ + [ + 550.0, + 194.0 + ], + [ + 552.0, + 210.0 + ], + [ + 526.0, + 215.0 + ], + [ + 524.0, + 198.0 + ] + ], + "center_px": [ + 538.0, + 204.25 + ], + "area_px": 438.0 + }, + { + "image_points_px": [ + [ + 621.0, + 137.0 + ], + [ + 624.0, + 153.0 + ], + [ + 600.0, + 157.0 + ], + [ + 597.0, + 141.0 + ] + ], + "center_px": [ + 610.5, + 147.0 + ], + "area_px": 396.0 + }, + { + "image_points_px": [ + [ + 1101.0, + 885.0 + ], + [ + 1098.0, + 890.0 + ], + [ + 1066.0, + 897.0 + ], + [ + 1078.0, + 890.0 + ] + ], + "center_px": [ + 1085.75, + 890.5 + ], + "area_px": 120.0 + }, + { + "image_points_px": [ + [ + 1193.0, + 48.0 + ], + [ + 1171.0, + 52.0 + ], + [ + 1163.0, + 38.0 + ], + [ + 1184.0, + 35.0 + ] + ], + "center_px": [ + 1177.75, + 43.25 + ], + "area_px": 320.0 + }, + { + "image_points_px": [ + [ + 1141.0, + 17.0 + ], + [ + 1162.0, + 14.0 + ], + [ + 1171.0, + 26.0 + ], + [ + 1149.0, + 30.0 + ] + ], + "center_px": [ + 1155.75, + 21.75 + ], + "area_px": 298.5 + } + ] +} \ No newline at end of file diff --git a/test/temp/cam2_hires_1781074183695_camera_pose.json b/test/temp/cam2_hires_1781074183695_camera_pose.json new file mode 100644 index 0000000..c873c0f --- /dev/null +++ b/test/temp/cam2_hires_1781074183695_camera_pose.json @@ -0,0 +1,929 @@ +{ + "schema_version": "1.0", + "created_utc": "2026-06-10T10:41:08Z", + "source": { + "detection_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\test\\temp\\cam2_hires_1781074183695_aruco_detection.json", + "robot_json": "C:\\Users\\kech\\SynologyDrive\\2026-AppServer-AppRobot\\appRobotRendering\\data\\testPictures\\robot_1781069752019.json" + }, + "camera": { + "camera_id": "cam2", + "camera_matrix": [ + [ + 1365.456298828125, + 0.0, + 916.1585083007812 + ], + [ + 0.0, + 1364.6678466796875, + 557.509033203125 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "distortion_coefficients": [ + 0.042227353900671005, + -0.2937094569206238, + -0.000249923556111753, + -0.0038161256816238165, + 0.5750380158424377 + ] + }, + "estimation": { + "method": "single_camera_marker_center_lm", + "description": "Rigid init from per-marker pose estimates, followed by LM on normalized marker-center reprojection residuals.", + "marker_size_m": 0.025, + "num_used_markers": 52, + "used_marker_ids": [ + 61, + 75, + 83, + 77, + 52, + 101, + 74, + 64, + 81, + 69, + 73, + 82, + 58, + 103, + 51, + 95, + 86, + 66, + 84, + 79, + 60, + 55, + 72, + 97, + 54, + 47, + 53, + 96, + 56, + 67, + 62, + 46, + 70, + 98, + 50, + 68, + 90, + 85, + 76, + 105, + 91, + 59, + 57, + 102, + 92, + 100, + 48, + 71, + 94, + 63, + 65, + 49 + ], + "history": { + "iters": [ + 0, + 1, + 2, + 3 + ], + "rms": [ + 0.011984790416146193, + 0.000748124316348008, + 0.0004621256111282346, + 0.0004621231525591624 + ], + "lambda": [ + 0.001, + 0.0005, + 0.00025, + 0.000125 + ] + }, + "residual_rms_px": 0.8931551476129429, + "residual_median_px": 0.6460402304256327, + "residual_max_px": 2.4510862935844595, + "sigma2_normalized": 2.2663277596682428e-07 + }, + "camera_pose": { + "world_to_camera": { + "rotation_matrix": [ + [ + -0.2814928889274597, + -0.959563136100769, + -0.0006156218587420881 + ], + [ + -0.7972064018249512, + 0.2342216819524765, + -0.5564190149307251 + ], + [ + 0.5340633988380432, + -0.15613722801208496, + -0.8309016227722168 + ] + ], + "translation_m": [ + 0.16960781812667847, + 0.19306619465351105, + 0.8885678648948669 + ], + "rvec_rad": [ + 1.6251837047350812, + -2.1708495805581816, + 0.659184269040976 + ] + }, + "camera_in_world": { + "position_m": [ + -0.27289459109306335, + 0.2562676668167114, + 0.8458425998687744 + ], + "position_mm": [ + -272.89459228515625, + 256.2676696777344, + 845.8425903320312 + ], + "orientation_deg": { + "roll": -169.35748291015625, + "pitch": -32.28041458129883, + "yaw": -109.44808197021484 + } + }, + "uncertainty": { + "pose_covariance_6x6": [ + [ + 1.5063737842098413e-07, + -8.335910592336172e-08, + -3.064318777732698e-08, + 1.296037575122895e-09, + 3.825991719294466e-08, + 7.338024221745554e-08 + ], + [ + -8.335910592336e-08, + 1.9572401471349003e-07, + 4.902855952330072e-08, + -3.2496406832607055e-08, + -3.877361500380251e-08, + -1.0148736472989194e-07 + ], + [ + -3.064318777732759e-08, + 4.9028559523301544e-08, + 6.795918188810849e-07, + 5.7317179496685195e-08, + -6.365580225321214e-08, + -1.6150762608367604e-07 + ], + [ + 1.2960375751224031e-09, + -3.249640683260679e-08, + 5.731717949668508e-08, + 1.832623332284755e-08, + -1.018243938937513e-09, + 2.879104601402566e-09 + ], + [ + 3.82599171929445e-08, + -3.877361500380285e-08, + -6.365580225321209e-08, + -1.0182439389374238e-09, + 2.1148437851966976e-08, + 3.4895901940506535e-08 + ], + [ + 7.338024221745488e-08, + -1.0148736472989244e-07, + -1.6150762608367557e-07, + 2.8791046014027618e-09, + 3.489590194050643e-08, + 1.4353963669281618e-07 + ] + ], + "parameter_std": { + "rvec_std_deg": [ + 0.02223765595627221, + 0.02534805788125073, + 0.04723312755300941 + ], + "tvec_std_m": [ + 0.00013537441901204065, + 0.00014542502484774406, + 0.00037886625172059885 + ] + }, + "camera_center_std_m": [ + 0.0003990009598470209, + 0.000607790728802823, + 0.0005472769194608717 + ], + "camera_center_std_mm": [ + 0.39900095984702094, + 0.6077907288028229, + 0.5472769194608716 + ], + "orientation_std_deg": { + "roll": 0.05086200168889332, + "pitch": 0.02925593897609651, + "yaw": 0.017037341044152724 + } + } + }, + "observations": { + "markers": [ + { + "marker_id": 61, + "observed_center_px": [ + 678.75, + 1048.25 + ], + "projected_center_px": [ + 678.7637939453125, + 1049.9586181640625 + ], + "reprojection_error_px": 1.7086738435089337, + "confidence": 0.1298805194008731 + }, + { + "marker_id": 75, + "observed_center_px": [ + 901.0, + 987.75 + ], + "projected_center_px": [ + 900.0938110351562, + 989.9572143554688 + ], + "reprojection_error_px": 2.3859953166324357, + "confidence": 0.9054705142666829 + }, + { + "marker_id": 83, + "observed_center_px": [ + 654.75, + 950.0 + ], + "projected_center_px": [ + 654.1168823242188, + 949.4424438476562 + ], + "reprojection_error_px": 0.8436272010805596, + "confidence": 0.8383768107463128 + }, + { + "marker_id": 77, + "observed_center_px": [ + 887.0, + 923.0 + ], + "projected_center_px": [ + 886.1251831054688, + 923.5886840820312 + ], + "reprojection_error_px": 1.0544446630308655, + "confidence": 0.8372378253881325 + }, + { + "marker_id": 52, + "observed_center_px": [ + 831.75, + 824.75 + ], + "projected_center_px": [ + 831.6743774414062, + 824.7091674804688 + ], + "reprojection_error_px": 0.08594222489286081, + "confidence": 0.7438876362292666 + }, + { + "marker_id": 101, + "observed_center_px": [ + 694.5, + 830.0 + ], + "projected_center_px": [ + 694.2298583984375, + 829.5364379882812 + ], + "reprojection_error_px": 0.5365316613243687, + "confidence": 0.6912989810207925 + }, + { + "marker_id": 74, + "observed_center_px": [ + 923.0, + 801.0 + ], + "projected_center_px": [ + 922.6452026367188, + 800.9827270507812 + ], + "reprojection_error_px": 0.3552175724341925, + "confidence": 0.7063299460473174 + }, + { + "marker_id": 64, + "observed_center_px": [ + 1438.75, + 820.75 + ], + "projected_center_px": [ + 1437.7794189453125, + 823.000732421875 + ], + "reprojection_error_px": 2.4510862935844595, + "confidence": 0.6757268014633911 + }, + { + "marker_id": 81, + "observed_center_px": [ + 873.25, + 761.5 + ], + "projected_center_px": [ + 873.4539794921875, + 761.24560546875 + ], + "reprojection_error_px": 0.32607393450409006, + "confidence": 0.6474169705665015 + }, + { + "marker_id": 69, + "observed_center_px": [ + 1536.0, + 750.25 + ], + "projected_center_px": [ + 1536.01904296875, + 750.9163208007812 + ], + "reprojection_error_px": 0.6665928624074666, + "confidence": 0.6112865494409404 + }, + { + "marker_id": 73, + "observed_center_px": [ + 617.75, + 711.5 + ], + "projected_center_px": [ + 618.2041015625, + 710.8424682617188 + ], + "reprojection_error_px": 0.7990971254560385, + "confidence": 0.532833258968179 + }, + { + "marker_id": 82, + "observed_center_px": [ + 667.75, + 701.75 + ], + "projected_center_px": [ + 668.7314453125, + 701.2522583007812 + ], + "reprojection_error_px": 1.100446137059598, + "confidence": 0.552022973773092 + }, + { + "marker_id": 58, + "observed_center_px": [ + 1427.0, + 721.75 + ], + "projected_center_px": [ + 1427.1419677734375, + 721.8328247070312 + ], + "reprojection_error_px": 0.16436173760828193, + "confidence": 0.6045651933799014 + }, + { + "marker_id": 103, + "observed_center_px": [ + 1353.0, + 667.25 + ], + "projected_center_px": [ + 1353.5479736328125, + 666.92724609375 + ], + "reprojection_error_px": 0.6359600508344548, + "confidence": 0.602350818516097 + }, + { + "marker_id": 51, + "observed_center_px": [ + 1297.0, + 603.25 + ], + "projected_center_px": [ + 1297.596435546875, + 602.8515014648438 + ], + "reprojection_error_px": 0.7173119573085042, + "confidence": 0.5578670422625701 + }, + { + "marker_id": 95, + "observed_center_px": [ + 1407.5, + 552.25 + ], + "projected_center_px": [ + 1407.8885498046875, + 551.9653930664062 + ], + "reprojection_error_px": 0.48163477591670184, + "confidence": 0.4802479007916047 + }, + { + "marker_id": 86, + "observed_center_px": [ + 640.25, + 541.5 + ], + "projected_center_px": [ + 641.0107421875, + 541.1596069335938 + ], + "reprojection_error_px": 0.8334243309981626, + "confidence": 0.3964057961714926 + }, + { + "marker_id": 66, + "observed_center_px": [ + 1494.25, + 502.25 + ], + "projected_center_px": [ + 1494.6441650390625, + 501.90594482421875 + ], + "reprojection_error_px": 0.5232017220929314, + "confidence": 0.45475830315312954 + }, + { + "marker_id": 84, + "observed_center_px": [ + 672.5, + 487.0 + ], + "projected_center_px": [ + 673.2105102539062, + 487.0281066894531 + ], + "reprojection_error_px": 0.7110659652225932, + "confidence": 0.36929083534733026 + }, + { + "marker_id": 79, + "observed_center_px": [ + 1206.0, + 461.25 + ], + "projected_center_px": [ + 1206.052001953125, + 461.0175476074219 + ], + "reprojection_error_px": 0.2381980645263715, + "confidence": 0.4098258244985548 + }, + { + "marker_id": 60, + "observed_center_px": [ + 635.0, + 468.5 + ], + "projected_center_px": [ + 635.5394897460938, + 468.3836669921875 + ], + "reprojection_error_px": 0.5518899843691694, + "confidence": 0.36321795262481693 + }, + { + "marker_id": 55, + "observed_center_px": [ + 1338.0, + 459.75 + ], + "projected_center_px": [ + 1338.171875, + 459.31719970703125 + ], + "reprojection_error_px": 0.46567919130967816, + "confidence": 0.4226507579685383 + }, + { + "marker_id": 72, + "observed_center_px": [ + 742.5, + 437.25 + ], + "projected_center_px": [ + 743.2981567382812, + 437.74658203125 + ], + "reprojection_error_px": 0.9400254744548894, + "confidence": 0.32333953337853494 + }, + { + "marker_id": 97, + "observed_center_px": [ + 1433.5, + 414.5 + ], + "projected_center_px": [ + 1433.2255859375, + 414.3753967285156 + ], + "reprojection_error_px": 0.3013785874317596, + "confidence": 0.3750450731634656 + }, + { + "marker_id": 54, + "observed_center_px": [ + 1380.75, + 388.5 + ], + "projected_center_px": [ + 1380.5369873046875, + 388.4062805175781 + ], + "reprojection_error_px": 0.2327181766637924, + "confidence": 0.3804229609837889 + }, + { + "marker_id": 47, + "observed_center_px": [ + 1332.0, + 398.5 + ], + "projected_center_px": [ + 1331.9332275390625, + 397.9681701660156 + ], + "reprojection_error_px": 0.536005162153778, + "confidence": 0.3734523056846838 + }, + { + "marker_id": 53, + "observed_center_px": [ + 709.75, + 401.5 + ], + "projected_center_px": [ + 710.3843383789062, + 401.6002502441406 + ], + "reprojection_error_px": 0.6422112506050203, + "confidence": 0.30688470757026015 + }, + { + "marker_id": 96, + "observed_center_px": [ + 1209.25, + 401.5 + ], + "projected_center_px": [ + 1209.242919921875, + 401.32574462890625 + ], + "reprojection_error_px": 0.1743991452423911, + "confidence": 0.3473105376216546 + }, + { + "marker_id": 56, + "observed_center_px": [ + 758.0, + 379.5 + ], + "projected_center_px": [ + 758.4189453125, + 379.59234619140625 + ], + "reprojection_error_px": 0.4290023239248972, + "confidence": 0.3172821134080634 + }, + { + "marker_id": 67, + "observed_center_px": [ + 636.5, + 383.75 + ], + "projected_center_px": [ + 637.0377197265625, + 383.2904968261719 + ], + "reprojection_error_px": 0.7073087523087564, + "confidence": 0.28880951617505063 + }, + { + "marker_id": 62, + "observed_center_px": [ + 1180.5, + 374.0 + ], + "projected_center_px": [ + 1180.4544677734375, + 373.8306579589844 + ], + "reprojection_error_px": 0.17535652400488683, + "confidence": 0.3341836586203227 + }, + { + "marker_id": 46, + "observed_center_px": [ + 729.0, + 351.5 + ], + "projected_center_px": [ + 729.3017578125, + 351.3228759765625 + ], + "reprojection_error_px": 0.3499009818269637, + "confidence": 0.26347861637214165 + }, + { + "marker_id": 70, + "observed_center_px": [ + 582.5, + 325.5 + ], + "projected_center_px": [ + 582.8350219726562, + 325.0391540527344 + ], + "reprojection_error_px": 0.5697532003189067, + "confidence": 0.2570583858267052 + }, + { + "marker_id": 98, + "observed_center_px": [ + 569.75, + 351.5 + ], + "projected_center_px": [ + 570.3342895507812, + 350.63134765625 + ], + "reprojection_error_px": 1.046876866424377, + "confidence": 0.26500110579975544 + }, + { + "marker_id": 50, + "observed_center_px": [ + 689.75, + 327.75 + ], + "projected_center_px": [ + 690.3238525390625, + 327.2581481933594 + ], + "reprojection_error_px": 0.7557942420289565, + "confidence": 0.2553101300914065 + }, + { + "marker_id": 68, + "observed_center_px": [ + 736.75, + 317.25 + ], + "projected_center_px": [ + 737.05517578125, + 317.24169921875 + ], + "reprojection_error_px": 0.30528865100247043, + "confidence": 0.2627003031266385 + }, + { + "marker_id": 90, + "observed_center_px": [ + 556.75, + 296.75 + ], + "projected_center_px": [ + 557.29150390625, + 295.6229553222656 + ], + "reprojection_error_px": 1.2503824159405754, + "confidence": 0.2463831284328039 + }, + { + "marker_id": 85, + "observed_center_px": [ + 1279.75, + 261.5 + ], + "projected_center_px": [ + 1279.4200439453125, + 260.87799072265625 + ], + "reprojection_error_px": 0.7041069088758003, + "confidence": 0.2657187200890806 + }, + { + "marker_id": 76, + "observed_center_px": [ + 714.75, + 230.75 + ], + "projected_center_px": [ + 715.0855102539062, + 230.44677734375 + ], + "reprojection_error_px": 0.45222904566109196, + "confidence": 0.21252735432479583 + }, + { + "marker_id": 105, + "observed_center_px": [ + 1223.5, + 256.25 + ], + "projected_center_px": [ + 1222.8546142578125, + 255.816650390625 + ], + "reprojection_error_px": 0.7773767684748337, + "confidence": 0.2621913434075788 + }, + { + "marker_id": 91, + "observed_center_px": [ + 531.5, + 237.5 + ], + "projected_center_px": [ + 531.8168334960938, + 236.93191528320312 + ], + "reprojection_error_px": 0.6504642263070076, + "confidence": 0.22193151443517992 + }, + { + "marker_id": 59, + "observed_center_px": [ + 1192.5, + 180.5 + ], + "projected_center_px": [ + 1191.9222412109375, + 180.2024688720703 + ], + "reprojection_error_px": 0.6498692102462452, + "confidence": 0.22338557625759903 + }, + { + "marker_id": 57, + "observed_center_px": [ + 1285.75, + 179.5 + ], + "projected_center_px": [ + 1284.944091796875, + 179.25888061523438 + ], + "reprojection_error_px": 0.8412054383882214, + "confidence": 0.2198605610785733 + }, + { + "marker_id": 102, + "observed_center_px": [ + 1128.25, + 175.25 + ], + "projected_center_px": [ + 1127.7625732421875, + 175.20362854003906 + ], + "reprojection_error_px": 0.4896275692100215, + "confidence": 0.22088674806143707 + }, + { + "marker_id": 92, + "observed_center_px": [ + 1092.25, + 186.25 + ], + "projected_center_px": [ + 1091.6705322265625, + 186.0386962890625 + ], + "reprojection_error_px": 0.6167918276927576, + "confidence": 0.20880094929023507 + }, + { + "marker_id": 100, + "observed_center_px": [ + 684.25, + 149.25 + ], + "projected_center_px": [ + 684.1082763671875, + 149.09165954589844 + ], + "reprojection_error_px": 0.2125024411687107, + "confidence": 0.1658427624477632 + }, + { + "marker_id": 48, + "observed_center_px": [ + 1207.5, + 130.25 + ], + "projected_center_px": [ + 1206.74365234375, + 130.34719848632812 + ], + "reprojection_error_px": 0.7625675857649254, + "confidence": 0.19719918051995877 + }, + { + "marker_id": 71, + "observed_center_px": [ + 1149.25, + 98.5 + ], + "projected_center_px": [ + 1148.265380859375, + 98.3095474243164 + ], + "reprojection_error_px": 1.002869401103468, + "confidence": 0.18035085894910577 + }, + { + "marker_id": 94, + "observed_center_px": [ + 668.75, + 102.25 + ], + "projected_center_px": [ + 668.649658203125, + 102.52938079833984 + ], + "reprojection_error_px": 0.2968536789078286, + "confidence": 0.13931516180114967 + }, + { + "marker_id": 63, + "observed_center_px": [ + 1094.0, + 89.5 + ], + "projected_center_px": [ + 1093.3001708984375, + 89.75130462646484 + ], + "reprojection_error_px": 0.743582400730686, + "confidence": 0.18347683233254594 + }, + { + "marker_id": 65, + "observed_center_px": [ + 1142.0, + 63.0 + ], + "projected_center_px": [ + 1140.761962890625, + 63.32167434692383 + ], + "reprojection_error_px": 1.2791443505947548, + "confidence": 0.1712791339969131 + }, + { + "marker_id": 49, + "observed_center_px": [ + 659.75, + 20.0 + ], + "projected_center_px": [ + 659.8107299804688, + 22.313045501708984 + ], + "reprojection_error_px": 2.3138426099248632, + "confidence": 0.03034300498209627 + } + ] + }, + "qa": { + "sanity_notes": [] + } +} \ No newline at end of file diff --git a/test/temp/cam2_hires_1781074183695_debug.jpg b/test/temp/cam2_hires_1781074183695_debug.jpg new file mode 100644 index 0000000..9efa71b Binary files /dev/null and b/test/temp/cam2_hires_1781074183695_debug.jpg differ diff --git a/test/temp/detections.csv b/test/temp/detections.csv new file mode 100644 index 0000000..a5c34c3 --- /dev/null +++ b/test/temp/detections.csv @@ -0,0 +1,70 @@ +id,set,SeenByCount,x,y,z,nx,ny,nz,dxy +cam0,CAMERA,,-115.37,-719.72,565.61,,,, +cam1,CAMERA,,318.95,-523.93,853.64,,,, +cam2,CAMERA,,-272.89,256.27,845.84,,,, +0,?,2,513.41,-99.44,-19.39,-0.5015,-0.865,0.0182, +46,A0,2,565.64,209.9,-55.56,0.0354,0.015,0.9993,37.88 +47,A0,3,362.8,-287.49,-65.76,-0.333,-0.3131,0.8894,18.59 +48,A0,2,761.75,-329.77,-88.34,-0.6704,0.4149,0.6152,73.62 +49,A0,1,1092.66,151.29,-83.59,-0.0347,-0.025,0.9991,86.95 +50,A0,2,630.74,265.32,-79.87,0.0073,-0.0024,1.0,78.39 +51,A0,3,176.56,-163.97,-69.44,-0.26,0.2559,0.9311,11.94 +52,A0,2,96.93,219.89,-55.7,-0.0341,-0.0377,0.9987,11.46 +53,A0,1,518.69,210.86,-64.22,0.0166,0.0014,0.9999,32.47 +54,A0,3,357.23,-330.04,-55.94,-0.2949,0.3095,0.904,14.97 +55,A0,3,296.01,-261.27,-57.66,-0.291,0.0608,0.9548,12.36 +56,A0,2,538.59,201.55,-67.84,-0.0012,0.0013,1.0,51.71 +57,A0,3,635.81,-362.16,-68.53,0.0282,-0.001,0.9996,33.01 +58,A0,2,49.92,-219.72,-67.42,0.0418,-0.0158,0.999,1.62 +59,A0,3,664.52,-276.95,-69.92,-0.4034,-0.2722,0.8736,38.35 +60,A0,2,465.81,316.89,-63.04,-0.4284,-0.7766,0.462,45.64 +61,A0,1,-11.44,338.72,-61.53,0.0583,-0.0284,0.9979,11.35 +62,A0,3,423.81,-171.25,-62.26,-0.0275,-0.2428,0.9697,19.49 +63,A0,2,858.89,-229.54,-87.46,-0.0167,0.0026,0.9999,81.75 +64,A0,2,-21.74,-191.34,-56.41,-0.2806,0.4588,0.8431,3.14 +65,A0,2,876.99,-304.2,-81.63,0.0086,-0.0228,0.9997,73.92 +66,A0,2,221.89,-378.26,-70.96,-0.3787,0.5606,0.7364,19.32 +67,A0,2,570.28,307.19,-74.97,-0.665,-0.023,0.7465,61.98 +68,A0,2,615.28,185.13,-67.64,0.0036,0.0103,0.9999,44.0 +69,A0,2,7.51,-289.23,-71.43,0.0655,0.0143,0.9977,8.02 +70,A0,2,646.35,344.94,-66.82,0.013,0.0124,0.9998,63.0 +71,A0,2,801.68,-284.13,-67.44,-0.0049,0.0036,1.0,51.93 +72,A0,2,470.53,219.63,-59.99,-0.8891,-0.3928,-0.2349,38.9 +73,A0,1,227.77,334.47,-38.57,0.0887,-0.003,0.9961,6.19 +74,A0,2,93.61,158.28,-59.95,-0.4017,0.1293,0.9066,13.78 +75,A0,2,-31.35,211.98,-57.21,-0.1993,-0.6229,0.7565,18.29 +76,A0,2,725.6,203.41,-58.89,-0.5971,-0.6684,0.4436,54.51 +77,A0,2,14.87,208.14,-61.15,-0.2433,-0.6323,0.7355,16.9 +79,A0,3,324.61,-146.67,-56.54,-0.0051,-0.0055,1.0,17.5 +80,A0,1,920.78,-313.59,-61.98,0.0261,-0.0109,0.9996,61.4 +81,A0,2,134.74,179.65,-55.28,0.1542,-0.6375,0.7549,10.94 +82,A0,1,235.39,299.34,-56.31,0.0119,-0.0171,0.9998,16.36 +83,A0,1,60.54,343.24,-73.55,-0.0211,-0.0083,0.9997,16.87 +84,A0,2,433.15,283.86,-57.97,0.0108,0.0308,0.9995,36.13 +85,A0,3,530.97,-312.83,-65.01,-0.5392,0.0418,0.8411,26.39 +86,A0,2,371.18,293.37,-37.99,0.0359,0.0184,0.9992,8.4 +87,A0,1,992.42,-224.08,-54.87,0.0164,-0.0161,0.9997,53.39 +89,A0,1,1087.35,-337.82,-77.4,-0.8097,-0.3076,-0.4998,104.15 +90,A0,1,716.28,322.0,-98.36,-0.9961,-0.0881,-0.0008,73.33 +91,A0,2,797.63,384.71,-85.91,-0.6357,-0.6612,0.3984,93.42 +92,A0,3,689.76,-175.44,-72.48,-0.4179,0.1772,0.8911,45.65 +94,A0,1,912.67,170.82,-55.05,0.0401,-0.0161,0.9991,37.08 +95,A0,3,196.36,-271.55,-63.02,-0.263,-0.3771,0.8881,10.62 +96,A0,3,386.86,-188.18,-58.96,-0.0153,-0.2337,0.9722,17.17 +97,A0,3,317.16,-361.37,-54.79,-0.242,-0.4685,0.8497,12.92 +98,A0,2,648.49,382.72,-96.14,-0.001,0.016,0.9999,99.69 +99,A0,1,1032.86,-294.32,-67.94,-0.7854,-0.2944,-0.5445,78.57 +100,A0,2,848.99,192.39,-61.29,-0.6582,-0.6214,0.4251,49.94 +101,A0,1,131.96,300.1,-59.87,0.0067,0.0277,0.9996,14.34 +102,A0,3,683.89,-213.5,-68.38,-0.2212,-0.1903,0.9565,35.49 +103,A0,2,111.85,-193.49,-59.79,0.0184,0.0312,0.9993,8.43 +105,A0,3,553.96,-263.47,-68.08,-0.4035,-0.285,0.8695,29.26 +201,?,1,897.13,61.75,90.23,-0.9978,0.0489,0.0451, +208,?,3,683.3,-76.41,-55.32,-0.3861,-0.3324,0.8605, +210,?,2,153.21,-2.51,-63.41,-0.3954,0.267,0.8788, +211,?,3,359.71,3.01,-41.85,0.0415,0.0337,0.9986, +214,?,3,595.34,16.16,-69.24,-0.9274,-0.1985,0.3172, +215,?,3,353.19,-91.68,-33.15,-0.2708,-0.4026,0.8744, +217,?,1,764.54,-10.41,-25.65,0.106,0.004,0.9944, +218,?,1,1121.04,-225.1,28.11,-0.7647,-0.6357,0.1053, +219,?,1,1127.16,-337.07,20.54,-0.9004,-0.4335,0.038,