[mob] Add support for syncing multile clusters for a person
This commit is contained in:
parent
24f7b191b4
commit
d43ed15cdf
|
@ -14,6 +14,7 @@ import "package:photos/models/file/file.dart";
|
|||
import 'package:photos/services/machine_learning/face_ml/face_clustering/cosine_distance.dart';
|
||||
import "package:photos/services/machine_learning/face_ml/face_clustering/linear_clustering_service.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/face_ml_result.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
|
||||
import "package:photos/services/search_service.dart";
|
||||
|
||||
class ClusterSuggestion {
|
||||
|
@ -393,7 +394,7 @@ class ClusterFeedbackService {
|
|||
for (final suggestionsPerCluster in suggestions.values) {
|
||||
for (final suggestion in suggestionsPerCluster) {
|
||||
final clusterID = suggestion.$1;
|
||||
await faceMlDb.assignClusterToPerson(
|
||||
await PersonService.instance.assignClusterToPerson(
|
||||
personID: p.remoteID,
|
||||
clusterID: clusterID,
|
||||
);
|
||||
|
|
|
@ -86,6 +86,29 @@ class PersonService {
|
|||
return PersonEntity(result.id, data);
|
||||
}
|
||||
|
||||
Future<void> assignClusterToPerson({
|
||||
required String personID,
|
||||
required int clusterID,
|
||||
}) async {
|
||||
final person = (await getPerson(personID))!;
|
||||
final personData = person.data;
|
||||
final faceIds = await faceMLDataDB.getFaceIDsForCluster(clusterID);
|
||||
final clusterInfo = ClusterInfo(
|
||||
id: clusterID,
|
||||
faces: faceIds.toSet(),
|
||||
);
|
||||
personData.assigned!.add(clusterInfo);
|
||||
await entityService.addOrUpdate(
|
||||
EntityType.person,
|
||||
json.encode(personData.toJson()),
|
||||
id: personID,
|
||||
);
|
||||
await faceMLDataDB.assignClusterToPerson(
|
||||
personID: personID,
|
||||
clusterID: clusterID,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> deletePerson(String personID, {bool onlyMapping = true}) async {
|
||||
if (onlyMapping) {
|
||||
final PersonEntity? entity = await getPerson(personID);
|
||||
|
|
|
@ -7,7 +7,6 @@ import "package:logging/logging.dart";
|
|||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||
import "package:photos/core/event_bus.dart";
|
||||
import "package:photos/events/people_changed_event.dart";
|
||||
import "package:photos/face/db.dart";
|
||||
import "package:photos/face/model/person.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/services/machine_learning/face_ml/feedback/cluster_feedback.dart';
|
||||
|
@ -225,7 +224,7 @@ class _PersonActionSheetState extends State<PersonActionSheet> {
|
|||
return PersonRowItem(
|
||||
person: person,
|
||||
onTap: () async {
|
||||
await FaceMLDataDB.instance.assignClusterToPerson(
|
||||
await PersonService.instance.assignClusterToPerson(
|
||||
personID: person.remoteID,
|
||||
clusterID: widget.cluserID,
|
||||
);
|
||||
|
|
|
@ -8,6 +8,7 @@ import "package:photos/face/db.dart";
|
|||
import "package:photos/face/model/person.dart";
|
||||
import "package:photos/models/file/file.dart";
|
||||
import 'package:photos/services/machine_learning/face_ml/feedback/cluster_feedback.dart';
|
||||
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import "package:photos/ui/components/buttons/button_widget.dart";
|
||||
import "package:photos/ui/components/models/button_type.dart";
|
||||
|
@ -110,7 +111,7 @@ class _PersonClustersState extends State<PersonReviewClusterSuggestion> {
|
|||
) async {
|
||||
// Perform the action based on clusterID, e.g., assignClusterToPerson or captureNotPersonFeedback
|
||||
if (yesOrNo) {
|
||||
await FaceMLDataDB.instance.assignClusterToPerson(
|
||||
await PersonService.instance.assignClusterToPerson(
|
||||
personID: widget.person.remoteID,
|
||||
clusterID: clusterID,
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue