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