comparefaceKyc1 method

Future<double> comparefaceKyc1(
  1. String image1,
  2. String image2
)

Implementation

Future<double> comparefaceKyc1(String image1, String image2) async {
  try {
    // Decode base64 strings to bytes
    Uint8List bytes1;
    Uint8List bytes2;

    try {
      final encoded1 = base64Decode(image1);
      bytes1 = Uint8List.fromList(encoded1);
    } catch (e) {
      // If base64 decode fails, assume it's already raw bytes encoded as string
      dev.log('Image 1 base64 decode failed, treating as raw data: $e');
      bytes1 = Uint8List.fromList(utf8.encode(image1));
    }

    try {
      final encoded2 = base64Decode(image2);
      bytes2 = Uint8List.fromList(encoded2);
    } catch (e) {
      dev.log('Image 2 base64 decode failed, treating as raw data: $e');
      bytes2 = Uint8List.fromList(utf8.encode(image2));
    }

    // Create properly oriented image files
    final file1 = await _createOrientedImageFile(bytes1, 'img1_${DateTime.now().millisecondsSinceEpoch}.jpg');
    final file2 = await _createOrientedImageFile(bytes2, 'img2_${DateTime.now().millisecondsSinceEpoch}.jpg');

    final input1 = InputImage.fromFile(file1);
    final input2 = InputImage.fromFile(file2);

    final results = await Future.wait([
      _faceService.detectFaces(input1),
      _faceService.detectFaces(input2),
    ]);

    // Check for empty results and return early
    if (results[0].isEmpty) {
      dev.log('No face detected in Image 1. Use an image with a clear face.');
      await _cleanupFiles([file1, file2]);
      return 0;
    }

    if (results[1].isEmpty) {
      dev.log('No face detected in Image 2. Use an image with a clear face.');
      await _cleanupFiles([file1, file2]);
      return 0;
    }

    final emb1 = results[0][0].faceEmbedding;
    final emb2 = results[1][0].faceEmbedding;

    // Clean up temp files
    await _cleanupFiles([file1, file2]);

    if (emb1 != null && emb2 != null) {
      final comparison = FaceDetectorService.compareFaces(emb1, emb2);

      dev.log(jsonEncode(comparison.toJson()));
      return comparison.similarityPercentage;
    } else {
      dev.log('Face embeddings could not be generated');
      return 0;
    }
  } catch (e) {
    dev.log('Comparison failed: $e');
    return 0;
  }
}