diff --git a/mobile/lib/face/db.dart b/mobile/lib/face/db.dart index 9b5f42f540..3ad90915d4 100644 --- a/mobile/lib/face/db.dart +++ b/mobile/lib/face/db.dart @@ -668,22 +668,39 @@ class FaceMLDataDB { return maps.first['count'] as int; } - Future getClusteredFileCount() async { + Future getClusteredOrFacelessFileCount() async { final db = await instance.asyncDB; - final List> maps = await db.getAll( + final List> clustered = await db.getAll( 'SELECT $fcFaceId FROM $faceClustersTable', ); - final Set fileIDs = {}; - for (final map in maps) { + final Set clusteredFileIDs = {}; + for (final map in clustered) { final int fileID = getFileIdFromFaceId(map[fcFaceId] as String); - fileIDs.add(fileID); + clusteredFileIDs.add(fileID); } - return fileIDs.length; + + final List> badFacesFiles = await db.getAll( + 'SELECT DISTINCT $fileIDColumn FROM $facesTable WHERE $faceScore <= $kMinimumQualityFaceScore OR $faceBlur <= $kLaplacianHardThreshold', + ); + final Set badFileIDs = {}; + for (final map in badFacesFiles) { + badFileIDs.add(map[fileIDColumn] as int); + } + + final List> goodFacesFiles = await db.getAll( + 'SELECT DISTINCT $fileIDColumn FROM $facesTable WHERE $faceScore > $kMinimumQualityFaceScore AND $faceBlur > $kLaplacianHardThreshold', + ); + final Set goodFileIDs = {}; + for (final map in goodFacesFiles) { + goodFileIDs.add(map[fileIDColumn] as int); + } + final trulyFacelessFiles = badFileIDs.difference(goodFileIDs); + return clusteredFileIDs.length + trulyFacelessFiles.length; } Future getClusteredToIndexableFilesRatio() async { final int indexableFiles = (await getIndexableFileIDs()).length; - final int clusteredFiles = await getClusteredFileCount(); + final int clusteredFiles = await getClusteredOrFacelessFileCount(); return clusteredFiles / indexableFiles; }