1
Fork 0
mirror of https://github.com/jech/galene.git synced 2024-12-23 15:55:47 +01:00
galene/static/background-blur-worker.js
Juliusz Chroboczek bf46a9d6c1 Close the image segmenter result.
This doesn't currently do anything useful, since we're running
tflite on the CPU, but might avoid bugs if we get GPU support.
2024-12-13 22:59:53 +01:00

63 lines
1.7 KiB
JavaScript

'use strict';
let imageSegmenter;
async function loadImageSegmenter() {
let module = await import('/third-party/tasks-vision/vision_bundle.mjs');
let vision = await module.FilesetResolver.forVisionTasks(
"/third-party/tasks-vision/wasm"
);
imageSegmenter =
await module.ImageSegmenter.createFromOptions(vision, {
baseOptions: {
modelAssetPath: '/third-party/tasks-vision/models/selfie_segmenter.tflite',
},
outputCategoryMask: true,
outputConfidenceMasks: false,
runningMode: 'VIDEO',
});
}
loadImageSegmenter();
onmessage = e => {
let bitmap = e.data.bitmap;
if(!(bitmap instanceof ImageBitmap)) {
postMessage(new Error('Bad type for worker data'));
return;
}
if(!imageSegmenter) {
// not ready yet
bitmap.close();
postMessage(null);
return;
}
try {
let width = bitmap.width;
let height = bitmap.height;
imageSegmenter.segmentForVideo(
bitmap, e.data.timestamp,
result => {
/** @type{Uint8Array} */
let mask = result.categoryMask.getAsUint8Array();
let id = new ImageData(width, height);
for(let i = 0; i < mask.length; i++)
id.data[4 * i + 3] = mask[i];
result.close();
createImageBitmap(id).then(ib => {
postMessage({
bitmap: bitmap,
mask: ib,
}, [bitmap, ib]);
});
},
);
} catch(e) {
bitmap.close();
postMessage(e);
}
};