mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-05-16 04:17:48 +00:00
That means all browsers except Safari, for now. In addition, use the 96p model (instead of the 144p one) on browsers without SIMD support.
62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
// @flow
|
|
|
|
import * as wasmCheck from 'wasm-check';
|
|
|
|
import JitsiStreamBlurEffect from './JitsiStreamBlurEffect';
|
|
import createTFLiteModule from './vendor/tflite/tflite';
|
|
import createTFLiteSIMDModule from './vendor/tflite/tflite-simd';
|
|
|
|
const models = {
|
|
'model96': 'libs/segm_lite_v681.tflite',
|
|
'model144': 'libs/segm_full_v679.tflite'
|
|
};
|
|
|
|
const segmentationDimensions = {
|
|
'model96': {
|
|
'height': 96,
|
|
'width': 160
|
|
},
|
|
'model144': {
|
|
'height': 144,
|
|
'width': 256
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Creates a new instance of JitsiStreamBlurEffect. This loads the bodyPix model that is used to
|
|
* extract person segmentation.
|
|
*
|
|
* @returns {Promise<JitsiStreamBlurEffect>}
|
|
*/
|
|
export async function createBlurEffect() {
|
|
if (!MediaStreamTrack.prototype.getSettings && !MediaStreamTrack.prototype.getConstraints) {
|
|
throw new Error('JitsiStreamBlurEffect not supported!');
|
|
}
|
|
let tflite;
|
|
|
|
if (wasmCheck.feature.simd) {
|
|
tflite = await createTFLiteSIMDModule();
|
|
} else {
|
|
tflite = await createTFLiteModule();
|
|
}
|
|
|
|
const modelBufferOffset = tflite._getModelBufferMemoryOffset();
|
|
const modelResponse = await fetch(
|
|
wasmCheck.feature.simd ? models.model144 : models.model96
|
|
);
|
|
|
|
if (!modelResponse.ok) {
|
|
throw new Error('Failed to download tflite model!');
|
|
}
|
|
|
|
const model = await modelResponse.arrayBuffer();
|
|
|
|
tflite.HEAPU8.set(new Uint8Array(model), modelBufferOffset);
|
|
|
|
tflite._loadModel(model.byteLength);
|
|
|
|
const options = wasmCheck.feature.simd ? segmentationDimensions.model144 : segmentationDimensions.model96;
|
|
|
|
return new JitsiStreamBlurEffect(tflite, options);
|
|
}
|