The open source OpenXR runtime
at disable-ht-prediction 213 lines 6.3 kB view raw
1{ 2 "$schema": "http://json-schema.org/draft-07/schema", 3 "title": "Monado calibration file schema v2", 4 "type": "object", 5 "required": [ 6 "metadata", 7 "cameras", 8 "opencv_stereo_calibrate" 9 ], 10 "properties": { 11 "$schema": { 12 "type": "string", 13 "title": "JSON Schema directive", 14 "default": "https://monado.pages.freedesktop.org/monado/calibration_v2.schema.json" 15 }, 16 "metadata": { 17 "description": "Calibration file metadata", 18 "type": "object", 19 "required": [ 20 "version" 21 ], 22 "properties": { 23 "version": { 24 "const": 2 25 } 26 } 27 }, 28 "cameras": { 29 "type": "array", 30 "minItems": 2, 31 "maxItems": 2, 32 "description": "Stereo calibrated cameras", 33 "items": { 34 "$ref": "#/$defs/camera" 35 } 36 }, 37 "opencv_stereo_calibrate": { 38 "$ref": "#/$defs/opencv_stereo_calibrate" 39 } 40 }, 41 "$defs": { 42 "camera": { 43 "type": "object", 44 "required": [ 45 "name", 46 "model", 47 "intrinsics", 48 "distortion", 49 "resolution" 50 ], 51 "properties": { 52 "name": { 53 "$ref": "#/$defs/camera_name" 54 }, 55 "model": { 56 "description": "Camera and distortion model", 57 "enum": [ 58 "pinhole_radtan5", 59 "fisheye_equidistant4" 60 ] 61 }, 62 "intrinsics": { 63 "type": "object", 64 "required": [ 65 "fx", 66 "fy", 67 "cx", 68 "cy" 69 ], 70 "properties": { 71 "fx": { 72 "type": "number" 73 }, 74 "fy": { 75 "type": "number" 76 }, 77 "cx": { 78 "type": "number" 79 }, 80 "cy": { 81 "type": "number" 82 } 83 } 84 }, 85 "distortion": { 86 "description": "Parameters for the specified distortion model. radtan5: k1,k2,p1,p2,k3. equidistant4: k1,k2,k3,k4.", 87 "$comment": "There is no easy way to enforce the fields parameters in the schema based on the `model` property, the if-then validation could help but still would be very cumbersome.", 88 "oneOf": [ 89 { 90 "$ref": "#/$defs/equidistant4" 91 }, 92 { 93 "$ref": "#/$defs/radtan5" 94 } 95 ] 96 }, 97 "resolution": { 98 "type": "object", 99 "required": [ 100 "width", 101 "height" 102 ], 103 "properties": { 104 "width": { 105 "type": "integer" 106 }, 107 "height": { 108 "type": "integer" 109 } 110 } 111 } 112 } 113 }, 114 "camera_name": { 115 "description": "Display name; not necessarily unique.", 116 "type": "string", 117 "maxLength": 128 118 }, 119 "opencv_stereo_calibrate": { 120 "description": "Data produced by cv::stereoCalibrate.", 121 "type": "object", 122 "required": [ 123 "rotation", 124 "translation", 125 "essential", 126 "fundamental" 127 ], 128 "additionalProperties": false, 129 "properties": { 130 "rotation": { 131 "$ref": "#/$defs/mat3x3d" 132 }, 133 "translation": { 134 "$ref": "#/$defs/mat3x1d" 135 }, 136 "essential": { 137 "$ref": "#/$defs/mat3x3d" 138 }, 139 "fundamental": { 140 "$ref": "#/$defs/mat3x3d" 141 } 142 } 143 }, 144 "mat3x3d": { 145 "type": "array", 146 "items": { 147 "type": "number" 148 }, 149 "minItems": 9, 150 "maxItems": 9 151 }, 152 "mat3x1d": { 153 "type": "array", 154 "items": { 155 "type": "number" 156 }, 157 "minItems": 3, 158 "maxItems": 3 159 }, 160 "equidistant4": { 161 "type": "object", 162 "required": [ 163 "k1", 164 "k2", 165 "k3", 166 "k4" 167 ], 168 "additionalProperties": false, 169 "properties": { 170 "k1": { 171 "type": "number" 172 }, 173 "k2": { 174 "type": "number" 175 }, 176 "k3": { 177 "type": "number" 178 }, 179 "k4": { 180 "type": "number" 181 } 182 } 183 }, 184 "radtan5": { 185 "type": "object", 186 "required": [ 187 "k1", 188 "k2", 189 "p1", 190 "p2", 191 "k3" 192 ], 193 "additionalProperties": false, 194 "properties": { 195 "k1": { 196 "type": "number" 197 }, 198 "k2": { 199 "type": "number" 200 }, 201 "p1": { 202 "type": "number" 203 }, 204 "p2": { 205 "type": "number" 206 }, 207 "k3": { 208 "type": "number" 209 } 210 } 211 } 212 } 213}