app
AI Flow: Reverse Engineering
Public Made by Adomby adom
Photos of a PCB to a tagged KiCad copy: parts placed, copper and nets with their evidence, a schematic, a measured confidence score, bench tests and a video of the run.
main
Caleb
Version 0.3.0: new copper reader, dome via filter, every layer read from the photos, net evidence, measured confidence;…
e874d7d
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911
{
"at": "2026-11-05T23:24:45Z",
"belowTarget": [
"F.SilkS 0.742",
"F.Mask opening 0.715",
"F exposed metal 0.666",
"B.SilkS 0.740",
"B exposed metal 0.753",
"B holes 0.746"
],
"board": "/home/adom/project/Driver_RE3_test/run/kicad/run.kicad_pcb",
"boardAreaMm2": 4544.36,
"categories": {
"copper": {
"formula": "100 x the lower IoU of F.Cu and B.Cu, each the lower of its held-out tiles and the second photo. Only bare mask counts: pixels under parts, silk or metal are in neither the numerator nor the denominator, so they cannot raise it. See layers.*.scoredShareOfBoard for how much of the board this covers.",
"score": 80.9
},
"placement": {
"formula": "100 x the lowest of: F exposed metal IoU, F holes IoU (held-out, second photo), and the share of parts whose library pads sit within 0.25 mm of the pads the photo shows",
"score": 55.65
},
"vias": {
"formula": "100 x F1 of written vias against bright domes on the bottom mask in the held-out tiles, from a plain blob test",
"score": 69.4
}
},
"generatedBy": "check fidelity",
"inputs": {
"copper.json": "geometry:a38e5dae530b50de90cfba56310bd9f43f353a908399fcb599f46123cc24eb26",
"parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
"photo-layers.json": "fe62d95c6b2fe0731897874c0ede4f9de7352449e3e46ddf019ed9474d95e755"
},
"layers": {
"B exposed metal": {
"bestShiftMm": {
"iouThere": 0.828,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"partBodiesMm2": 0.0
},
"excludedMm2": 0.0,
"heldOutTiles": {
"boardMm2": 70.94,
"boundaryMedianMm": 0.0,
"boundaryP95Mm": 0.4,
"boundarySamples": 22916,
"iou": 0.828,
"photoMm2": 70.36,
"precision": 0.902,
"recall": 0.91
},
"iouTuningTiles": 0.885,
"perBlob": {
"blobs": 32,
"iouMedian": 0.952,
"iouP10": 0.643,
"under05": 3
},
"photoAgainstItsSecondShot": {
"iou": 0.864
},
"scoredMm2": 4544.36,
"scoredShareOfBoard": 1.0,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 3.783,
"iou": 0.753,
"precision": 0.833,
"recall": 0.887
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.48,
"iouAtZero": 0.828,
"scoresWorse": true,
"shiftMm": 0.25
}
},
"B holes": {
"bestShiftMm": {
"iouThere": 0.758,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"note": "a hole with a pin and solder in it does not show",
"partBodiesMm2": 0.0,
"solderedMetalMm2": 22.89
},
"excludedMm2": 22.89,
"heldOutTiles": {
"boardMm2": 38.01,
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 7.883,
"boundarySamples": 7812,
"iou": 0.758,
"photoMm2": 29.76,
"precision": 0.769,
"recall": 0.982
},
"iouTuningTiles": 0.746,
"perHole": {
"centreErrorMedianMm": 0.008,
"centreErrorP95Mm": 0.038,
"diameterErrorMedianMm": 0.015,
"diameterErrorP95Mm": 0.029,
"drillsWithNoPhotoHole": 20,
"holesOnPhoto": 67,
"withADrill": 67,
"withNoDrill": 0
},
"photoAgainstItsSecondShot": {
"iou": 0.971
},
"scoredMm2": 4521.48,
"scoredShareOfBoard": 0.995,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 10.15,
"iou": 0.746,
"precision": 0.757,
"recall": 0.982
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.496,
"iouAtZero": 0.758,
"scoresWorse": true,
"shiftMm": 0.25
}
},
"B.Cu": {
"bestShiftMm": {
"iouThere": 0.873,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"holesMm2": 60.33,
"metalMm2": 138.58,
"note": "copper can be read only under bare mask; a margin of 6 px around anything else goes too",
"partBodiesMm2": 0.0,
"silkMm2": 149.47
},
"excludedMm2": 596.98,
"heldOutTiles": {
"boardMm2": 1593.31,
"boundaryMedianMm": 0.058,
"boundaryP95Mm": 1.292,
"boundarySamples": 144662,
"iou": 0.873,
"photoMm2": 1567.91,
"precision": 0.925,
"recall": 0.939
},
"iouTuningTiles": 0.865,
"photoAgainstItsSecondShot": {
"iou": 0.948
},
"plotAgainstRead": {
"iouVisibleOnly": 0.983,
"iouWholeBoard": 0.977,
"meaning": "KiCad's plotted copper against the pours and tracks of copper.json drawn directly. The whole-board figure also counts pads and vias, which the read layer does not draw",
"plotOnlyVisibleMm2": 35.65,
"readOnlyVisibleMm2": 17.89
},
"scoredMm2": 3947.38,
"scoredShareOfBoard": 0.869,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.05,
"boundaryP95Mm": 1.3,
"iou": 0.882,
"precision": 0.934,
"recall": 0.94
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.828,
"iouAtZero": 0.873,
"scoresWorse": true,
"shiftMm": 0.25
},
"visibility": {
"agreementVisibleOnly": 0.873,
"hiddenBy": {
"holesMm2": 60.33,
"marginBesideThemMm2": 248.61,
"metalMm2": 138.58,
"partBodiesMm2": 0.0,
"silkMm2": 149.47
},
"visibleMm2": 3947.38,
"visibleShareOfBoard": 0.869
}
},
"B.Mask opening": {
"bestShiftMm": {
"iouThere": 0.906,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"partBodiesMm2": 0.0
},
"excludedMm2": 0.0,
"heldOutTiles": {
"boardMm2": 109.12,
"boundaryMedianMm": 0.0,
"boundaryP95Mm": 1.225,
"boundarySamples": 17403,
"iou": 0.906,
"photoMm2": 100.12,
"precision": 0.912,
"recall": 0.994
},
"iouTuningTiles": 0.945,
"photoAgainstItsSecondShot": {
"iou": 0.905
},
"scoredMm2": 4544.36,
"scoredShareOfBoard": 1.0,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 4.358,
"iou": 0.838,
"precision": 0.859,
"recall": 0.972
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.714,
"iouAtZero": 0.906,
"scoresWorse": true,
"shiftMm": 0.25
}
},
"B.SilkS": {
"bestShiftMm": {
"iouThere": 0.979,
"x": 0.0,
"y": 0.0
},
"edgeAgainstLuminance": {
"meaning": "positive: the photographed edge lies outside the drawn shape",
"medianAbsMm": 0.025,
"medianSignedMm": 0.025,
"p95AbsMm": 0.15,
"samples": 7726
},
"excludedBecause": {
"holesMm2": 60.33,
"partBodiesMm2": 0.0
},
"excludedMm2": 60.33,
"heldOutTiles": {
"boardMm2": 76.91,
"boundaryMedianMm": 0.0,
"boundaryP95Mm": 0.025,
"boundarySamples": 61323,
"iou": 0.979,
"photoMm2": 76.48,
"precision": 0.986,
"recall": 0.992
},
"iouTuningTiles": 0.979,
"photoAgainstItsSecondShot": {
"iou": 0.739
},
"scoredMm2": 4484.04,
"scoredShareOfBoard": 0.987,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 4.4,
"iou": 0.74,
"precision": 0.867,
"recall": 0.834
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.426,
"iouAtZero": 0.979,
"scoresWorse": true,
"shiftMm": 0.25
}
},
"F exposed metal": {
"bestShiftMm": {
"iouThere": 0.779,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"partBodiesMm2": 1087.18
},
"excludedMm2": 1087.18,
"heldOutTiles": {
"boardMm2": 166.35,
"boundaryMedianMm": 0.0,
"boundaryP95Mm": 0.517,
"boundarySamples": 63376,
"iou": 0.779,
"photoMm2": 159.3,
"precision": 0.857,
"recall": 0.895
},
"iouTuningTiles": 0.769,
"perBlob": {
"blobs": 176,
"iouMedian": 0.876,
"iouP10": 0.14,
"under05": 33
},
"photoAgainstItsSecondShot": {
"iou": 0.766
},
"scoredMm2": 3457.18,
"scoredShareOfBoard": 0.761,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.033,
"boundaryP95Mm": 0.692,
"iou": 0.666,
"precision": 0.745,
"recall": 0.862
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.469,
"iouAtZero": 0.779,
"scoresWorse": true,
"shiftMm": 0.25
}
},
"F holes": {
"bestShiftMm": {
"iouThere": 0.92,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"note": "a hole with a pin and solder in it does not show",
"partBodiesMm2": 1087.18,
"solderedMetalMm2": 234.42
},
"excludedMm2": 1321.61,
"heldOutTiles": {
"boardMm2": 32.58,
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 0.05,
"boundarySamples": 7110,
"iou": 0.92,
"photoMm2": 32.21,
"precision": 0.953,
"recall": 0.964
},
"iouTuningTiles": 0.878,
"perHole": {
"centreErrorMedianMm": 0.008,
"centreErrorP95Mm": 0.038,
"diameterErrorMedianMm": 0.015,
"diameterErrorP95Mm": 0.028,
"drillsWithNoPhotoHole": 24,
"holesOnPhoto": 63,
"withADrill": 63,
"withNoDrill": 0
},
"photoAgainstItsSecondShot": {
"iou": 0.952
},
"scoredMm2": 3222.76,
"scoredShareOfBoard": 0.709,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 0.067,
"iou": 0.864,
"precision": 0.953,
"recall": 0.903
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.596,
"iouAtZero": 0.92,
"scoresWorse": true,
"shiftMm": 0.25
}
},
"F.Cu": {
"bestShiftMm": {
"iouThere": 0.823,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"holesMm2": 58.52,
"metalMm2": 335.68,
"note": "copper can be read only under bare mask; a margin of 6 px around anything else goes too",
"partBodiesMm2": 1087.18,
"silkMm2": 257.29
},
"excludedMm2": 2363.35,
"heldOutTiles": {
"boardMm2": 749.59,
"boundaryMedianMm": 0.05,
"boundaryP95Mm": 0.425,
"boundarySamples": 102577,
"iou": 0.823,
"photoMm2": 778.71,
"precision": 0.92,
"recall": 0.886
},
"iouTuningTiles": 0.815,
"photoAgainstItsSecondShot": {
"iou": 0.927
},
"plotAgainstRead": {
"iouVisibleOnly": 0.969,
"iouWholeBoard": 0.835,
"meaning": "KiCad's plotted copper against the pours and tracks of copper.json drawn directly. The whole-board figure also counts pads and vias, which the read layer does not draw",
"plotOnlyVisibleMm2": 16.17,
"readOnlyVisibleMm2": 31.49
},
"scoredMm2": 2181.01,
"scoredShareOfBoard": 0.48,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.05,
"boundaryP95Mm": 0.5,
"iou": 0.809,
"precision": 0.921,
"recall": 0.87
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.742,
"iouAtZero": 0.823,
"scoresWorse": true,
"shiftMm": 0.25
},
"visibility": {
"agreementVisibleOnly": 0.823,
"hiddenBy": {
"holesMm2": 58.52,
"marginBesideThemMm2": 624.69,
"metalMm2": 335.68,
"partBodiesMm2": 1087.18,
"silkMm2": 257.29
},
"visibleMm2": 2181.01,
"visibleShareOfBoard": 0.48
}
},
"F.Mask opening": {
"bestShiftMm": {
"iouThere": 0.824,
"x": 0.0,
"y": 0.0
},
"excludedBecause": {
"partBodiesMm2": 1087.18
},
"excludedMm2": 1087.18,
"heldOutTiles": {
"boardMm2": 200.53,
"boundaryMedianMm": 0.0,
"boundaryP95Mm": 0.85,
"boundarySamples": 58121,
"iou": 0.824,
"photoMm2": 191.51,
"precision": 0.883,
"recall": 0.924
},
"iouTuningTiles": 0.806,
"photoAgainstItsSecondShot": {
"iou": 0.806
},
"scoredMm2": 3457.18,
"scoredShareOfBoard": 0.761,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.05,
"boundaryP95Mm": 1.067,
"iou": 0.715,
"precision": 0.787,
"recall": 0.886
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.576,
"iouAtZero": 0.824,
"scoresWorse": true,
"shiftMm": 0.25
}
},
"F.SilkS": {
"bestShiftMm": {
"iouThere": 0.983,
"x": 0.0,
"y": 0.0
},
"edgeAgainstLuminance": {
"meaning": "positive: the photographed edge lies outside the drawn shape",
"medianAbsMm": 0.025,
"medianSignedMm": 0.025,
"p95AbsMm": 0.138,
"samples": 11142
},
"excludedBecause": {
"holesMm2": 58.52,
"partBodiesMm2": 1087.18
},
"excludedMm2": 1145.7,
"heldOutTiles": {
"boardMm2": 135.75,
"boundaryMedianMm": 0.0,
"boundaryP95Mm": 0.025,
"boundarySamples": 96536,
"iou": 0.983,
"photoMm2": 135.46,
"precision": 0.99,
"recall": 0.992
},
"iouTuningTiles": 0.983,
"photoAgainstItsSecondShot": {
"iou": 0.744
},
"scoredMm2": 3398.66,
"scoredShareOfBoard": 0.748,
"secondPhotoHeldOutTiles": {
"boundaryMedianMm": 0.025,
"boundaryP95Mm": 0.692,
"iou": 0.742,
"precision": 0.811,
"recall": 0.898
},
"shiftTest": {
"iouAtBestOfFourShifts": 0.412,
"iouAtZero": 0.983,
"scoresWorse": true,
"shiftMm": 0.25
}
}
},
"layersWorst": 66.6,
"outline": {
"perPhoto": {
"Driver1.JPG": {
"bottom": {
"maxGapMm": 0.015,
"medianGapMm": 0.007
},
"cornerRadiiMm": [
3.08,
3.14,
3.08,
2.96
],
"left": {
"blocked": true
},
"right": {
"maxGapMm": 0.013,
"medianGapMm": 0.007
},
"top": {
"maxGapMm": 0.036,
"medianGapMm": 0.016
}
},
"Driver2.JPG": {
"bottom": {
"maxGapMm": 0.014,
"medianGapMm": 0.006
},
"cornerRadiiMm": [
3.32,
3.08,
3.02,
2.96
],
"left": {
"maxGapMm": 0.064,
"medianGapMm": 0.049
},
"right": {
"maxGapMm": 0.019,
"medianGapMm": 0.008
},
"top": {
"maxGapMm": 0.033,
"medianGapMm": 0.026
}
},
"Driver3.JPG": {
"bottom": {
"blocked": true
},
"cornerRadiiMm": [
2.96,
2.96,
2.72,
1.39
],
"left": {
"maxGapMm": 0.038,
"medianGapMm": 0.029
},
"right": {
"maxGapMm": 0.045,
"medianGapMm": 0.024
},
"top": {
"maxGapMm": 0.232,
"medianGapMm": 0.169
}
},
"Driver4.jpg": {
"bottom": {
"blocked": true
},
"cornerRadiiMm": [
3.02,
3.08,
3.08,
2.96
],
"left": {
"maxGapMm": 0.021,
"medianGapMm": 0.019
},
"right": {
"maxGapMm": 0.052,
"medianGapMm": 0.027
},
"top": {
"maxGapMm": 0.235,
"medianGapMm": 0.165
}
}
},
"worstMedianGapMm": 0.169
},
"pxPerMm": 40.0,
"samples": {
"edgeAgainstLuminance": "threshold-free: the nearest steepest edge in the luminance, for bias in where the silk edge was put",
"heldOut": "tile set B, primary photos",
"secondPhoto": "tile set B, the other photo of each face, registered through its holes; same camera position and light, so it tests noise and registration, not a choice of threshold",
"tuning": "tile set A of a 5 mm checkerboard, primary photos: thresholds come from here"
},
"scaleCheck": {
"boardMm": [
73.65,
61.78
],
"bottomRegistration": {
"leaveOneOutMaxMm": 0.083,
"leaveOneOutRmsMm": 0.026,
"pairs": 40,
"quadraticRmsMm": 0.02,
"translationOnlyMaxMm": 0.58,
"translationOnlyRmsMm": 0.204
},
"edges": {
"bottom": {
"bottomInlierShare": 0.21072088724584104,
"bottomPhotoMm": 62.063,
"bowMmBottom": -0.018,
"bowMmTop": -0.024,
"tiltMradBottom": -0.336,
"tiltMradTop": 0.121,
"topInlierShare": 0.9722735674676524,
"topPhotoMm": 61.91
},
"left": {
"bottomInlierShare": 0.92152466367713,
"bottomPhotoMm": -0.131,
"bowMmBottom": 0.039,
"bowMmTop": 0.023,
"tiltMradBottom": -0.093,
"tiltMradTop": -0.904,
"topInlierShare": 0.4618834080717489,
"topPhotoMm": -0.105
},
"right": {
"bottomInlierShare": 0.9551569506726456,
"bottomPhotoMm": 73.8,
"bowMmBottom": 0.008,
"bowMmTop": 0.027,
"tiltMradBottom": 2.96,
"tiltMradTop": 4.705,
"topInlierShare": 0.9910313901345292,
"topPhotoMm": 73.78
},
"top": {
"bottomInlierShare": 0.9815157116451017,
"bottomPhotoMm": 0.04,
"bowMmBottom": -0.002,
"bowMmTop": 0.001,
"tiltMradBottom": 2.383,
"tiltMradTop": 0.119,
"topInlierShare": 0.6469500924214417,
"topPhotoMm": -0.109
}
},
"outlineMm": [
[
99.8719,
99.8862
],
[
173.634,
99.895
],
[
173.9258,
161.9149
],
[
99.8662,
161.906
]
],
"pxPerMm": 46.599,
"rulers": {
"holes": {
"x": {
"ratio": 1.00096,
"rulers": 3,
"spreadBetweenRulers": 0.00044
},
"y": {
"ratio": 1.00368,
"rulers": 3,
"spreadBetweenRulers": 0.00193
}
},
"meaning": "ratio 1.001 means the frame draws 0.1% larger than the library pitch",
"perRuler": [
{
"holes": true,
"name": "J10",
"pads": 4,
"x": null,
"xBaselineMm": 0.0,
"y": 1.0028,
"yBaselineMm": 20.0
},
{
"holes": true,
"name": "J11",
"pads": 4,
"x": null,
"xBaselineMm": 0.0,
"y": 1.0018,
"yBaselineMm": 20.0
},
{
"holes": true,
"name": "J4",
"pads": 6,
"x": 1.0003,
"xBaselineMm": 70.0,
"y": null,
"yBaselineMm": 0.0
},
{
"holes": true,
"name": "J5",
"pads": 7,
"x": 1.0013,
"xBaselineMm": 112.0,
"y": null,
"yBaselineMm": 0.0
},
{
"holes": true,
"name": "J8",
"pads": 4,
"x": 1.0013,
"xBaselineMm": 25.4,
"y": null,
"yBaselineMm": 0.0
},
{
"holes": true,
"name": "J9",
"pads": 4,
"x": null,
"xBaselineMm": 0.0,
"y": 1.0064,
"yBaselineMm": 20.0
},
{
"holes": false,
"name": "Q1",
"pads": 4,
"x": 0.9819,
"xBaselineMm": 12.7,
"y": null,
"yBaselineMm": 0.0
},
{
"holes": false,
"name": "Q2",
"pads": 4,
"x": 0.9858,
"xBaselineMm": 12.7,
"y": null,
"yBaselineMm": 0.0
},
{
"holes": false,
"name": "Q4",
"pads": 4,
"x": 0.9791,
"xBaselineMm": 12.7,
"y": null,
"yBaselineMm": 0.0
},
{
"holes": false,
"name": "Q6",
"pads": 4,
"x": 0.9774,
"xBaselineMm": 12.7,
"y": null,
"yBaselineMm": 0.0
},
{
"holes": false,
"name": "SW1",
"pads": 4,
"x": 0.8453,
"xBaselineMm": 13.0,
"y": 0.8153,
"yBaselineMm": 9.0
},
{
"holes": false,
"name": "U1",
"pads": 34,
"x": 1.0034,
"xBaselineMm": 1366.4,
"y": 1.0105,
"yBaselineMm": 1283.4
},
{
"holes": false,
"name": "U2",
"pads": 14,
"x": 0.9901,
"xBaselineMm": 225.8,
"y": 0.9941,
"yBaselineMm": 65.1
},
{
"holes": false,
"name": "U6",
"pads": 8,
"x": 1.0426,
"xBaselineMm": 42.8,
"y": 1.0995,
"yBaselineMm": 66.9
}
],
"smallPads": {
"x": {
"ratio": 1.00072,
"rulers": 8,
"spreadBetweenRulers": 0.01617
},
"y": {
"ratio": 1.01267,
"rulers": 4,
"spreadBetweenRulers": 0.02489
}
}
}
},
"secondPhotos": {
"bottom": {
"file": "Driver3.JPG",
"registration": {
"leaveOneOutMaxMm": 0.074,
"leaveOneOutRmsMm": 0.023,
"pairs": 41,
"patchResidualMedianPx": 0.14,
"patches": 351,
"patchesKept": 308,
"quadraticRmsMm": 0.018,
"translationOnlyMaxMm": 0.626,
"translationOnlyRmsMm": 0.226
}
},
"top": {
"file": "Driver2.JPG",
"registration": {
"leaveOneOutMaxMm": 0.046,
"leaveOneOutRmsMm": 0.014,
"pairs": 43,
"patchResidualMedianPx": 0.11,
"patches": 433,
"patchesKept": 391,
"quadraticRmsMm": 0.011,
"translationOnlyMaxMm": 0.079,
"translationOnlyRmsMm": 0.021
}
}
},
"targetIoU": 0.8,
"viaLayer": {
"domesInHeldOutTiles": 909,
"domesWithAVia": 554,
"f1": 0.694,
"note": "domes found by a plain bright-blob test on the bottom face, not the flow's via detector: an independent floor, not a truth",
"precision": 0.806,
"recall": 0.609,
"viasInHeldOutTiles": 687,
"viasOnADome": 554,
"viasOnSilk": 4
}
}