diff --git a/mobile/lib/models/ml/face/person.dart b/mobile/lib/models/ml/face/person.dart index 2e5191c485..348915f017 100644 --- a/mobile/lib/models/ml/face/person.dart +++ b/mobile/lib/models/ml/face/person.dart @@ -51,7 +51,7 @@ class PersonData { final bool isHidden; String? avatarFaceID; List? assigned = List.empty(); - List? rejected = List.empty(); + List? rejectedFaceIDs = List.empty(); final String? birthDate; bool hasAvatar() => avatarFaceID != null; @@ -62,7 +62,7 @@ class PersonData { PersonData({ required this.name, this.assigned, - this.rejected, + this.rejectedFaceIDs, this.avatarFaceID, this.isHidden = false, this.birthDate, @@ -79,7 +79,7 @@ class PersonData { return PersonData( name: name ?? this.name, assigned: assigned ?? this.assigned, - avatarFaceID: avatarFaceId ?? this.avatarFaceID, + avatarFaceID: avatarFaceId ?? avatarFaceID, isHidden: isHidden ?? this.isHidden, birthDate: birthDate ?? this.birthDate, ); @@ -95,7 +95,7 @@ class PersonData { assignedCount += a.faces.length; } sb.writeln('Assigned: ${assigned?.length} withFaces $assignedCount'); - sb.writeln('Rejected: ${rejected?.length}'); + sb.writeln('Rejected faceIDs: ${rejectedFaceIDs?.length}'); if (assigned != null) { for (var cluster in assigned!) { sb.writeln('Cluster: ${cluster.id} - ${cluster.faces.length}'); @@ -108,7 +108,7 @@ class PersonData { Map toJson() => { 'name': name, 'assigned': assigned?.map((e) => e.toJson()).toList(), - 'rejected': rejected?.map((e) => e.toJson()).toList(), + 'rejectedFaceIDs': rejectedFaceIDs, 'avatarFaceID': avatarFaceID, 'isHidden': isHidden, 'birthDate': birthDate, @@ -122,15 +122,16 @@ class PersonData { json['assigned'].map((x) => ClusterInfo.fromJson(x)), ); - final rejected = (json['rejected'] == null || json['rejected'].length == 0) - ? [] - : List.from( - json['rejected'].map((x) => ClusterInfo.fromJson(x)), - ); + final List rejectedFaceIDs = + (json['rejectedFaceIDs'] == null || json['rejectedFaceIDs'].length == 0) + ? [] + : List.from( + json['rejectedFaceIDs'], + ); return PersonData( name: json['name'] as String, assigned: assigned, - rejected: rejected, + rejectedFaceIDs: rejectedFaceIDs, avatarFaceID: json['avatarFaceID'] as String?, isHidden: json['isHidden'] as bool? ?? false, birthDate: json['birthDate'] as String?, diff --git a/mobile/lib/services/machine_learning/face_ml/person/person_service.dart b/mobile/lib/services/machine_learning/face_ml/person/person_service.dart index 91c0c8d087..f540897db5 100644 --- a/mobile/lib/services/machine_learning/face_ml/person/person_service.dart +++ b/mobile/lib/services/machine_learning/face_ml/person/person_service.dart @@ -201,6 +201,8 @@ class PersonService { required Set faceIDs, }) async { final personData = person.data; + + // Remove faces from clusters final List emptiedClusters = []; for (final cluster in personData.assigned!) { cluster.faces.removeWhere((faceID) => faceIDs.contains(faceID)); @@ -219,6 +221,10 @@ class PersonService { ); } + // Add removed faces to rejected faces + personData.rejectedFaceIDs ??= []; + personData.rejectedFaceIDs!.addAll(faceIDs); + await entityService.addOrUpdate( EntityType.cgroup, personData.toJson(),