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 64ca82dd97..ce29ccc269 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 @@ -18,3 +18,6 @@ const kMinFaceDetectionScore = FaceDetectionService.kMinScoreSigmoidThreshold; /// The minimum cluster size for displaying a cluster in the UI const kMinimumClusterSizeSearchResult = 10; + +/// The minimum cluster sizes to try when the normal minimum doesn't return any results +const kLowerMinimumClusterSizes = [5, 3, 2, 1]; diff --git a/mobile/lib/services/search_service.dart b/mobile/lib/services/search_service.dart index 1cd6f3e714..b1753ef845 100644 --- a/mobile/lib/services/search_service.dart +++ b/mobile/lib/services/search_service.dart @@ -765,7 +765,10 @@ class SearchService { return clusterIDToFiles; } - Future> getAllFace(int? limit) async { + Future> getAllFace( + int? limit, { + int minClusterSize = kMinimumClusterSizeSearchResult, + }) async { try { debugPrint("getting faces"); final Map> fileIdToClusterID = @@ -857,10 +860,7 @@ class SearchService { "`getAllFace`: Cluster $clusterId should not have person id ${clusterIDToPersonID[clusterId]}", ); } - if (files.length < kMinimumClusterSizeSearchResult && - sortedClusterIds.length > 3) { - continue; - } + if (files.length < minClusterSize) continue; facesResult.add( GenericSearchResult( ResultType.faces, @@ -883,6 +883,20 @@ class SearchService { ), ); } + if (facesResult.isEmpty) { + int newMinimum = minClusterSize; + for (final int minimum in kLowerMinimumClusterSizes) { + if (minimum < minClusterSize) { + newMinimum = minimum; + break; + } + } + if (newMinimum < minClusterSize) { + return getAllFace(limit, minClusterSize: newMinimum); + } else { + return []; + } + } if (limit != null) { return facesResult.sublist(0, min(limit, facesResult.length)); } else { diff --git a/mobile/lib/ui/viewer/search_tab/people_section.dart b/mobile/lib/ui/viewer/search_tab/people_section.dart index 4ebcbbf9d6..33e7a6740e 100644 --- a/mobile/lib/ui/viewer/search_tab/people_section.dart +++ b/mobile/lib/ui/viewer/search_tab/people_section.dart @@ -30,10 +30,10 @@ class PeopleSection extends StatefulWidget { final int limit; const PeopleSection({ - Key? key, + super.key, required this.examples, this.limit = 7, - }) : super(key: key); + }); @override State createState() => _PeopleSectionState();