diff --git a/mobile/lib/services/machine_learning/face_ml/face_clustering/face_clustering_service.dart b/mobile/lib/services/machine_learning/face_ml/face_clustering/face_clustering_service.dart index 99cd2227ff..985f3708bb 100644 --- a/mobile/lib/services/machine_learning/face_ml/face_clustering/face_clustering_service.dart +++ b/mobile/lib/services/machine_learning/face_ml/face_clustering/face_clustering_service.dart @@ -454,6 +454,8 @@ class FaceClusteringService { blurValue: face.blurValue, badFace: face.faceScore < kMinimumQualityFaceScore || face.blurValue < kLaplacianSoftThreshold || + (face.blurValue < kLaplacianVerySoftThreshold && + face.faceScore < kMediumQualityFaceScore) || face.isSideways, vEmbedding: Vector.fromList( EVector.fromBuffer(face.embeddingBytes).values, diff --git a/mobile/lib/services/machine_learning/face_ml/face_filtering/face_filtering_constants.dart b/mobile/lib/services/machine_learning/face_ml/face_filtering/face_filtering_constants.dart index ff9e7b5421..b1f2f60183 100644 --- a/mobile/lib/services/machine_learning/face_ml/face_filtering/face_filtering_constants.dart +++ b/mobile/lib/services/machine_learning/face_ml/face_filtering/face_filtering_constants.dart @@ -3,12 +3,15 @@ import 'package:photos/services/machine_learning/face_ml/face_detection/face_det /// Blur detection threshold const kLaplacianHardThreshold = 15; const kLaplacianSoftThreshold = 100; +const kLaplacianVerySoftThreshold = 200; /// Default blur value const kLapacianDefault = 10000.0; /// The minimum score for a face to be considered a high quality face for clustering and person detection const kMinimumQualityFaceScore = 0.80; +const kMediumQualityFaceScore = 0.85; +const kHighQualityFaceScore = 0.90; /// The minimum score for a face to be detected, regardless of quality. Use [kMinimumQualityFaceScore] for high quality faces. const kMinFaceDetectionScore = FaceDetectionService.kMinScoreSigmoidThreshold;