diff --git a/web/apps/photos/src/services/face/embed.ts b/web/apps/photos/src/services/face/embed.ts deleted file mode 100644 index 2e0977ea1..000000000 --- a/web/apps/photos/src/services/face/embed.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { workerBridge } from "@/next/worker/worker-bridge"; -import { FaceEmbedding } from "services/face/types"; - -export const mobileFaceNetFaceSize = 112; - -/** - * Compute embeddings for the given {@link faceData}. - * - * The model used is MobileFaceNet, running in an ONNX runtime. - */ -export const faceEmbeddings = async ( - faceData: Float32Array, -): Promise> => { - const outputData = await workerBridge.faceEmbeddings(faceData); - - const embeddingSize = 192; - const embeddings = new Array( - outputData.length / embeddingSize, - ); - for (let i = 0; i < embeddings.length; i++) { - embeddings[i] = new Float32Array( - outputData.slice(i * embeddingSize, (i + 1) * embeddingSize), - ); - } - return embeddings; -}; diff --git a/web/apps/photos/src/services/face/f-index.ts b/web/apps/photos/src/services/face/f-index.ts index 9a2be2cee..66788c958 100644 --- a/web/apps/photos/src/services/face/f-index.ts +++ b/web/apps/photos/src/services/face/f-index.ts @@ -1,9 +1,9 @@ import { openCache } from "@/next/blob-cache"; import log from "@/next/log"; +import { workerBridge } from "@/next/worker/worker-bridge"; import { Matrix } from "ml-matrix"; import mlIDbStorage from "services/face/db"; import { detectFaces, getRelativeDetection } from "services/face/detect"; -import { faceEmbeddings, mobileFaceNetFaceSize } from "services/face/embed"; import { Box, Point, enlargeBox } from "services/face/geom"; import { DetectedFace, @@ -11,6 +11,7 @@ import { FaceAlignment, FaceCrop, FaceDetection, + FaceEmbedding, MLSyncFileContext, type MlFileData, } from "services/face/types"; @@ -434,6 +435,30 @@ const syncFileFaceEmbeddings = async ( log.info("[MLService] facesWithEmbeddings: ", newMlFile.faces.length); }; +export const mobileFaceNetFaceSize = 112; + +/** + * Compute embeddings for the given {@link faceData}. + * + * The model used is MobileFaceNet, running in an ONNX runtime. + */ +export const faceEmbeddings = async ( + faceData: Float32Array, +): Promise> => { + const outputData = await workerBridge.faceEmbeddings(faceData); + + const embeddingSize = 192; + const embeddings = new Array( + outputData.length / embeddingSize, + ); + for (let i = 0; i < embeddings.length; i++) { + embeddings[i] = new Float32Array( + outputData.slice(i * embeddingSize, (i + 1) * embeddingSize), + ); + } + return embeddings; +}; + const syncFileFaceMakeRelativeDetections = async ( fileContext: MLSyncFileContext, ) => {