This commit is contained in:
Manav Rathi 2024-05-14 13:08:01 +05:30
parent a4981ec244
commit 373273d368
No known key found for this signature in database
3 changed files with 28 additions and 29 deletions

View file

@ -1,4 +1,6 @@
import { Box } from "services/ml/geom";
import {
FaceAlignment,
FaceCrop,
FaceCropConfig,
FaceCropMethod,
@ -6,8 +8,9 @@ import {
FaceDetection,
Versioned,
} from "services/ml/types";
import { cropWithRotation } from "utils/image";
import { getArcfaceAlignment } from "utils/machineLearning/faceAlign";
import { getFaceCrop } from "utils/machineLearning/faceCrop";
import { enlargeBox } from "utils/machineLearning/index";
class ArcFaceCropService implements FaceCropService {
public method: Versioned<FaceCropMethod>;
@ -32,3 +35,27 @@ class ArcFaceCropService implements FaceCropService {
}
export default new ArcFaceCropService();
export function getFaceCrop(
imageBitmap: ImageBitmap,
alignment: FaceAlignment,
config: FaceCropConfig,
): FaceCrop {
const alignmentBox = new Box({
x: alignment.center.x - alignment.size / 2,
y: alignment.center.y - alignment.size / 2,
width: alignment.size,
height: alignment.size,
}).round();
const scaleForPadding = 1 + config.padding * 2;
const paddedBox = enlargeBox(alignmentBox, scaleForPadding).round();
const faceImageBitmap = cropWithRotation(imageBitmap, paddedBox, 0, {
width: config.maxSize,
height: config.maxSize,
});
return {
image: faceImageBitmap,
imageBox: paddedBox,
};
}

View file

@ -1,28 +0,0 @@
import { Box } from "services/ml/geom";
import { FaceAlignment, FaceCrop, FaceCropConfig } from "services/ml/types";
import { cropWithRotation } from "utils/image";
import { enlargeBox } from ".";
export function getFaceCrop(
imageBitmap: ImageBitmap,
alignment: FaceAlignment,
config: FaceCropConfig,
): FaceCrop {
const alignmentBox = new Box({
x: alignment.center.x - alignment.size / 2,
y: alignment.center.y - alignment.size / 2,
width: alignment.size,
height: alignment.size,
}).round();
const scaleForPadding = 1 + config.padding * 2;
const paddedBox = enlargeBox(alignmentBox, scaleForPadding).round();
const faceImageBitmap = cropWithRotation(imageBitmap, paddedBox, 0, {
width: config.maxSize,
height: config.maxSize,
});
return {
image: faceImageBitmap,
imageBox: paddedBox,
};
}