@tensorflow/tfjs-backend-wasm
Version:
This package adds a WebAssembly backend to TensorFlow.js. It currently supports the following models from our [models](https://github.com/tensorflow/tfjs-models) repo: - BlazeFace - BodyPix - CocoSSD - Face landmarks detection - HandPose - KNN classifier
71 lines • 10.3 kB
JavaScript
/**
* @license
* Copyright 2019 Google LLC. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =============================================================================
*/
import { CropAndResize } from '@tensorflow/tfjs-core';
import { cast } from './Cast';
// Must match enum in CropAndResize.cc
var InterpolationMethod;
(function (InterpolationMethod) {
InterpolationMethod[InterpolationMethod["bilinear"] = 0] = "bilinear";
InterpolationMethod[InterpolationMethod["nearest"] = 1] = "nearest";
})(InterpolationMethod || (InterpolationMethod = {}));
let wasmCropAndResize;
function setup(backend) {
wasmCropAndResize = backend.wasm.cwrap(CropAndResize, null /*void*/, [
'number',
'number',
'number',
'number',
'array',
'number',
'number',
'number',
'number',
'number' // out id
]);
}
function cropAndResize(args) {
const { backend, inputs, attrs } = args;
const { method, extrapolationValue, cropSize } = attrs;
const { image, boxes, boxInd } = inputs;
const numBoxes = boxes.shape[0];
const [cropHeight, cropWidth] = cropSize;
const outShape = [numBoxes, cropHeight, cropWidth, image.shape[3]];
let imagesData = backend.dataIdMap.get(image.dataId);
let castedData;
if (image.dtype !== 'float32') {
castedData = cast({ backend, inputs: { x: image }, attrs: { dtype: 'float32' } });
imagesData = backend.dataIdMap.get(castedData.dataId);
}
const imagesId = imagesData.id;
const boxesId = backend.dataIdMap.get(boxes.dataId).id;
const boxIndId = backend.dataIdMap.get(boxInd.dataId).id;
const out = backend.makeOutput(outShape, 'float32');
const outId = backend.dataIdMap.get(out.dataId).id;
const imagesShapeBytes = new Uint8Array(new Int32Array(image.shape).buffer);
wasmCropAndResize(imagesId, boxesId, boxIndId, numBoxes, imagesShapeBytes, cropHeight, cropWidth, InterpolationMethod[method], extrapolationValue, outId);
if (castedData != null) {
backend.disposeData(castedData.dataId);
}
return out;
}
export const cropAndResizeConfig = {
kernelName: CropAndResize,
backendName: 'wasm',
setupFunc: setup,
kernelFunc: cropAndResize
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvcEFuZFJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0Nyb3BBbmRSZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBZ0YsTUFBTSx1QkFBdUIsQ0FBQztBQUluSSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLHNDQUFzQztBQUN0QyxJQUFLLG1CQUdKO0FBSEQsV0FBSyxtQkFBbUI7SUFDdEIscUVBQVksQ0FBQTtJQUNaLG1FQUFXLENBQUE7QUFDYixDQUFDLEVBSEksbUJBQW1CLEtBQW5CLG1CQUFtQixRQUd2QjtBQUVELElBQUksaUJBR2tFLENBQUM7QUFFdkUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDbkUsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxDQUFHLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBSXRCO0lBQ0MsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3JELE1BQU0sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV0QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBNEIsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzdCLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDNUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN2RDtJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXpELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUUsaUJBQWlCLENBQ2IsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFDbkUsU0FBUyxFQUNULG1CQUFtQixDQUFDLE1BQ2dDLENBQUMsRUFDckQsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFL0IsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0Nyb3BBbmRSZXNpemUsIENyb3BBbmRSZXNpemVBdHRycywgQ3JvcEFuZFJlc2l6ZUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vQ2FzdCc7XG5cbi8vIE11c3QgbWF0Y2ggZW51bSBpbiBDcm9wQW5kUmVzaXplLmNjXG5lbnVtIEludGVycG9sYXRpb25NZXRob2Qge1xuICBiaWxpbmVhciA9IDAsXG4gIG5lYXJlc3QgPSAxXG59XG5cbmxldCB3YXNtQ3JvcEFuZFJlc2l6ZTogKFxuICAgIGltYWdlc0lkOiBudW1iZXIsIGJveGVzSWQ6IG51bWJlciwgYm94SW5kSWQ6IG51bWJlciwgbnVtQm94ZXM6IG51bWJlcixcbiAgICBpbWFnZXNTaGFwZTogVWludDhBcnJheSwgY3JvcEhlaWdodDogbnVtYmVyLCBjcm9wV2lkdGg6IG51bWJlcixcbiAgICBtZXRob2Q6IG51bWJlciwgZXh0cmFwb2xhdGlvblZhbHVlOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21Dcm9wQW5kUmVzaXplID0gYmFja2VuZC53YXNtLmN3cmFwKENyb3BBbmRSZXNpemUsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIGltYWdlc0lkXG4gICAgJ251bWJlcicsICAvLyBib3hlc0lkXG4gICAgJ251bWJlcicsICAvLyBib3hJbmRJZFxuICAgICdudW1iZXInLCAgLy8gbnVtQm94ZXNcbiAgICAnYXJyYXknLCAgIC8vIGltYWdlcyBzaGFwZVxuICAgICdudW1iZXInLCAgLy8gY3JvcEhlaWdodFxuICAgICdudW1iZXInLCAgLy8gY3JvcFdpZHRoXG4gICAgJ251bWJlcicsICAvLyBtZXRob2RcbiAgICAnbnVtYmVyJywgIC8vIGV4dHJhcG9sYXRpb24gdmFsdWVcbiAgICAnbnVtYmVyJyAgIC8vIG91dCBpZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gY3JvcEFuZFJlc2l6ZShhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IENyb3BBbmRSZXNpemVJbnB1dHMsXG4gIGF0dHJzOiBDcm9wQW5kUmVzaXplQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge21ldGhvZCwgZXh0cmFwb2xhdGlvblZhbHVlLCBjcm9wU2l6ZX0gPSBhdHRycztcbiAgY29uc3Qge2ltYWdlLCBib3hlcywgYm94SW5kfSA9IGlucHV0cztcblxuICBjb25zdCBudW1Cb3hlcyA9IGJveGVzLnNoYXBlWzBdO1xuXG4gIGNvbnN0IFtjcm9wSGVpZ2h0LCBjcm9wV2lkdGhdID0gY3JvcFNpemUgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgY29uc3Qgb3V0U2hhcGUgPSBbbnVtQm94ZXMsIGNyb3BIZWlnaHQsIGNyb3BXaWR0aCwgaW1hZ2Uuc2hhcGVbM11dO1xuXG4gIGxldCBpbWFnZXNEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGltYWdlLmRhdGFJZCk7XG4gIGxldCBjYXN0ZWREYXRhO1xuICBpZiAoaW1hZ2UuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIGNhc3RlZERhdGEgPSBjYXN0KHtiYWNrZW5kLCBpbnB1dHM6IHt4OiBpbWFnZX0sIGF0dHJzOiB7ZHR5cGU6ICdmbG9hdDMyJ319KTtcbiAgICBpbWFnZXNEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGNhc3RlZERhdGEuZGF0YUlkKTtcbiAgfVxuXG4gIGNvbnN0IGltYWdlc0lkID0gaW1hZ2VzRGF0YS5pZDtcbiAgY29uc3QgYm94ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChib3hlcy5kYXRhSWQpLmlkO1xuICBjb25zdCBib3hJbmRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChib3hJbmQuZGF0YUlkKS5pZDtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0U2hhcGUsICdmbG9hdDMyJyk7XG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IGltYWdlc1NoYXBlQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShpbWFnZS5zaGFwZSkuYnVmZmVyKTtcblxuICB3YXNtQ3JvcEFuZFJlc2l6ZShcbiAgICAgIGltYWdlc0lkLCBib3hlc0lkLCBib3hJbmRJZCwgbnVtQm94ZXMsIGltYWdlc1NoYXBlQnl0ZXMsIGNyb3BIZWlnaHQsXG4gICAgICBjcm9wV2lkdGgsXG4gICAgICBJbnRlcnBvbGF0aW9uTWV0aG9kW21ldGhvZCBhcyB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleW9mIHR5cGVvZiBJbnRlcnBvbGF0aW9uTWV0aG9kXSxcbiAgICAgIGV4dHJhcG9sYXRpb25WYWx1ZSwgb3V0SWQpO1xuXG4gIGlmIChjYXN0ZWREYXRhICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKGNhc3RlZERhdGEuZGF0YUlkKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcm9wQW5kUmVzaXplQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENyb3BBbmRSZXNpemUsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGNyb3BBbmRSZXNpemUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19