mirror of https://github.com/vladmandic/human
use transferrable buffer for worker messages
parent
7c7e21b8dd
commit
bdfe6fb85f
1
TODO.md
1
TODO.md
|
@ -8,7 +8,6 @@
|
|||
|
||||
- Optimize BlazePose
|
||||
- Add BlazePose heatmaps
|
||||
- Update NanoDet
|
||||
|
||||
<br>
|
||||
|
||||
|
|
|
@ -11,20 +11,21 @@ let records = 0;
|
|||
|
||||
const descLength = 1024; // descriptor length in bytes
|
||||
|
||||
function distance(descriptor1, index, options = { order: 2 }) {
|
||||
function distance(descBuffer, index, options = { order: 2 }) {
|
||||
const descriptor = new Float32Array(descBuffer);
|
||||
let sum = 0;
|
||||
for (let i = 0; i < descriptor1.length; i++) {
|
||||
const diff = (options.order === 2) ? (descriptor1[i] - view[index * descLength + i]) : (Math.abs(descriptor1[i] - view[index * descLength + i]));
|
||||
for (let i = 0; i < descriptor.length; i++) {
|
||||
const diff = (options.order === 2) ? (descriptor[i] - view[index * descLength + i]) : (Math.abs(descriptor[i] - view[index * descLength + i]));
|
||||
sum += (options.order === 2) ? (diff * diff) : (diff ** options.order);
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
function match(descriptor, options = { order: 2 }) {
|
||||
function match(descBuffer, options = { order: 2 }) {
|
||||
let best = Number.MAX_SAFE_INTEGER;
|
||||
let index = -1;
|
||||
for (let i = 0; i < records; i++) {
|
||||
const res = distance(descriptor, i, { order: options.order });
|
||||
const res = distance(descBuffer, i, { order: options.order });
|
||||
if (res < best) {
|
||||
best = res;
|
||||
index = i;
|
||||
|
|
|
@ -125,8 +125,12 @@ async function workersStart(numWorkers) {
|
|||
}
|
||||
|
||||
const match = (descriptor) => {
|
||||
// const arr = Float32Array.from(descriptor);
|
||||
const buffer = new ArrayBuffer(options.descLength * 4);
|
||||
const view = new Float32Array(buffer);
|
||||
view.set(descriptor);
|
||||
const available = data.workers.filter((worker) => !!worker).length; // find number of available workers
|
||||
if (available > 0) data.workers[data.requestID % available].postMessage({ descriptor, request: data.requestID }); // round robin to first available worker
|
||||
if (available > 0) data.workers[data.requestID % available].postMessage({ descriptor: buffer, request: data.requestID }, [buffer]); // round robin to first available worker
|
||||
else log.error('no available workers');
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue