getCalibrationAccuracy method

  1. @override
Future<double> getCalibrationAccuracy()
override

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;
}