UNPKG

@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
/** * @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