enroll method

  1. @override
Future<FaceTemplate> enroll(
  1. String label,
  2. List<Face> samples
)
override

Enroll a new face from multiple sample captures.

label is a human-readable name (e.g. "Owner"). samples should contain at least 3 face captures for accuracy.

Implementation

@override
Future<FaceTemplate> enroll(String label, List<Face> samples) async {
  if (samples.isEmpty) {
    throw ArgumentError(
        'At least one face sample is required for enrollment');
  }

  final featureVectors = <List<double>>[];

  for (final face in samples) {
    final features = FaceFeatureExtractor.extractFeatures(face);
    if (features != null) {
      featureVectors.add(features);
    }
  }

  if (featureVectors.isEmpty) {
    throw StateError(
      'Could not extract features from any sample. '
      'Ensure ML Kit is configured with enableContours: true.',
    );
  }

  final averaged = FaceFeatureExtractor.averageFeatures(featureVectors);
  final id = 'face_${_nextId++}_${DateTime.now().millisecondsSinceEpoch}';

  final template = FaceTemplate(
    id: id,
    label: label,
    features: averaged,
  );

  await store.save(template);
  return template;
}