From 39a75430a57d8178e32f8d682448fd43579d2e91 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 18 May 2024 17:13:22 +0530 Subject: [PATCH] Inline --- web/apps/photos/src/services/face/f-index.ts | 13 +++++++++---- web/apps/photos/src/services/face/geom.ts | 4 ---- web/apps/photos/src/services/face/transform-box.ts | 10 +++++----- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/web/apps/photos/src/services/face/f-index.ts b/web/apps/photos/src/services/face/f-index.ts index 68c73172d..9df912392 100644 --- a/web/apps/photos/src/services/face/f-index.ts +++ b/web/apps/photos/src/services/face/f-index.ts @@ -4,7 +4,7 @@ import log from "@/next/log"; import { workerBridge } from "@/next/worker/worker-bridge"; import { euclidean } from "hdbscan"; import { Matrix } from "ml-matrix"; -import { Box, Dimensions, Point, enlargeBox, newBox } from "services/face/geom"; +import { Box, Dimensions, Point, enlargeBox } from "services/face/geom"; import { DetectedFace, Face, @@ -143,13 +143,18 @@ const indexFaces_ = async (enteFile: EnteFile, imageBitmap: ImageBitmap) => { const detectFaces = async ( imageBitmap: ImageBitmap, ): Promise> => { + const rect = ({ width, height }: { width: number; height: number }) => + new Box({ x: 0, y: 0, width, height }); + const { yoloInput, yoloSize } = convertToYOLOInputFloat32ChannelsFirst(imageBitmap); const yoloOutput = await workerBridge.detectFaces(yoloInput); const faces = faceDetectionsFromYOLOOutput(yoloOutput); - const inBox = newBox(0, 0, yoloSize.width, yoloSize.height); - const toBox = newBox(0, 0, imageBitmap.width, imageBitmap.height); - const faceDetections = transformFaceDetections(faces, inBox, toBox); + const faceDetections = transformFaceDetections( + faces, + rect(yoloSize), + rect(imageBitmap), + ); const maxFaceDistancePercent = Math.sqrt(2) / 100; const maxFaceDistance = imageBitmap.width * maxFaceDistancePercent; diff --git a/web/apps/photos/src/services/face/geom.ts b/web/apps/photos/src/services/face/geom.ts index 556e2b309..b97f292e1 100644 --- a/web/apps/photos/src/services/face/geom.ts +++ b/web/apps/photos/src/services/face/geom.ts @@ -27,10 +27,6 @@ export interface IRect { height: number; } -export function newBox(x: number, y: number, width: number, height: number) { - return new Box({ x, y, width, height }); -} - export const boxFromBoundingBox = ({ left, top, diff --git a/web/apps/photos/src/services/face/transform-box.ts b/web/apps/photos/src/services/face/transform-box.ts index 8234b8739..2a0d243b8 100644 --- a/web/apps/photos/src/services/face/transform-box.ts +++ b/web/apps/photos/src/services/face/transform-box.ts @@ -13,17 +13,17 @@ import { } from "transformation-matrix"; /** - * Detect faces in the given {@link imageBitmap}. - * - * The model used is YOLO, running in an ONNX runtime. + * Transform the given {@link faceDetections} from their coordinate system in + * which they were detected ({@link inBox}) back to the coordinate system of the + * original image ({@link toBox}). */ export const transformFaceDetections = ( - faces: FaceDetection[], + faceDetections: FaceDetection[], inBox: Box, toBox: Box, ): FaceDetection[] => { const transform = computeTransformToBox(inBox, toBox); - return faces.map((f) => { + return faceDetections.map((f) => { const box = transformBox(f.box, transform); const normLandmarks = f.landmarks; const landmarks = transformPoints(normLandmarks, transform);