@vladmandic/face-api
Version:
FaceAPI: AI-powered Face Detection & Rotation Tracking, Face Description & Recognition, Age & Gender & Emotion Prediction for Browser and NodeJS using TensorFlow/JS
40 lines (30 loc) • 915 B
text/typescript
import { Box } from '../classes/Box';
import { iou } from './iou';
export function nonMaxSuppression(
boxes: Box[],
scores: number[],
iouThreshold: number,
isIOU = true,
): number[] {
let indicesSortedByScore = scores
.map((score, boxIndex) => ({ score, boxIndex }))
.sort((c1, c2) => c1.score - c2.score)
.map((c) => c.boxIndex);
const pick: number[] = [];
while (indicesSortedByScore.length > 0) {
const curr = indicesSortedByScore.pop() as number;
pick.push(curr);
const indices = indicesSortedByScore;
const outputs: number[] = [];
for (let i = 0; i < indices.length; i++) {
const idx = indices[i];
const currBox = boxes[curr];
const idxBox = boxes[idx];
outputs.push(iou(currBox, idxBox, isIOU));
}
indicesSortedByScore = indicesSortedByScore.filter(
(_, j) => outputs[j] <= iouThreshold,
);
}
return pick;
}