getCalibrationAccuracy method
Implementation
@override
Future<double> getCalibrationAccuracy() async {
if (_calibEvalSamples == 0 || _calibTrainSamples == 0) {
return _lastAccuracy01;
}
// Require some data before trusting accuracy
const int kMinTrain = 12; // tune
const int kMinEval = 10; // tune
if (_calibTrainSamples < kMinTrain ||
_calibEvalSamples < kMinEval) {
return _lastAccuracy01;
}
final meanErrPx = _sumErrPx / _calibEvalSamples;
// Use current viewport diagonal for normalization
final w = window.innerWidth
.toDouble(); // ??window.screen.width.toDouble()
final h = window.innerHeight
.toDouble(); // ??window.screen.height.toDouble()
final diag = math.sqrt(w * w + h * h);
final acc01 = (1.0 - (meanErrPx / diag)).clamp(0.0, 1.0);
// Soft reliability penalty that saturates as samples grow
double saturate(int n, int k) => 1 - math.exp(-n / k);
final rTrain = saturate(
_calibTrainSamples, 15); // reaches ~0.86 at 30 samples
final rEval = saturate(_calibEvalSamples, 12);
_lastAccuracy01 =
(acc01 * math.min(rTrain, rEval)).clamp(0.0, 1.0);
return _lastAccuracy01;
}