aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2024-08-27 19:09:31 -0400
committerbobzel <zzzman@gmail.com>2024-08-27 19:09:31 -0400
commite2a1db72c103b7ed878fe876c5fb9eacc7a8c893 (patch)
tree0306cf9011c3b15379359fda484dae2f7ba86b8d /src
parenta566129971f1a29b1d42679befa27c63b73a7167 (diff)
enabled any image Doc to be added to a face Doc
Diffstat (limited to 'src')
-rw-r--r--src/client/views/TagsView.tsx1
-rw-r--r--src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx17
-rw-r--r--src/client/views/search/FaceRecognitionHandler.tsx2
3 files changed, 11 insertions, 9 deletions
diff --git a/src/client/views/TagsView.tsx b/src/client/views/TagsView.tsx
index 89025d668..0ac015b36 100644
--- a/src/client/views/TagsView.tsx
+++ b/src/client/views/TagsView.tsx
@@ -306,6 +306,7 @@ export class TagsView extends ObservableReactComponent<TagViewProps> {
const chatTagsList = new Set<string>(StrListCast(this._props.View.dataDoc.tags_chat));
const facesList = new Set<string>(
DocListCast(this._props.View.dataDoc[Doc.LayoutFieldKey(this._props.View.Document) + '_annotations'])
+ .concat(this._props.View.Document)
.filter(d => d.face)
.map(doc => StrCast(DocCast(doc.face)?.title))
);
diff --git a/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx b/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx
index c62303dc0..717081666 100644
--- a/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx
+++ b/src/client/views/collections/collectionFreeForm/FaceCollectionBox.tsx
@@ -95,17 +95,18 @@ export class UniqueFaceBox extends ViewBoxBaseComponent<FieldViewProps>() {
const faceDescriptorsAsFloat32Array = FaceRecognitionHandler.UniqueFaceDescriptors(this.Document).map(fd => new Float32Array(Array.from(fd)));
const labeledFaceDescriptor = new faceapi.LabeledFaceDescriptors(FaceRecognitionHandler.UniqueFaceLabel(this.Document), faceDescriptorsAsFloat32Array);
const faceMatcher = new FaceMatcher([labeledFaceDescriptor], 1);
- const { faceAnno } = FaceRecognitionHandler.ImageDocFaceAnnos(imgDoc).reduce(
- (prev, faceAnno) => {
- const match = faceMatcher.matchDescriptor(new Float32Array(Array.from(faceAnno.faceDescriptor as List<number>)));
- return match.distance < prev.dist ? { dist: match.distance, faceAnno } : prev;
- },
- { dist: 1, faceAnno: undefined as Opt<Doc> }
- );
+ const faceAnno =
+ FaceRecognitionHandler.ImageDocFaceAnnos(imgDoc).reduce(
+ (prev, faceAnno) => {
+ const match = faceMatcher.matchDescriptor(new Float32Array(Array.from(faceAnno.faceDescriptor as List<number>)));
+ return match.distance < prev.dist ? { dist: match.distance, faceAnno } : prev;
+ },
+ { dist: 1, faceAnno: undefined as Opt<Doc> }
+ ).faceAnno ?? imgDoc;
// assign the face in the image that's closest to the face collection's face
if (faceAnno) {
- FaceRecognitionHandler.UniqueFaceRemoveFaceImage(faceAnno, DocCast(faceAnno.face));
+ faceAnno.face && FaceRecognitionHandler.UniqueFaceRemoveFaceImage(faceAnno, DocCast(faceAnno.face));
FaceRecognitionHandler.UniqueFaceAddFaceImage(faceAnno, this.Document);
faceAnno.face = this.Document;
}
diff --git a/src/client/views/search/FaceRecognitionHandler.tsx b/src/client/views/search/FaceRecognitionHandler.tsx
index 4c10307e6..4f6f5d314 100644
--- a/src/client/views/search/FaceRecognitionHandler.tsx
+++ b/src/client/views/search/FaceRecognitionHandler.tsx
@@ -101,7 +101,7 @@ export class FaceRecognitionHandler {
* @param faceDoc unique face Doc
* @returns image Docs
*/
- public static UniqueFaceImages = (faceDoc: Doc) => DocListCast(faceDoc[DocData].face_annos).map(face => DocCast(face.annotationOn));
+ public static UniqueFaceImages = (faceDoc: Doc) => DocListCast(faceDoc[DocData].face_annos).map(face => DocCast(face.annotationOn, face));
/**
* Adds a face image to a unique face Doc, adds the unique face Doc to the images list of reognized faces,