zeus.ugent.be/content/assets/scripts/halloween/worker.js

54 lines
1.1 KiB
JavaScript

var face_cascade, eye_cascade;
function loadFaceDetectTrainingSet() {
if (face_cascade == undefined) {
face_cascade = new cv.CascadeClassifier();
let load = face_cascade.load('../../test/data/haarcascade_frontalface_default.xml');
// console.log('load face detection training data', load);
}
}
function faceDetect(imageData) {
loadFaceDetectTrainingSet();
let img = cv.matFromArray(imageData, 24); // 24 for rgba
let img_gray = new cv.Mat();
cv.cvtColor(img, img_gray, cv.ColorConversionCodes.COLOR_RGBA2GRAY.value, 0);
let faces = new cv.RectVector();
let s1 = [0, 0];
let s2 = [0, 0];
face_cascade.detectMultiScale(img_gray, faces, 1.1, 3, 0, s1, s2);
let rects = [];
for (let i = 0; i < faces.size(); i += 1) {
let faceRect = faces.get(i);
rects.push({
x: faceRect.x,
y: faceRect.y,
width: faceRect.width,
height: faceRect.height
});
}
postMessage({ features: rects, output: true });
img.delete();
faces.delete();
img_gray.delete();
}
self.onmessage = function (e) {
switch (e.data.cmd) {
case 'faceDetect':
faceDetect(e.data.img);
break;
}
}
self.onerror = function (e) {
console.log(e);
}