detectFaces method

Future<List<FaceDetectionResult>> detectFaces(
  1. InputImage inputImage
)

Detect faces from an InputImage

Implementation

Future<List<FaceDetectionResult>> detectFaces(InputImage inputImage) async {
  if (!_isInitialized) await initialize();

  final faces = await _faceDetector.processImage(inputImage);
  final results = <FaceDetectionResult>[];

  for (final face in faces) {
    // Extract expressions from ML Kit classification
    final expressions = _extractExpressions(face);
    final dominant = _getDominantExpression(expressions);

    // Estimate age from face proportions (heuristic)
    final estimatedAge = _estimateAge(face);

    // Estimate gender from face features (heuristic)
    final estimatedGender = _estimateGender(face);

    // Generate face embedding using FaceNet or fall back to geometric
    final embedding = await _generateFaceEmbedding(face, inputImage);

    results.add(FaceDetectionResult(
      face: face,
      confidence: face.trackingId != null ? 0.95 : 0.85,
      estimatedAge: estimatedAge,
      estimatedGender: estimatedGender,
      dominantExpression: dominant['expression'] as String?,
      expressionConfidence: dominant['confidence'] as double?,
      expressions: expressions,
      faceEmbedding: embedding,
    ));
  }

  return results;
}