aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2024-08-22 11:16:39 -0400
committerbobzel <zzzman@gmail.com>2024-08-22 11:16:39 -0400
commita1f90b7c3a99aff9366a353631ea963c778b4740 (patch)
treef8079354224f6e6e2afa4c6c02dfbe70b3af8287
parent95071fa118ee36d7365250f10756dce335dc76d9 (diff)
fixing up removing faces from unique faces
-rw-r--r--src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx2
-rw-r--r--src/client/views/search/FaceRecognitionHandler.tsx21
2 files changed, 17 insertions, 6 deletions
diff --git a/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx b/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx
index 6005da6dd..d1db19e43 100644
--- a/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx
+++ b/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx
@@ -108,8 +108,8 @@ export class UniqueFaceView extends ObservableReactComponent<UniqueFaceProps> {
* @param imgDoc - image Doc to remove
*/
removeFaceImageFromUniqueFace = undoable((imgDoc: Doc) => {
- FaceRecognitionHandler.ImageDocDeassociateUniqueFace(imgDoc, this._props.faceDoc);
FaceRecognitionHandler.UniqueFaceRemoveFaceImage(imgDoc, this._props.faceDoc);
+ FaceRecognitionHandler.ImageDocDisassociateUniqueFace(imgDoc, this._props.faceDoc);
}, 'remove doc from face');
render() {
diff --git a/src/client/views/search/FaceRecognitionHandler.tsx b/src/client/views/search/FaceRecognitionHandler.tsx
index c239c775c..487c35d90 100644
--- a/src/client/views/search/FaceRecognitionHandler.tsx
+++ b/src/client/views/search/FaceRecognitionHandler.tsx
@@ -47,6 +47,15 @@ export class FaceRecognitionHandler {
public static ImageDocFaceDescriptors = (imgDoc: Doc) => imgDoc[DocData][`${Doc.LayoutFieldKey(imgDoc)}_Faces`] as List<List<number>>;
/**
+ * Adds a face descriptor for a face found in an image
+ * @param imgDoc image Doc with face
+ * @param faceDescriptor descriptor of a face
+ */
+ public static ImageDocAddFaceDescriptor = (imgDoc: Doc, faceDescriptor: List<number>) => {
+ Cast(imgDoc[DocData][`${Doc.LayoutFieldKey(imgDoc)}_Faces`], listSpec('number'), null).push(faceDescriptor as unknown as number);
+ };
+
+ /**
* Adds metadata to an image Doc associating it to a unique face that corresponds to a face found in the image
* @param imgDoc image Doc containing faces
* @param faceDescriptor descriptor for the face
@@ -59,7 +68,6 @@ export class FaceRecognitionHandler {
} else {
imgDoc[DocData][faceFieldKey] = new List<List<number>>([faceDescriptor]);
}
- Cast(imgDoc[DocData][`${Doc.LayoutFieldKey(imgDoc)}_Faces`], listSpec('number'), null).push(faceDescriptor as unknown as number);
};
/**
@@ -67,10 +75,10 @@ export class FaceRecognitionHandler {
* @param imgDoc image Doc containing faces
* @param faceDoc unique face
*/
- public static ImageDocDeassociateUniqueFace = (imgDoc: Doc, faceDoc: Doc) => {
- // fill in..
+ public static ImageDocDisassociateUniqueFace = (imgDoc: Doc, faceDoc: Doc) => {
+ const faceFieldKey = FaceRecognitionHandler.imgDocFaceField(imgDoc, faceDoc);
+ imgDoc[DocData][faceFieldKey] = undefined;
};
-
/**
* returns a list of all face collection Docs on the current dashboard
* @returns face collection Doc list
@@ -122,7 +130,8 @@ export class FaceRecognitionHandler {
*/
public static UniqueFaceRemoveFaceImage = (imgDoc: Doc, faceDoc: Doc) => {
Doc.RemoveDocFromList(faceDoc[DocData], 'face_images', imgDoc);
- faceDoc[DocData].face_descriptors = new List<List<number>>(FaceRecognitionHandler.UniqueFaceDescriptors(faceDoc).filter(fd => !(imgDoc[DocData][FaceRecognitionHandler.imgDocFaceField(imgDoc, faceDoc)] as List<List<number>>).includes(fd)));
+ // TODO: remove face descriptor from images' list of face descriptors (below doesn't work)
+ // faceDoc[DocData].face_descriptors = new List<List<number>>(FaceRecognitionHandler.UniqueFaceDescriptors(faceDoc).filter(fd => !(imgDoc[DocData][FaceRecognitionHandler.imgDocFaceField(imgDoc, faceDoc)] as List<List<number>>).includes(fd)));
};
constructor() {
@@ -203,6 +212,8 @@ export class FaceRecognitionHandler {
// Add image to unique face's image collection, and assign image metadata referencing unique face
FaceRecognitionHandler.UniqueFaceAddFaceImage(imgDoc, faceDescriptor, matchedUniqueFace);
FaceRecognitionHandler.ImageDocAssociateUniqueFace(imgDoc, faceDescriptor, matchedUniqueFace);
+ // save the descriptor for the image's list of faces
+ FaceRecognitionHandler.ImageDocAddFaceDescriptor(imgDoc, faceDescriptor);
}
};